【问题标题】:CPLEX says a sum of squares is not convexCPLEX 说平方和不是凸的
【发布时间】:2019-06-16 13:19:59
【问题描述】:

我想用目标解决最大化问题

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

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

但是,当使用下面的代码将此问题提供给 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 是单位矩阵)。 我做错了什么?

【问题讨论】:

    标签: cplex quadratic-programming convex


    【解决方案1】:

    注意,当你指定目标时

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

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

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

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

    【讨论】:

    • 那么有没有办法解决这个问题呢?最小化 -f 也是不允许的,因为 -f 不是凸的......
    • 也许使用非凸优化器?对于您的特定问题,我们希望解决方案尽可能远离原点,因此答案是 (1,1,1)。
    • 另一种方式是让X=x^2,Y=y^2,Z=z^2,问题相当于最大化0.5(X+Y+Z)服从0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2013-07-17
    • 2020-11-18
    • 1970-01-01
    • 2021-01-22
    • 2018-12-30
    相关资源
    最近更新 更多