如果我们在解决模型之前初始化特定值(即model.x
)的变量model.x = 1
,我们是否需要warmstart=True
作为Pyomo {{1}调用的参数方法,以保持优化的初始值?
请记住,不应强制初始化变量采用指定值,它只为变量提供初始起始值,然后解算器将根据需要更改它。
答案 0 :(得分:1)
目前,它取决于求解器接口。
如果您通过NL文件界面使用求解器(例如,AMPL求解器),则始终将初始变量值提供给求解器(如果它们不是None
),并且它取决于求解器是否尝试将这些值用作热启动(例如,对于MIP)或初始迭代(例如,对于使用需要起点的优化方法的求解器)。对于需要起点的求解器,解算器也可以使用哪个值将用于任何未提供起点的变量。通常使用零,但这可能因解算器而异。
对于主要对应于MIP求解器的所有其他Pyomo求解器接口(例如,LP,MPS,Python),我认为默认行为是不提供热启动。当你调用solve来将初始值传递给求解器时,你必须指定warmstart=True
。
我没有发现这种一致性,主要是因为在通过NL文件接口时,solve方法甚至不接受warmstart
关键字,因此在编写一些常规时必须有一个if语句适用于多个接口的代码。
我想我会保留对GitHub问题的进一步讨论。