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()
问题根因
- 核心问题是
相关产品推荐
相关产品推荐

