使用Gekko循环求解参数估计时出现KeyError: 'v5'报错如何解决
Gekko循环求解KeyError: 'v5'报错解决方案
报错信息
Traceback (most recent call last): File "C:/Users/Geebug/Documents/ParameterEstimationGekko_v6.py", line 104, in <module> m.solve() File "C:\Users\Geebug\AppData\Local\Programs\Python\Python39\lib\site-packages\gekko\gekko.py", line 2227, in solve self.load_JSON() File "C:\Users\Geebug\AppData\Local\Programs\Python\Python39\lib\site-packages\gekko\gk_post_solve.py", line 70, in load_JSON vp.__dict__[o] = data[vp.name][o] KeyError: 'v5'
引发原因
- 循环求解时复用同一个Gekko模型实例,迭代过程中修改了模型结构(新增/删除变量、约束),模型内部缓存的旧变量记录和本次求解返回的结果结构不匹配,结果中不存在旧的v5变量对应的返回字段,触发键值缺失。
- 某次迭代求解未正常收敛,返回的结果JSON结构不完整,缺失了对应变量的输出项。
- 1.0.4及更早版本的Gekko存在循环求解时变量缓存清理不完全的已知bug,容易触发该类错误。
解决方案
- 每次迭代重新初始化Gekko模型实例:将模型构建、变量定义、约束和目标函数设置的逻辑封装为独立函数,每次迭代调用函数生成全新的模型实例再求解,彻底避免旧变量残留问题。
- 若不想每次重新构建完整模型,可在每次迭代求解前执行
m.clear()清理模型内部缓存,再重新定义变量、约束和目标函数。 - 若需复用同一模型实例,迭代过程中不修改模型结构,仅更新参数取值:提前定义所有变量、约束,每次迭代仅修改
Param类参数或者固定变量的VALUE属性,保持模型结构不变。 - 升级Gekko到最新版本,执行
pip install gekko --upgrade即可完成更新,修复版本已知缓存问题。 - 增加求解状态校验:求解后先判断
m.options.SOLVESTATUS的返回值,求解成功(值为1)再读取结果,避免异常结果加载引发报错。
内容的提问来源于stack exchange,提问作者Gerald .Ogumerem
相关产品推荐
相关产品推荐

