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

如何在GEKKO中实现分段函数alpha_beta用于非线性优化求解?

GEKKO实现分段二次函数的方案

核心说明

numpy的np.piecewise仅支持数值运算,无法处理GEKKO的符号决策变量,需要用GEKKO内置的条件函数m.if3实现分段逻辑,该函数支持自动微分,完全兼容优化求解流程。

实现代码

def alpha_beta_gekko(m, x):
    a = 0.0019727939
    b = 0.0078887
    Lmin, Lnom, Lmax = 0.8035, 2.3811, 3.084
    # 区间外返回0,区间内返回1
    in_range = m.if3(x - Lmin, 0, m.if3(x - Lmax, 1, 0))
    # 区间内分段计算二次函数值
    range_val = m.if3(x - Lnom, 
                      a * (x - Lnom)**2 + 0.006226,
                      b * (x - Lnom)**2 + 0.006226)
    return in_range * range_val

调用方式

目标函数中直接替换原alpha_beta调用即可,示例:

m.Minimize(k*(w1*abs(x0-L10)+w2*abs(x1-L20))+β*Dindf[0]*(w1*alpha_beta_gekko(m,x0)+w2*alpha_beta_gekko(m,x1)+w1*alpha_beta_gekko(m,x2)+w2*alpha_beta_gekko(m,x3)) +\
                k*(w1*abs(x2-x0) + w2*abs(x3-x1)+w1*abs(x4-x2) + w2*abs(x5-x3)))

注意事项

  • 建议给对应决策变量设置边界约束,比如x.LOWER = Lmin、x.UPPER = Lmax,缩小求解搜索空间,提升收敛效率
  • 若你的求解场景对整数变量敏感,也可以预先在[Lmin, Lmax]区间内采样足够多的点,用GEKKO的m.pwl()方法拟合该分段函数,完全规避二进制变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:01