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