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

GEKKO求解含极小系数正则项优化问题返回非最优解如何解决

GEKKO求解带微小平滑正则项的二次优化结果异常解决方案

问题描述

需要使用GEKKO求解如下优化问题:

Minimize x'Qx + 1e-10 * sum_{i=1}^n x_i^0.1
subject to 1' x = 1 and x >= 0

初始实现代码运行后返回解为 sol = [0., 0., 0. ,0. ,1.],对应目标函数值为 Objective: 1.99419,和理论最优值偏差极大。
初始实现代码如下:

import numpy as np
from gekko import GEKKO
n = 5
m = GEKKO(remote=False)
m.options.SOLVER = 1
m.options.IMODE = 3

x = [m.Var(lb=0, ub=1) for _ in range(n)]

m.Equation(m.sum(x) == 1)
np.random.seed(0)
Q = np.random.uniform(-1, 1, size=(n, n))
Q = np.dot(Q.T, Q)

## Add h_i^p
c, p = 1e-10, 0.1
for i in range(n):
    m.Obj(c * x[i] ** p)
    for j in range(n):
        m.Obj(x[i] * Q[i, j] * x[j])

m.solve(disp=True)
sol = np.array(x).flatten()

单独对二次项x'Qx做优化得到的解代入原目标函数,仅能得到Objective: 0.02489503,远优于顶点解的目标值。由于正则项系数仅为1e-10,本身对结果的影响可以忽略,不应该导致结果出现量级级别的偏差。
单独优化二次项的参考代码如下:

m1 = GEKKO(remote=False)
m1.options.SOLVER = 1
m1.options.OTOL = 1e-10
x1 = [m1.Var(lb=0, ub=1) for _ in range(n)]
m1.Equation(m1.sum(x1) == 1)
m1.qobj(b=np.zeros(n), A=2 * Q, x=x1, otype='min')
m1.solve(disp=True)
sol = np.array(x1).flatten()

问题根因

  • 核心问题是
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:15:31