You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gekko中设置超10000次最大迭代及提取迭代终止最优解方法

MINLP迭代上限调整与中途最优解提取方案

针对二元变量规模最高900(30*30)、无求解时间限制、需避免迭代上限提前截断的MINLP求解场景,操作方案如下:

一、将max_iterations设置为10000以上的方法

MINLP求解不存在10000次迭代的硬上限,提前触发终止通常是因为只配置了单一层级的迭代阈值,没有同步覆盖外层分支定界、内层NLP子问题的双重迭代限制:

  • 若使用GEKKO框架搭配APOPT求解器(MINLP场景下二元变量求解效率最优),直接在求解器选项中同步配置三层迭代阈值即可,可按需设置为任意大于10000的数值,示例代码如下:
from gekko import GEKKO
m = GEKKO()
# 指定APOPT为MINLP求解器
m.options.SOLVER = 1
# 同步设置三层迭代上限,避免被默认阈值(通常为1000-2000次)提前终止
m.solver_options = [
    'minlp_maximum_iterations 50000',  # 外层MINLP分支定界迭代上限,可按需调整为10000以上任意值
    'minlp_iteration_limit 50000',     # MINLP内层节点迭代上限
    'max_iter 50000'                   # 每个NLP子问题的求解迭代上限
]
# 模型构建逻辑省略
m.solve()
  • 若使用BARON、Couenne等其他MINLP求解器,对应参数分别为mipiterlim、max_iter,直接传入目标阈值即可,不存在10000次的数值硬限制。

二、达到迭代上限终止时提取已搜索最优解

求解器触发迭代上限终止时,默认不会返回求解成功状态码,但可以通过提前配置参数直接拿到终止时刻已搜索到的最优可行解(incumbent解):

  • 提前在求解器选项中追加incumbent解返回开关,求解触发终止时会自动将当前最优解写入所有模型变量的.value属性,和正常求解完成后的读取逻辑完全一致:
# 追加到solver_options列表即可
m.solver_options.append('minlp_return_incumbent_on_termination 1')
  • 若未提前配置上述开关,可直接进入求解器生成的临时工作目录,找到APOPT求解器生成的apopt_solution.txt日志文件,定位到最后一条标记为incumbent_objective的记录,对应的就是终止时刻已找到的最优可行解的目标值与变量取值,该日志不会因为求解异常终止被覆盖或清空。

无求解时间约束的场景下,可额外追加三个配置进一步提升解的最优性:minlp_gap_tol 1e-6(将最优性Gap收敛阈值调至极小值)、minlp_branch_method 3(选用精度最高的分支策略)、minlp_integer_tol 1e-6(缩紧二元变量的整数判定阈值),不会触发额外的提前终止逻辑。

内容的提问来源于stack exchange,提问作者Vinay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:15:51