2016-12-28 27 views
1

我知道在gurobi中,我可以从最初的解决方案入手。即解决在使用从部分解决方案开始时,gurobi会做最小变化(最小扰动)吗?

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选择作为解决方案是为现有的完全一样?

回答

1

是的,这被称为热启动。大多数现代线性规划解算器(包括Gurobi Optimizer)在修改模型并调用optimize()函数时使用热启动。只需稍作修改,使用热启动来解决模型通常要快得多。但是,如果进行实质性更改,温暖的开始可能比从头开始解决模型要慢。 Gurobi Optimizer还为MIP模型使用了热启动。

随着Gurobi优化,你也可以通过指定的原始和双启动属性(PStartDStart,分别)通过Start属性,或LP模式启动值。

+0

谢谢。我明白,温暖的开始可能会更快,但变量的变化是最小的。例如,目标函数是“最大值(i1 + i2 + i3 + i4)”,初始约束条件是只能将i1,i2设置为1,将i3,i4设置为0.现在,约束条件发生变化,并且新的解决方案(仍然只有2个变量可以设置为1)可以是'i1,i3'作为1(或)'i3,i4'作为1. gurobi优化器可以最终选择解决方案, i1,i3'为1?另外如果另一个解决方案是'i1,i2'作为1,gurobi会选择那个解决方案与现有解决方案完全相同? – brokendreams

+0

这将取决于模型的构建方式。如果你只是改变矩阵中的系数,你将自动获得热启动。如果你添加新的限制,那么你可能会或可能不会得到温暖的开始。如果你不这样做,你总是可以明确地设置变量的'Start'属性。 –

+0

但温暖的开始确保最小的扰动?即使我假设热启动确实发生,是否有反正告诉求解器我希望新的解决方案尽可能接近最初的解决方案?或者,一般情况下,温暖的开始是否尽可能接近现有解决方案来生成新的解决方案? – brokendreams