自学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相关推荐

  1. Gurobi +Python 高效数学规划及建模实例

    Gurobi +Python 1 前言 2 快速入门 2.1 辅助函数 2.1.1 列表推导式/列表解析式 2.1.2 quicksum() 2.1.3 multidict() 2.1.4 tuple ...

  2. 用Gurobi+python求解设施选址问题(facility location)

    参考:Gurobi 官方资源 设施选址(Facility Location) 1.背景介绍 设施选址问题在许多工业领域如物流,通信等都有应用,在本案例中展示如何解决设施选址问题,决策出仓库的数量和地点 ...

  3. gurobi使用系列之一——gurobi+Python的实例使用(简单整数规划)

    gurobi是由美国Gurobi公司开发的新一代大规模数学规划优化器,在 Decision Tree for Optimization Software 网站举行的第三方优化器评估中,展示出更快的优化 ...

  4. python大神写的代码_初学Python,只会写简单的代码。手头有份Python代码,但是调用C模块生成的.pxd和.pyx文件,运行过程总报错,希望大神指点,调试前该做哪些工作呢?...

    报错内容如下: Traceback (most recent call last): File "E:\Python27\setup.py", line 16, in from s ...

  5. Gurobi 生产计划调度学习案例(含代码实现) (生产切换、装配计划)

    一.前言 利用数学规划建立和解决生产计划调度问题,已经是运筹学成熟应用领域之一.各种书籍.案例.最佳实践不胜枚举. 大部分数学规划方法在建立生产计划和调度模型时,假设以某个自然的时间间隔为建模时间单位 ...

  6. python导入pyx文件_初学Python,只会写简单的代码。手头有份Python代码,但是调用C模块生成的.pxd和.pyx文件,运行过程总报错,希望大神指点,调试前该做哪些工作呢?...

    报错内容如下: Traceback (most recent call last): File "E:\Python27\setup.py", line 16, in from s ...

  7. gurobi python_Gurobi

    Gurobi python优化模块案例实践 This section will work through a simple Python example in order to illustrate ...

  8. Python总结篇——知识大全

    识别图中二维码,领取python全套视频资料 收藏   分享 重大通知!1月起,长风公园上班族可正式在职申读985/211本科! 尚德机构 · 顶新 qq_41593761: 好好好!(2周前#3楼) ...

  9. Python调用Gurobi:Assignment Problem(指派问题)简单案例

    Python调用Gurobi:简单案例 Python调用Gurobi:Assignment Problem简单案例 1. Assignment Problem Model Python调用Gurobi ...

最新文章

  1. Python之父重回决策层,未来如何发展?
  2. memcpy的使用方法总结
  3. fabric 一个链码如何调用另一个链码
  4. 项目中常用的 iOS 第三方库
  5. python安装mysql数据库教程,Python配置mysql的教程(必看)
  6. 平板电脑连接投影仪_交互式触控幼教白板如何与平板进行连接-微幼科技
  7. Oracle中NVL2 和NULLIF的用法
  8. 信息学奥赛一本通(1056:点和正方形的关系)
  9. SAP License:ERP咨询顾问之路
  10. c语言中动态数组的实现
  11. python datetime strptime_python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客...
  12. android闪退报错,写了一个android小程序,测试的时候闪退,然鹅log并没有报错
  13. 贵州小学计算机编程比赛,2019年贵阳市中小学电脑制作活动成功举办
  14. 【Ruby】【改gem源镜像】【Win10 + Jruby-9.1.2.0 + Rails 5.1.3 + gem 2.6.4 】
  15. 微信小程序: 摇色子
  16. 你知道战国四大名将都有谁吗
  17. Python显示WiFi密码
  18. Solr评分整理汇总:深入理解Lucene默认打分算法以及常用的三种评分方法
  19. 任正非的“先僵化、后优化、再固化”方针
  20. 电赛综合测评题练习(一)-(与2013年电赛综合测评要求类似)

热门文章

  1. 关于最大公约数和最小公约数
  2. 对称矩阵到三对角矩阵的Lanczos推导(python,数值积分)
  3. Python——下载数据集时报错解决:ContentTooShortError: <urlopen error retrieval incomplete: got only XX out of XX
  4. 滤波、信号、数字与模拟、金字塔 一看就懂 教程
  5. 使用 MVVMLight 消息通知
  6. PHP + Redis抢购秒杀
  7. MAC 修改环境变量
  8. 身份证识别离线ocr
  9. Android 输入法详解
  10. WIN 11 无法正常运行HCL 模拟器