Как решить gurobipy.GurobiError: Objective Q не PSD? (на простых примерах)

Я пытаюсь решить некоторые задачи квадратичного линейного программирования, используя gurobi и python, но с ошибкой типа

gurobipy.GurobiError: Objective Q не PSD (требуется корректировка по диагонали 1.0e+00)

У меня проблема с этой ошибкой.

Итак, я попробовал простой пример, например..

Минимизировать x1 * x2

При условии

x1 ‹= 30 и x1 >= 20

х2 ‹= 30 и х2 >= 20

и

Максимум x1 * x2

При условии

x1 ‹= 30 и x1 >= 20

х2 ‹= 30 и х2 >= 20

Гуроби может решить первое, но не второе.


    from gurobipy import *

    m = Model()

    #variables
    x1 = m.addVar(vtype=GRB.CONTINUOUS, lb=20, ub=30, name="x1")
    x2 = m.addVar(vtype=GRB.CONTINUOUS, lb=20, ub=30, name="x2")

    m.update()

    m.setObjective(x1 * x2, GRB.MINIMIZE)  # or GRB.MAXIMIZE

    m.update()

    m.optimize()

Я изменил MINIMIZE на MAXIMIZE, надеясь получить оптимальную цель 900, но гуроби не может справиться с этой проблемой. Вот мой результат.

Свернуть случай

Optimize a model with 0 rows, 2 columns and 0 nonzeros
Model has 1 quadratic objective term
Coefficient statistics:
  Matrix range     [0e+00, 0e+00]
  Objective range  [0e+00, 0e+00]
  QObjective range [2e+00, 2e+00]
  Bounds range     [2e+01, 3e+01]
  RHS range        [0e+00, 0e+00]
Presolve removed 0 rows and 2 columns
Presolve time: 0.00s
Presolve: All rows and columns removed
Barrier solved model in 0 iterations and 0.00 seconds
Optimal objective 4.00000000e+02

МАКСИМИЗИРОВАТЬ дело

Optimize a model with 0 rows, 2 columns and 0 nonzeros
Model has 1 quadratic objective term
Coefficient statistics:
  Matrix range     [0e+00, 0e+00]
  Objective range  [0e+00, 0e+00]
  QObjective range [2e+00, 2e+00]
  Bounds range     [2e+01, 3e+01]
  RHS range        [0e+00, 0e+00]
Traceback (most recent call last):
  File "C:\Users\encl1\.conda\envs\kicarus\lib\site-                packages\IPython\core\interactiveshell.py", line 3296, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-98-df9d183baafd>", line 16, in <module>
    m.optimize()
  File "model.pxi", line 727, in gurobipy.Model.optimize     (../../src/python/gurobipy.c:57790)
gurobipy.GurobiError: Objective Q not PSD (diagonal adjustment of 1.0e+00     would be required)

Пожалуйста, объясните, почему MAXIMIZE не работает, хотя MINIMIZE работает.


person Kicarus    schedule 25.07.2019    source источник
comment