Gurobi重要参数和属性大全

参数类别属性例子
Termination停止参数,控制求解停止条件TimeLimit设置时间;
SolutionLimit设置MIP可行解数量
Tolerances容差参数,控制求解器的最优或可行的偏差MIPGap设置MIP的gap值;
FeasibilityTol设定精度
Simplex单纯形参数,控制单纯形法InfUnbdInfo控制是否获取不可行或无界模型的额外信息
Barrier障碍法参数,控制障碍法QCPDual控制是否获取二次模型的对偶值
Mip混合整数参数,控制混合整数规划算法BranchDir设定优先分支方向;
Heuristics设定启发式算法求解时间所占的比重
Mip Cuts割平面参数,控制割平面Cuts设定割平面法的强度
Tuning调参参数,控制调参工具TuneCriterion设定调参的准则;
TuneTimeLimit设定调参的时间
Multiple Solutions多解参数,尝试寻找多个解PoolSolutions 决定存储可行解的数量
常用参数属性取值
TimeLimit时间设定单位秒
MIPFocus设定MIP的求解侧重点0 默认。均衡搜寻可行解和证明最有;
1 侧重快速找到可行解;
2 侧重证明最有;
3 侧重界的提升(发现界提升缓慢)
Method设定线性模型或MIP根节点的求解方法-1 默认,(3LP, 2 QP/QCP, 1 MIP);
0 初始单纯形;
1 对偶单纯形;
2 内点法;
3 (0,1,2) 并发(线程数,重复运行最基本可能不同)
4 确定性(0, 1, 2)并发,重复运行结果相同;
5 确定性(0, 1)并发,重复运行结果相同
LogToConsolelog记录是否在控制台显示0 关闭控制台显示;
1 打开控制台显示(默认)
LogFile设定log文件名称默认空字符串
Presolve控制预处理的程度-1 默认 ,0 关闭预处理,1 保守倾向;
2 进取倾向(耗时多,处理后的模型更紧凑)
MIPGap设定gap值0.0001默认,小于给定的值终止计算
ImproveStartGap提升策略开始gap值0.0 默认,例如取0.1,给gap < 0.1,开始提升策略
ImproveStartNodes提升策略开始节点值Infinity 默认,例如取5,当前节点数 > 5,开始提升策略;
ImproveStartTime提升策略开始的时间Infinity默认,例如取100,当运行时间到100s时,开始提升策略
ObjNumber目标函数索引(多目标)索引从0开始编号

参数设置方法

请添加图片描述


属性类别例子
Model Attributes 模型属性ModelSense 模型优化方向(最大值或最小值);
Objval 当前目标值。
Variable Attributes 变量属性X 当前变量的取值;
Start MIP初始解。
Linear Constaraint Attributes 线性约束属性Pi 约束对应的对偶值
Slack 约束的松弛量
RHS 约束的右端项
Special-ordered Set constraints Attributes SOS约束属性llssos对不可行的模型,指示约束是否属于IlS(Irreducible Inconsistent Subsystem)

参数设置和查询方法

请添加图片描述

属性名字作用取值
ModelSense(可调整)模型优化方向1 最小化(默认);
-1 最大化
ObjVal(不可调整)目标函数值
Status(不可调整)解的状态
LB/UB(可调整)变量下界/上界double
Obj(可调整)变量的线性目标系数oduble
VType变量类型C,B,I,S,N
X(不可调整)变量值double
Start(可调整)变量的初始值double
RHS(可调整)线性约束右端项double
Pi(不可调整)线性约束对应的对偶变量double

自动调参

参数名称作用取值
TuneCriterion调整调参准则-1 默认, 缩短发现最优解所需的时间;
1 最优的Gap;
2 最好的可行解;
3 最好的bound。
TuneJobs分布式并行调参0 默认.
TuneOutput控制输出结果的量0 没有输出;
1 发现最好参数组合时输出;
2 默认,输出试过的参数组合;
3 试过的参数组合和详细的求解器输出。
TuneResults返回最优参数组合的数量-1 默认,按照调整参数的个数返回调参结果。
TuneTimeLimit调参时间-1 自动选择时间
TuneTrials每组参数组合运行的次数主要目的减小随机因素的影响

特殊约束的表达方式和使用

Max:
  addGenConstrMax( resvar, vars, constant, name )
  resvar 变量(x = max(x1, x2, 10))
  vars 一组变量(可包含常数)
  constant 常数
  name 广义约束名称
  例如: z = max(x, y, 3)
    m.addGenConstrMax(z, [x, y], 3, "maxconstr")
    m.addGenConstrMax(z, [x, y, 3], name="maxconstr")
  换成一般的约束表达方式:
    m.addConstr(z == max_([x, y, 3]), "maxconstr")
    m.addConstr(z == max_(x, y, 3), "maxconstr")


广义约束—Min
  addGenConstrMin( resvar, vars, constant, name )
    ·resvar 变量(x = min(x1,x2,10))vars 一组变量(可以包含常数)
    • constant 常数
    • name 广义约束名称
    例如: z = min(x, y, 3)
      m.addGenConstrMin(z, [x, y], 3, "minconstr")
      m.addGenConstrMin(z, [x, y, 3], name="minconstr")
    换成一般的约束表达方式:
      m.addConstr(z == min_([x, y, 3]), "minconstr")
      m.addConstr(z == min_(x, y, 3), "minconstr")
      
      
• 广义约束—Abs
  addGenConstrAbs( resvar, argvars, name ) 
    • resvar 变量
    • argvar 变量
    • name 广义约束名称
    例如: x = |y| 
      m.addGenConstrAbs(x, y, "absconstr")
    换成一般的约束表达方式:
      m.addConstr(x == abs_(y), "absconstr")

• 广义约束—And
  addGenConstrAnd( resvar, vars, name ) 
    • resvar 变量
    • vars 一组变量
    • name 广义约束名称
    一组变量的值全等于1,则取1,否则取0。
    例如: x = 1且y = 1,那么z = 1,否则 z = 0 
      m.addGenConstrAnd(z, [x,y], "andconstr")
    换成一般的约束表达方式:
      m.addConstr(z == and_(x, y), "andconstr")
    
• 广义约束—Or
  addGenConstrOr( resvar, vars, name ) 
    • resvar 变量
    • vars 一组变量
    • name 广义约束名称
    一组变量的值有一个等于1,则取1,否则取0。
    例如: x = 0且y = 0,那么z = 0,否则 z = 1 
      m.addGenConstrOr(z, [x,y], "orconstr")
    换成一般的约束表达方式:
      m.addConstr(z == or_(x, y), "orconstr")
      
• 广义约束—Indicator
  addGenConstrIndicator(binvar, binval, lhs, sense, rhs, name) 
    • binvar 指示变量
    • binval 指示变量的值{0,1}
    • lhs 约束左端项
    • sense 约束符号
    • rhs 约束右端项
    • name 广义约束名称
    指示变量的值为1,约束成立,否则约束可以被违反。
    例如: 如果 z = 1,则 x+y <= 4
      m.addGenConstrIndicator(z, True, x + y, GRB.LESS_EQUAL, 4, 'indicator') 
    换成一般的约束表达方式:
      m.addConstr((z == 1) >>(x + y<= 4))
      
• 范围约束
  addRange( expr, lower, upper, name)
    • expr 表达式
    • lower 下界
    • upper 上界
    • name 约束名称
    例如: 5 <= x + y + z <= 10 
      m.addRange(x+y+z, 5, 10, "c") 
    换成一般的约束表达方式:
      m.addConstr(x+y+z==[5,12])
      
• SOS约束(Special-Ordered Set)
  addSOS( type, vars, wts=None )type 约束种类(GRB.SOS_TYPE1 或者 GRB.SOS_TYPE2).vars 变量
    • wts 变量对应的权重,且权重唯一,默认1, 2, 3 ...
  SOS_TYPE1 表示一组有序变量中最多有一个变量取值不为0;
  SOS_TYPE2 表示一组有序变量中最多有两个变量取值不为0,且非零变量相邻。变量是否相邻由权重决定。
    model.addSOS(GRB.SOS_TYPE2, [x, y, z], [1, 2, 4])
    
• 目标函数(多个目标) 
  setObjectiveN( expr, index, priority, weight, abstol, reltol, name )
    • expr 目标函数表达式
    • index 目标函数对应的序号(0, 1, 2,.)
    • priority 优先级(整数值)
    • weight 权重(浮点数)
    • abstol 允许的目标函数值最大的降低量 abstol(浮点数)
    • reltol 允许的目标函数值最大的降低量reltol*|目标函数值|(浮点数)
    • name 目标函数名称
注意:所有的目标函数都为线性的,并且目标函数的优化方向一致(全部最大化或全部最小化)。可以通过乘
以 -1 实现不同的优化方向。
    Gurobi 支持三种多目标模式:
      • Blend(合成型) 有权重,没有优先级。例如优化:
        Obj1 = x + y weight1 = 1 
        Obj2 = x – 5y weight2 = -2 
        Gurobi会混合这两个目标值形成:1*(x+y) - 2*(x – 5y) = -x+11y
        
      • Hierarchical(分层型) 有优先级。 例如优化:
        Obj1 = x + y priority 1 = 10
        Obj2 = x – 5y priority 2 = 5
        Gurobi 按照优先级大小优化(先优化Obj1),若没有设定abstol或reltol,在优化低优先级目标时,不会改
        变高优先级的目标值。假设Obj1=10,在优化 Obj2 时只能在使得 Obj1=10 的所有解中挑选最优解
        。
      • 混合以上两种。
        m.setObjectiveN(x+y+3*z, index=0, weight=0.1,priority=1, name='obj1')
        m.setObjectiveN(2*x+y+3*z, index=1, weight=3, priority=3, name='obj2')
        
      通过参数 ObjNumber 选择特定的目标,进而获得对应的目标函数值。
      for i in range(model.NumObj):
        model.setParam(GRB.Param.ObjNumber, i)
        print('Obj%d = ' %(i+1), model.ObjNVal)
        
• 目标函数(分段线性目标) 
  setPWLObj( var, x, y ) 
    • var 指定变量的目标函数是分段线性
    • x 定义分段线性目标函数的点的横坐标值(非减序列)
    • y 定义分段线性目标函数的点的纵坐标值
对一些非线性模型,可以使用这一功能去线性逼近。
    
    m.setPWLObj(x, [0, 2, 5], [0, 2, 3])
    m.setAttr(GRB.Attr.ModelSense, -1)

请添加图片描述请添加图片描述

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值