运筹学学习笔记2 python-or tools 使用
在本节,可以通过如何开始用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 针对不同的问题提供了不同的解。(边界问题,如何将一个问题定义成该问题,而不是另外的一种呢?有明确的边界吗?在学习的过程中,我们应该寻找这种边界)
- 线性规划
- 约束规划
- 整数规划
- 打包
- 网络流
- 分配
- 调度
- 路由
线性规划
线性规划最重要的是,目标函数 & 约束条件都是线性的关系。即我们目标可以用输入线性表达,约束条件也是ax+b的线性关系式。
约束规划
约束规划是在可枚举的解空间里找到可行解,对比目标函数后决策使用。目的是在一定约束下的可行解,而不是目标函数。不要求最终的结果是最优的。
整数规划
是要求输入的变量部分或者全部是整数。
打包
① 容器有N种,不同的体积
② 物品有M种,不同的体积
目标就是再现有容器中尽可能装更多的货物。
网络流问题
许多优化问题可以用由节点和节点之间的有向图表示。 例如,货物通过铁路网络运输的运输问题可以用曲线表示,其中弧线是铁路线,节点是配送中心。 在最大流问题中,每条弧都有一个可以通过它运输的最大容量。 问题是分配每个弧上要运输的货物数量,以便运输的总量尽可能大。
分配问题
分配问题涉及将一组代理(例如,工人或机器)分配给一组任务,其中将每个代理分配给特定任务的成本是固定的。 问题是找到总成本最低的分配。 分配问题实际上是网络流问题的一个特例。
调度问题
调度问题涉及分配资源以在特定时间执行一组任务。 一个重要的例子是作业车间问题,其中在多台机器上处理多个作业。 每个作业都由一系列任务组成,这些任务必须按给定的顺序执行,并且每个任务都必须在特定的机器上进行处理。 问题是分配一个时间表,以便在尽可能短的时间间隔内完成所有作业。
路由问题
路由问题涉及为车队寻找最佳路线以穿越由有向图定义的网络。 比如 旅行商问题。
运筹学学习笔记2 python-or tools 使用相关推荐
- python编程语言继承_python应用:学习笔记(Python继承)
学习笔记(Python继承)Python是一种解释型脚本语言,可以应用于以下领域: web 和 Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 后端开发 网络爬虫 有几种叫法(父类 ...
- python3.4学习笔记(九) Python GUI桌面应用开发工具选择
python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者 http://www.admin10000.com/document/9 ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...
- python爬取b站视频封面_学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面...
学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面 import os import requests import re import json from bs4 import B ...
- 学习笔记之——Python中类和对象的理解
学习笔记之--Python中类和对象的理解 面向对象的含义和特性 类 Python中类的定义.结构.创建 Python类的定义 Python类的结构 类的创建 类的属性 类的方法 对象 对象的创建 参 ...
- ros学习笔记12——python实现发布和接收ros topic
ros学习笔记12--python实现发布和接收ros topic 一.简单demo 1.工作空间是存放工程开发的相关文件的文件夹 2.创作工作空间指令 3 .创建功能包 4. 创建Topic的订阅发 ...
- 《流畅的python》学习笔记之python是什么类型的语言?
讨论类型时,最好考虑两条不同的坐标线! 强类型和弱类型 如果一门语言很少隐式转换类型,说明它是强类型语言.如果经常这么做,说明它是弱类型语言.其中,java,c++和python是强类型语言,php, ...
- Timo学习笔记 :Python基础教程(第三版)第四章 当索引行不通时
第四章 当索引行不通时 Timo学习笔记 :Python基础教程(第三版)第三章 使用字符串 这是word编辑的最后一章笔记,第五章开始将直接用这个模板记录. 本章笔记很少,也很简单.很多方法可以到要 ...
- python3第三方库手册_python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑...
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...
- Noah的学习笔记之Python篇:装饰器
Noah的学习笔记之Python篇: 1.装饰器 2.函数"可变长参数" 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.co ...
最新文章
- Linux中Sleep和Wait命令的使用方式
- SSM整合支付宝支付功能
- 制作支付页面弹框html,JS实现仿微信支付弹窗功能_蜡烛_前端开发者
- Spring学习8-Spring事务管理(注解式声明事务管理)
- android开发之播放音乐的方法
- 计算机系统-电路设计01-非门电路
- mysql 连接数和内存的关系_php-fpm进程数和mysql连接数之间的关系
- matlab遗传算法tsp程序,遗传算法解TSP问题的程序
- 声卡驱动安装失败/电脑没声音/声卡驱动消失 解决办法合集记录
- 什么是rip协议其优缺点_ospf和rip 优缺点
- 【向生活低头】用python提取gif动图的每一帧为png格式
- 8_gin日拱一足---异步和同步
- ODrive应用 #3 odrive_gui入门指南
- 新浪微博html5手机版,新浪微博手机版2018
- ubuntu文献翻译软件:兰译
- el-table拆分单元格
- python实现最大独立集算法_2018校招总结(外企,国内大公司,国内创业公司)...
- android手机在线什么意思,用安卓手机登录QQ显示“手机在线”,为何苹果就显示iPhone在线?...
- C语言-实现栈的基本操作(顺序栈)
- 电信校园网 - 断网重连 - 武汉xx学院
热门文章
- AIDA64内存与缓存测试过了算稳定吗_无需XMP默认3200MHz,十铨 开创者 内存开箱简测...
- JAVA 图片URL地址转Byte文件流
- JS中文乱码解决方案
- 【项目总结】中国大学生计算机设计(机械制造暨政治正确)大赛
- matlab 均匀设计编程,均匀设计均匀设计表--方开泰.doc
- 【问题解决】D:\Users10476\AppData\Local\Programs\Microsoft vsCode\unins000.exe 尝试在目标目录创建文件时发生一个错误:拒绝访问。.
- jmeter的脚本录制3
- 中国31省旅游院校数和旅游院校招生数(2009-2017年)
- 全新TP开发聚合支付系统源码+兼容全部易支付
- jquery ajax提交form表单,jquery+ajax提交form表单方法总结