在本节,可以通过如何开始用Python调用or tools:

* 什么是优化问题

* 怎么用Python解决优化问题

* 更多Python 案例

* 定义优化问题的类型

什么是优化问题?

优化问题目标是在一个问题的解空间里找到一个最优解。

典型的案例就是车辆运输问题,解决打包及路径成本最小的问题。

对于优化问题是通用的两个部分如下,

* 目标。目标包含两个部分,① 目标的名称 ② 目标函数。

目标名称

名称必须是可量化,会以量词结尾。在日常工作通常是节省了 xx pd,工时,¥ 等。

目标函数

目标函数就是对目标的结构公式表达。公式化表达前需要对目标的构成进行合理的拆解。

约束条件

约束条件是在解决问题时,必须在特定限制条件下完成。(约束条件是在什么实例上的,是优化的目标还是输入?暂时没有定论,具体问题具体分析,是不是可列举的?)比如简单线性规划中,我们对x,y 有一定的约束,但是如果最终的obj必须也要在合理范围内?我们带着这些开始继续学习。

在解决优化问题时,我们必须先定义出优化的目标函数和约束条件。

案例

① 目标名称:成本。车辆运输问题,优化的目标量词是成本,结项报告中应当体现出节省了 xx ¥。

② 目标函数:组成部分包含了 打包、路线成本。两部分成本。第一级拆解就会分为打包+路线。

③ 约束条件:比如,卡车的装载量必须是< m 的。

通过python 来接优化问题。

接下来通过一个案例来学习如何使用Python + ortools 解决优化问题。

线性规划。

简单的表达式如下,最大化目标函数 3x+y,约束条件如下,

# 导入包from ortools.linear_solver import pywraplp# 创建GLOP计算后端
* 声明 solversolver = pywraplp.Solver.CreateSolver('GLOP')#固定的写法吗?# 创建变量x = solver.NumVar(0,1,'x')
y = solver.NumVar(0,2,'y')print('Number of variables = ' ,solver.NumVariables())# 声明约束条件创建线性约束ct = solver.Constraint(0,2,'ct')
# 0<= x+y<=2ct.SetCoefficient(x,1)
ct.SetCoefficient(y,1)print('Number of variables = ' ,solver.NumConstraints())# 创建目标函数obj = solver.Objective()obj.SetCoefficient(x,3)
obj.SetCoefficient(y,1)
obj.SetMaximization()solver.Solve()print('Soluton: ')
print('Obj val = ',obj.Value())
print('x=',x.solution_value())
print('y=',y.solution_value())

优化问题的类型

优化问题有很多种,不同类型有不同的算法来求最优解,在解决问题之前,首先必须明确问题的类型,选择解问题的算法。

or-tools 针对不同的问题提供了不同的解。(边界问题,如何将一个问题定义成该问题,而不是另外的一种呢?有明确的边界吗?在学习的过程中,我们应该寻找这种边界)

  1. 线性规划
  2. 约束规划
  3. 整数规划
  4. 打包
  5. 网络流
  6. 分配
  7. 调度
  8. 路由

线性规划

线性规划最重要的是,目标函数 & 约束条件都是线性的关系。即我们目标可以用输入线性表达,约束条件也是ax+b的线性关系式。

约束规划

约束规划是在可枚举的解空间里找到可行解,对比目标函数后决策使用。目的是在一定约束下的可行解,而不是目标函数。不要求最终的结果是最优的。

整数规划

是要求输入的变量部分或者全部是整数。

打包

① 容器有N种,不同的体积

② 物品有M种,不同的体积

目标就是再现有容器中尽可能装更多的货物。

网络流问题

许多优化问题可以用由节点和节点之间的有向图表示。 例如,货物通过铁路网络运输的运输问题可以用曲线表示,其中弧线是铁路线,节点是配送中心。 在最大流问题中,每条弧都有一个可以通过它运输的最大容量。 问题是分配每个弧上要运输的货物数量,以便运输的总量尽可能大。

分配问题

分配问题涉及将一组代理(例如,工人或机器)分配给一组任务,其中将每个代理分配给特定任务的成本是固定的。 问题是找到总成本最低的分配。 分配问题实际上是网络流问题的一个特例。

调度问题

调度问题涉及分配资源以在特定时间执行一组任务。 一个重要的例子是作业车间问题,其中在多台机器上处理多个作业。 每个作业都由一系列任务组成,这些任务必须按给定的顺序执行,并且每个任务都必须在特定的机器上进行处理。 问题是分配一个时间表,以便在尽可能短的时间间隔内完成所有作业。

路由问题

路由问题涉及为车队寻找最佳路线以穿越由有向图定义的网络。 比如 旅行商问题。

运筹学学习笔记2 python-or tools 使用相关推荐

  1. python编程语言继承_python应用:学习笔记(Python继承)

    学习笔记(Python继承)Python是一种解释型脚本语言,可以应用于以下领域: web 和 Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 后端开发 网络爬虫 有几种叫法(父类 ...

  2. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者 http://www.admin10000.com/document/9 ...

  3. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  4. python爬取b站视频封面_学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面...

    学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面 import os import requests import re import json from bs4 import B ...

  5. 学习笔记之——Python中类和对象的理解

    学习笔记之--Python中类和对象的理解 面向对象的含义和特性 类 Python中类的定义.结构.创建 Python类的定义 Python类的结构 类的创建 类的属性 类的方法 对象 对象的创建 参 ...

  6. ros学习笔记12——python实现发布和接收ros topic

    ros学习笔记12--python实现发布和接收ros topic 一.简单demo 1.工作空间是存放工程开发的相关文件的文件夹 2.创作工作空间指令 3 .创建功能包 4. 创建Topic的订阅发 ...

  7. 《流畅的python》学习笔记之python是什么类型的语言?

    讨论类型时,最好考虑两条不同的坐标线! 强类型和弱类型 如果一门语言很少隐式转换类型,说明它是强类型语言.如果经常这么做,说明它是弱类型语言.其中,java,c++和python是强类型语言,php, ...

  8. Timo学习笔记 :Python基础教程(第三版)第四章 当索引行不通时

    第四章 当索引行不通时 Timo学习笔记 :Python基础教程(第三版)第三章 使用字符串 这是word编辑的最后一章笔记,第五章开始将直接用这个模板记录. 本章笔记很少,也很简单.很多方法可以到要 ...

  9. python3第三方库手册_python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑...

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  10. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数"可变长参数" 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.co ...

最新文章

  1. Linux中Sleep和Wait命令的使用方式
  2. SSM整合支付宝支付功能
  3. 制作支付页面弹框html,JS实现仿微信支付弹窗功能_蜡烛_前端开发者
  4. Spring学习8-Spring事务管理(注解式声明事务管理)
  5. android开发之播放音乐的方法
  6. 计算机系统-电路设计01-非门电路
  7. mysql 连接数和内存的关系_php-fpm进程数和mysql连接数之间的关系
  8. matlab遗传算法tsp程序,遗传算法解TSP问题的程序
  9. 声卡驱动安装失败/电脑没声音/声卡驱动消失 解决办法合集记录
  10. 什么是rip协议其优缺点_ospf和rip 优缺点
  11. 【向生活低头】用python提取gif动图的每一帧为png格式
  12. 8_gin日拱一足---异步和同步
  13. ODrive应用 #3 odrive_gui入门指南
  14. 新浪微博html5手机版,新浪微博手机版2018
  15. ubuntu文献翻译软件:兰译
  16. el-table拆分单元格
  17. python实现最大独立集算法_2018校招总结(外企,国内大公司,国内创业公司)...
  18. android手机在线什么意思,用安卓手机登录QQ显示“手机在线”,为何苹果就显示iPhone在线?...
  19. C语言-实现栈的基本操作(顺序栈)
  20. 电信校园网 - 断网重连 - 武汉xx学院

热门文章

  1. AIDA64内存与缓存测试过了算稳定吗_无需XMP默认3200MHz,十铨 开创者 内存开箱简测...
  2. JAVA 图片URL地址转Byte文件流
  3. JS中文乱码解决方案
  4. 【项目总结】中国大学生计算机设计(机械制造暨政治正确)大赛
  5. matlab 均匀设计编程,均匀设计均匀设计表--方开泰.doc
  6. 【问题解决】D:\Users10476\AppData\Local\Programs\Microsoft vsCode\unins000.exe 尝试在目标目录创建文件时发生一个错误:拒绝访问。.
  7. jmeter的脚本录制3
  8. 中国31省旅游院校数和旅游院校招生数(2009-2017年)
  9. 全新TP开发聚合支付系统源码+兼容全部易支付
  10. jquery ajax提交form表单,jquery+ajax提交form表单方法总结