Gurobi + Python
自学Gurobi的时候发现国内缺乏相对应的教程,大多止于浅层的gurobi安装和搭载,稍微深入点也只是最基础的模型建立:add variable, update, add constraint, set objective, optimize 和基本的读写。 甚至缺乏对于结果的解读。
Google到的内容比 百度 多的多。
最好的资料当然是官网的 http://www.gurobi.com/documentation/ 的 Example Tour 和 Referenec Manual;
存档一下学习中遇到的坑。
1. addConstr()
只能 ==, <=, >= ,不能<, >
2. if ... else
如果想实现 if x>0 : a = 1 ; else : a = 0
不能直接实现,要进行一定的转化。
x <= a * A <= A + x - B (A 为足够大的常数,B为足够小的正数(小于x可能达到的最小值,大于0),a为binary)
3. max_(), abs_()
这些函数,括号里面都必须是variable,不能是LinExpr(), 有必要的话,可以建成新的variable再使用max_()和abs_()函数
当结果是Model is infeasible 时:利用 Model.computeIIS() 来查问题(虽然我认为并不是太好用)
Reference :https://nathanbrixius.wordpress.com/2012/09/28/detecting-the-sources-of-model-infeasibility-using-gurobi/
model = Model()
vars = model.getVars()
constrs = model.getConstrs()
for i in range (len(constrs)):print (constrs[i].getAttr(GRB.Attr.IISConstr))
for i in range(len(solution)):print (solution[i].getAttr(GRB.Attr.IISLB), " ", vars[i].getAttr(GRB.Attr.IISUB))
输出 1 有问题; 0 没问题
4. 如何输出指定个数的较优解
PoolSearchMode 表示Gurobi搜索最优解的方式。 默认值为0,表示目标为搜索唯一最优解;设定为1,表示搜索多个解,但不保证解的质量;设定为2,表示搜索多个解,优先取高质量的解。
PoolSolutions 表示存储的解的个数。改变该参数并不能改变该模型的可行解个数。但在使用过程中发现,当PoolSearchModel = 2, 如果有很多个可行解,SolCount不会显示实际可行解个数(由于运行时间限制),此时改变PoolSolutions可改变SolCount,得到更多可行解。
X 当PoolSearchMode为默认值0时,求解得到唯一解,存储在X中,可通过以下代码得到该解
model = Model()
vars_x = model.addVar(lb=0, ub = 1, vtype = GRB.CONTINUOUS)....
vars = model.getVars()
print ("最优解为"vars[0].getAttr("X"))
Xn 当PoolSearchMode为1或者2时,得到多个解(包括sub-optimal),存储在Xn中,可通过以下代码得到解。其中当SolutionNumber 设置为 0 时, 得到的解与 X 相同
model = Model()
vars_x = model.addVar(lb=0, ub = 1, vtype = GRB.CONTINUOUS)
model.setParam("PoolSearchMode",2)
model.setParam("PoolSolutions",10)
....
vars = model.getVars()
for i in range(10):model.setParam("SolutionNumber",i)print ("最优解为"vars[0].getAttr("Xn"))
SolCount 表示搜索得到的解个数,SolutionNumber一定小于SolCount
SolutionNumber 表示得到的解个数,可以将这个参数看作Xn的index,范围为[0,SolCount-1]。每修改一次,输出不同的Xn
Gurobi + Python相关推荐
- Gurobi +Python 高效数学规划及建模实例
Gurobi +Python 1 前言 2 快速入门 2.1 辅助函数 2.1.1 列表推导式/列表解析式 2.1.2 quicksum() 2.1.3 multidict() 2.1.4 tuple ...
- 用Gurobi+python求解设施选址问题(facility location)
参考:Gurobi 官方资源 设施选址(Facility Location) 1.背景介绍 设施选址问题在许多工业领域如物流,通信等都有应用,在本案例中展示如何解决设施选址问题,决策出仓库的数量和地点 ...
- gurobi使用系列之一——gurobi+Python的实例使用(简单整数规划)
gurobi是由美国Gurobi公司开发的新一代大规模数学规划优化器,在 Decision Tree for Optimization Software 网站举行的第三方优化器评估中,展示出更快的优化 ...
- python大神写的代码_初学Python,只会写简单的代码。手头有份Python代码,但是调用C模块生成的.pxd和.pyx文件,运行过程总报错,希望大神指点,调试前该做哪些工作呢?...
报错内容如下: Traceback (most recent call last): File "E:\Python27\setup.py", line 16, in from s ...
- Gurobi 生产计划调度学习案例(含代码实现) (生产切换、装配计划)
一.前言 利用数学规划建立和解决生产计划调度问题,已经是运筹学成熟应用领域之一.各种书籍.案例.最佳实践不胜枚举. 大部分数学规划方法在建立生产计划和调度模型时,假设以某个自然的时间间隔为建模时间单位 ...
- python导入pyx文件_初学Python,只会写简单的代码。手头有份Python代码,但是调用C模块生成的.pxd和.pyx文件,运行过程总报错,希望大神指点,调试前该做哪些工作呢?...
报错内容如下: Traceback (most recent call last): File "E:\Python27\setup.py", line 16, in from s ...
- gurobi python_Gurobi
Gurobi python优化模块案例实践 This section will work through a simple Python example in order to illustrate ...
- Python总结篇——知识大全
识别图中二维码,领取python全套视频资料 收藏 分享 重大通知!1月起,长风公园上班族可正式在职申读985/211本科! 尚德机构 · 顶新 qq_41593761: 好好好!(2周前#3楼) ...
- Python调用Gurobi:Assignment Problem(指派问题)简单案例
Python调用Gurobi:简单案例 Python调用Gurobi:Assignment Problem简单案例 1. Assignment Problem Model Python调用Gurobi ...
最新文章
- Python之父重回决策层,未来如何发展?
- memcpy的使用方法总结
- fabric 一个链码如何调用另一个链码
- 项目中常用的 iOS 第三方库
- python安装mysql数据库教程,Python配置mysql的教程(必看)
- 平板电脑连接投影仪_交互式触控幼教白板如何与平板进行连接-微幼科技
- Oracle中NVL2 和NULLIF的用法
- 信息学奥赛一本通(1056:点和正方形的关系)
- SAP License:ERP咨询顾问之路
- c语言中动态数组的实现
- python datetime strptime_python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客...
- android闪退报错,写了一个android小程序,测试的时候闪退,然鹅log并没有报错
- 贵州小学计算机编程比赛,2019年贵阳市中小学电脑制作活动成功举办
- 【Ruby】【改gem源镜像】【Win10 + Jruby-9.1.2.0 + Rails 5.1.3 + gem 2.6.4 】
- 微信小程序: 摇色子
- 你知道战国四大名将都有谁吗
- Python显示WiFi密码
- Solr评分整理汇总:深入理解Lucene默认打分算法以及常用的三种评分方法
- 任正非的“先僵化、后优化、再固化”方针
- 电赛综合测评题练习(一)-(与2013年电赛综合测评要求类似)