Gurobi求解器基础入门官方教程

   日期:2024-12-26    作者:hzhangbo 移动:http://ljhr2012.riyuangf.com/mobile/quote/46698.html

在建模过程中,经常要对带下标数据做挑选,不同下标的数据进行组合,使用python原本处理数据的会面临效率问题,因此Gurobi 中采用了特殊的扩展对象 和

Gurobi求解器基础入门官方教程

(1)Gurobi tuplelist

增加了快速筛选功能,例如从中找到第一个元素为的元组

 
 

等效于下面的代码

 
 

(2)Gurobi tupledict

键值为 tuple (元组,可以使用 select, sum, prod 函数
用于变量和约束(后面案例中体现

  • 函数:变量求和
 
 
  • 函数:用于变量和系数相乘后累加

下面两个表达式等效,即变量和系数想乘后累加

 

(3)Multidict()

创建 tuplelist 和 tupledict 的便捷方法,如下返回

 
 

(4)创建list

(3)参数设置方法

 

对于python,可以简写成,例如设置求解时间有如下写法

 

(4)常用参数

(5)参数使用案例

 
 

(6)属性类别

  • Model Attributes 模型属性
    例如: 模型优化方向(最大化或最小化); 当前目标值
  • Variable Attributes 变量属性
    例如: 当前变量的取值; 初始解
  • Linear Constraint Attributes 线性约束属性
    例如: 约束对应的对偶值; 约束的松弛量; 约束的右端项
  • Special-ordered Set constraints Attributes SOS约束属性
    例如: 对不可行的模型,指示约束是否属于IIS (Irreducible Inconsistent Subsystem)
  • Quadratic Constraint Attributes 二次约束属性
    例如: 约束右端项
  • General Constraint Attributes 广义约束属性
    例如: 约束名称
  • Quality Attributes 解质量属性
    例如: 最大的界违反; 整数变量离最近整数的最大距离
  • Multi-objective Attributes 多目标属性
    例如: 对应多目标表达式中变量系数; 对应目标函数值

(7)属性设置和查询方法

属性设置,注意并不是所有的属性都可以设置

 
 

属性查询

 
 

(8)常用属性

(1)调用自动调参工具

 

(2)调参参数

(3)调参案例

 
 

(1)广义约束

  • :一组变量(包含常数)中取最小
 

例如:z = min(x, y, 3)

 
  • :取绝对值
 

例如:x = |y|

 
  • :一组变量的值全等于1,则取1,否则取0。所有的变量都被视为0,1变量,不论他们之前被定为什么类型
 

例如:x = 1且y = 1,那么z = 1,否则 z = 0

 
  • :一组变量的值有一个等于1,则取1,否则取0。所有的变量都被视为0,1变量,不论他们之前被定为什么类型
 

例如:x = 0且y = 0,那么z = 0,否则 z = 1

 
  • :指示变量的值为1,约束成立,否则约束可以被违反
 

例如:如果 z = 1,则 x+y <= 4

 

(2)范围约束

 

例如: 5 <= x + y + z <= 10

 

(3)SOS约束 Special-Ordered Set

SOS_TYPE1 表示一组有序变量中最多有一个变量取值不为0
SOS_TYPE2 表示一组有序变量中最多有两个变量取值不为0,且非零变量相邻,变量是否相邻由权重决定

 

例如

 
 

(1)多个目标函数

所有的目标函数都为线性的,并且目标函数的优化方向一致(全部最大化或全部最小化),可以通过乘以 -1 实现不同的优化方向。

 
 
 

(2)分段线性函数

对一些非线性模型,可以使用这一功能去线性逼近

 
 
 
 
 
 

更多python+gurobi的使用案例见Gurobi官网Build Your Optimization Skills with Python

Gurobi中的回调函数callbacks为用户在求解模型时提供了高级控制功,用于在求解过程中获取信息、终止优化、加入额外约束条件(割平面)、加入自己开发的算法等。

 
 
  • 查询一些信息,例如目标值,节点数
 
  • 查询变量在当前节点的松弛解
 
  • 查询可行解变量的取值
 
  • 在节点添加割平面
 
  • 在节点添加Lazy Cut(与一般cut区别在于只有在被违反的时候才起作
 
  • 向当前节点导入一个解,可以计算导入解的目标值,对复杂的问题,可以先开发启发式算法找到高质量的解,然后导入解让求解器在其基础上继续求解
 
 
  • 用户切割User cuts:通过消除分数解来加强混合整数规划(MIP)的松弛,对于模型不是必需约束,但是能更快的解决MIP问题,参考割平面法中的切割
  • 惰性约束Lazy constraints:模型必要约束,如果没有这些约束,模型是不正确的。惰性约束通常用于处理包含相对较多约束的模型,其中大多数约束都是显然满足的。在计算上只在这些约束被违反时考虑它们更为高效,参考列生成

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号