我想用目标解决最大化问题
f(x,y,z)= 0.5 *(x ^ 2 + y ^ 2 + z ^ 2)
在[0,1]中带有x,y,z。
但是,当使用下面的代码将此问题提交给CPLEX时,它会提示错误,指出我的目标是非凸的。
我还应该说我检查了.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是单位矩阵)。 我在做什么错了?
答案 0 :(得分:2)
请注意,当您指定目标
p.objective.set_sense(p.objective.sense.maximize)
您已将其指定为最大化问题。
要使其成为凸优化问题,您应该解决一个最小化问题。
最小化凸函数是一个凸优化问题,最大化一个凸函数通常不是凸优化问题。