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

如何确保GEKKO积分针对正确变量?附代码示例

GEKKO积分问题解决方案

核心问题修正说明

当前代码的关键问题是z1被定义为单个m.Var,并非随时间维度变化的变量,而GEKKO的m.integral()默认对m.time维度积分,需将z1设为时间相关变量;同时实际场景中x是周期数组,要正确定义为时间维度的变量数组。

修正后的代码示例

import numpy as np
from gekko import GEKKO

m = GEKKO()
T = 100
m.time = np.linspace(0.7, 1.7, T)

# z1定义为随时间变化的变量数组,每个时间步独立取值
z1 = m.Array(m.Var, T, lb=0.7)
# x定义为T周期的变量数组,每个时间步可由求解器调整
x = m.Array(m.Var, T, lb=1)

# 构造每个时间步的被积表达式,再传入integral完成时间维度积分
integrand = [(z1[i] * 4.67 + x[i]**0.27)**11.03 / (x[i]**3) for i in range(T)]
Z = m.Intermediate(m.integral(integrand))

m.Obj(Z)

m.options.IMODE = 6  # 动态优化模式适配离散时间场景
m.solve(disp=True)

关键实现要点

  • 时间变量定义:用m.Array(m.Var, T)创建与m.time长度匹配的变量数组,确保每个时间步的z1和x都能被求解器独立优化。
  • 积分逻辑:GEKKO的m.integral()会自动根据m.time的步长对输入的时间序列表达式完成数值积分,无需手动计算步长权重。
  • 模式适配:保持IMODE=6(动态优化模式),契合离散时间优化的需求,求解器会同步优化全周期的变量值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:45:58