CPLEX говорит, что сумма квадратов не является выпуклой - PullRequest
0 голосов
/ 16 июня 2019

Я хочу решить задачу максимизации с целью

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 определенно выпуклая (гессиан - это единичная матрица),Что я делаю не так?

1 Ответ

2 голосов
/ 16 июня 2019

Обратите внимание, что при указании цели

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

Вы указали, что это проблема максимизации.

Чтобы сделать эту задачу выпуклой оптимизацией, вы должны вместо этого решить задачу минимизации.

Минимизация выпуклой функции - это задача выпуклой оптимизации, максимизация выпуклой функции в общем случае не является проблемой выпуклой оптимизации.

...