CPLEX 说平方和不是凸的

CPLEX says a sum of squares is not convex

我想用 objective

解决一个最大化问题

f(x, y, z) = 0.5 * (x^2 + y^2 + z^2)

x、y、z 在 [0, 1] 中。

然而,当使用下面的代码将此问题反馈给 CPLEX 时,它会提示错误,指出我的 objective 是非凸的。

另外我应该说我检查了 .lp 文件以确保我已经正确地陈述了问题。

import cplex


p = cplex.Cplex()
p.objective.set_sense(p.objective.sense.maximize)

p.variables.add(ub=[1, 1, 1],
                names=["x", "y", "z"])


qmat = [[[0], [1.]],
        [[1], [1.]],
        [[2], [1.]]]
p.objective.set_quadratic(qmat)

p.write("qpex.lp")

p.solve()

我不明白为什么我的函数 f 肯定是凸的(Hessian 是单位矩阵)。 我做错了什么?

请注意,当您指定 objective

p.objective.set_sense(p.objective.sense.maximize)

您已将其指定为最大化问题。

要使其成为凸优化问题,您应该改为求解最小化问题。

最小化凸函数是凸优化问题,最大化凸函数一般不是凸优化问题。