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)
您已将其指定为最大化问题。
要使其成为凸优化问题,您应该改为求解最小化问题。
最小化凸函数是凸优化问题,最大化凸函数一般不是凸优化问题。
我想用 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)
您已将其指定为最大化问题。
要使其成为凸优化问题,您应该改为求解最小化问题。
最小化凸函数是凸优化问题,最大化凸函数一般不是凸优化问题。