Путаница в отношении выходных данных model.optimize () и model.feasRelaxS (1, True, False, True) - PullRequest
0 голосов
/ 11 октября 2018

Я смоделировал проблему MILP.

При выполнении кода

m.Optimize()

Вывод выглядит так:

Optimize a model with 798001 rows, 312006 columns and 2117780 nonzeros
Variable types: 1920 continuous, 310086 integer (310080 binary)
Coefficient statistics:
 Matrix range [3e-01, 2e+04]
 Objective range [1e-01, 9e+02]
 Bounds range [1e+00, 3e+04]
 RHS range [3e-01, 3e+04]
Presolve removed 725090 rows and 191031 columns
Presolve time: 3.22s

Explored 0 nodes (0 simplex iterations) in 3.59 seconds
Thread count was 1 (of 8 available processors)

Solution count 0

Model is infeasible
Best objective -, best bound -, gap -

Но при выполнении ниже код:

copy1 = m.copy()

if m.status == GRB.INFEASIBLE:
 copy1.feasRelaxS(1, True, False, True)
 copy1.optimize()

Вывод выглядит так:

Solve phase I feasrelax model to determine minimal relaxation

Optimize a model with 798001 rows, 1114022 columns and 2919796 nonzeros
Model has 802016 quadratic objective terms
Variable types: 803936 continuous, 310086 integer (310080 binary)
Coefficient statistics:
  Matrix range     [3e-01, 2e+04]
  Objective range  [0e+00, 0e+00]
  QObjective range [2e+00, 2e+00]
  Bounds range     [1e+00, 3e+04]
  RHS range        [3e-01, 3e+04]
Found heuristic solution: objective 3.175944e+24
Presolve removed 1620 rows and 64056 columns (presolve time = 6s) ...
Presolve removed 1620 rows and 64056 columns
Presolve time: 5.59s
Presolved: 796381 rows, 1049966 columns, 2909656 nonzeros
Presolved model has 800396 quadratic objective terms
Found heuristic solution: objective 3.169464e+24
Variable types: 802316 continuous, 247650 integer (247650 binary)

Здесь указано, что модель имеет квадратичную цельтермины.

Кто-нибудь может подсказать мне, в чем именно разница между этими двумя?и почему она дает модели квадратичные термины?

1 Ответ

0 голосов
/ 13 октября 2018

Вы звоните feasRelaxS с аргументами (1, True, False, True) документах говорят:

feasRelaxS (relaxobjtype, minrelax, vrelax, crelax)

Если вы укажете relaxobjtype = 1, цель расслабления выполнимости состоит в том, чтобыминимизируйте сумму квадратов нарушений границ и ограничений.

Таким образом, сумма квадратов не является линейной, и Гуроби должен использовать некоторый нелинейный подход к решению.Если QP или SOCP или что-то еще, это решение Гуроби.

Здесь вводятся эти квадратичные термины: сумма квадратов нарушений ограничения и ограничения .

вывод:

Found heuristic solution: objective 3.169464e+24

также похоже, что ваша модель довольно далека от осуществимости, я бы сказал.

Редактировать: Или, возможно, нет.Как пользователь не Gurobi, я был под впечатлением, что это конечный результат.Но вы урезали свой вывод, и это всего лишь ранний эвристический результат, и мы не можем много сказать о неизвестном конечном результате на данный момент!

Общий вопрос о что он делает :в ответ на предложение документа:

Ослабление осуществимости представляет собой модель, которая при решении минимизирует величину, на которую решение нарушает границы и линейные ограничения исходной модели

Значение: вы больше не заботитесь о своей первоначальной цели, но о новой, которая выражает, насколько плохо какое-либо решение с точки зрения нарушения ограничений и переменных границ.

(Примечание: все это объясняется в документации и, честно говоря: Gurobi имеет очень хорошую документацию по сравнению с некоторыми конкурентами, на мой взгляд! Так что используйте ее и не вызывайте функции, не зная, что они делают)

...