如果我们初始化一个变量模型。在求解模型之前,我们是否需要将
warmstart=True
作为Pyomo的solve()
方法调用的参数(即model.x=1
),以保持优化的初始值?
请记住,初始化的变量不应该强制使用指定的值,它只是为变量提供了一个初始起始值,然后求解器将在需要时更改它。
目前,它取决于解算器界面。
如果您通过NL文件界面(例如,AMPL解算器)使用解算器,则初始变量值始终提供给解算器(如果它们不是None
),由解算器决定是否尝试使用这些值作为预热开始(例如,对于MIP)或初始迭代(例如,对于使用需要起点的优化方法的解算器)。对于需要起点的解算器,还取决于解算器对未提供起点的任何变量使用什么值。通常使用乘以零,但这可能因解算器而异。
对于主要对应于MIP解算器的所有其他Pyomo解算器接口(例如,LP、MPS、Python),我认为默认行为是不提供warmstart。调用solve时,必须指定warmstart=True
,以便将初始值传递给解算器。
我不认为这是一致的,主要是因为当通过NL-文件接口时,解决方法甚至不接受温暖启动
关键字,所以在编写一些适用于多个接口的通用代码时,您必须有一个if-语句。
我想我将把进一步的讨论留给GitHub问题。