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

Python Gekko轨迹重规划代码报错KeyError: 'v2',如何解决?

Gekko轨迹重规划代码KeyError问题解决

错误原因

你在同一个Gekko模型实例m的循环内反复创建新的CV变量v并多次调用solve(),导致模型内积累了多个自动命名的变量(如v1、v2等),Gekko后续求解时无法正确识别这些动态生成的变量,引发KeyError: 'v2'。

解决方法

方法1:每次循环创建新模型实例

将Gekko模型初始化放到循环内部,确保每次求解都是独立的全新模型,避免变量积累:

from gekko import GEKKO

point = [40,20,10,35]
traject= [1,30,60,100]
# 预先定义模型参数
mass = 10
b = 0.5
K = 2.0

for i in range(len(point)):
    m = GEKKO()  # 每次循环新建模型
    # 定义操纵变量(根据实际需求调整)
    p = m.MV(value=0)
    p.STATUS = 1
    
    # 被控变量配置
    v = m.CV(value=0)
    v.STATUS = 1
    v.TAU = 5
    m.options.CV_TYPE = 2
    m.options.IMODE = 6
        
    v.SP = point[i]
    v.TR_INIT = traject[i]
        
    # 过程模型方程
    m.Equation(mass*v.dt() == -v*b + K*b*p)
    m.solve(disp=False)

方法2:复用模型但每次求解后清空状态

如果需要复用同一个模型框架,每次求解后调用m.clear()清空所有变量、方程和配置,再重新定义:

from gekko import GEKKO

m = GEKKO()
point = [40,20,10,35]
traject= [1,30,60,100]
mass = 10
b = 0.5
K = 2.0

for i in range(len(point)):
    m.clear()  # 清空模型状态
    p = m.MV(value=0)
    p.STATUS = 1
    
    v = m.CV(value=0)
    v.STATUS = 1
    v.TAU = 5
    m.options.CV_TYPE = 2
    m.options.IMODE = 6
        
    v.SP = point[i]
    v.TR_INIT = traject[i]
        
    m.Equation(mass*v.dt() == -v*b + K*b*p)
    m.solve(disp=False)

方法3:一次性定义完整轨迹(更符合MPC逻辑)

将多个轨迹点整合为一条完整的设定点轨迹,单次完成MPC求解,这是更规范的MPC应用方式:

from gekko import GEKKO
import numpy as np

m = GEKKO()
m.time = np.linspace(0, 100, 101)  # 覆盖所有轨迹时间点

point = [40,20,10,35]
traject= [1,30,60,100]
# 生成完整设定点轨迹
sp = np.zeros(len(m.time))
for i in range(len(point)):
    # 找到对应时间点的索引
    idx = np.argmin(np.abs(m.time - traject[i]))
    sp[idx:] = point[i]

# 参数与变量定义
mass = 10
b = 0.5
K = 2.0
p = m.MV(value=0)
p.STATUS = 1

v = m.CV(value=0)
v.STATUS = 1
v.TAU = 5
m.options.CV_TYPE = 2
m.options.IMODE = 6

v.SP = sp  # 传入完整轨迹
v.TR_INIT = 0

# 过程模型
m.Equation(mass*v.dt() == -v*b + K*b*p)

m.solve(disp=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:14:35