我知道在gurobi中我可以从最初的解决方案开始。即在使用
解决LP之后 m.optimize()
对于模型m,我可以改变一些约束并使用
m.reset()
m.optimize()
从头开始为LP找到新的解决方案或只是调用
m.optimize()
从初始解决方案中找到新的解决方案。
我的问题是,当gurobi从初始解决方案开始时,它是否会对获得新解决方案所做的最小变化(对变量)?
我认为这是一个微小的扰动问题。如果gurobi默认不这样做,是否有任何方式通知gurobi进行最小的更改?
进一步评论: 我知道热启动可能会更快,但变量的变化会很小。例如,目标函数是
maximize(i1+i2+i3+i4)
并且初始约束集只有
i1,i2 can be set as 1 and i3,i4 as 0.
现在约束发生变化,新解决方案(仍然只有2个变量可以设置为1)可以是
i1, i3 as 1 (or) i3, i4 as 1.
gurobi优化器能否以最小的变化i1,i3为1来选择解决方案?
另外,如果是另一种解决方案
i1,i2 as 1
gurobi会选择那个解决方案与现有解决方案完全相同吗?
答案 0 :(得分:1)
是的,这被称为热启动。大多数现代线性编程求解器(包括Gurobi Optimizer)在修改模型并调用optimize()
函数时使用热启动。通过微小的变化,使用热启动来解决模型通常要快得多。但是,如果进行实质性更改,热启动可能比从头开始解决模型要慢。 Gurobi Optimizer也为MIP模型使用热启动。
使用Gurobi Optimizer,您还可以通过Start
属性指定起始值,或者通过原始和双重启动属性(分别为PStart
和DStart
)指定LP模型。< / p>