У меня есть объективная функция с несколькими сотнями квадратичных терминов, которые я хотел бы свести к минимуму; в этом случае я пытаюсь свести к минимуму абсолютное расстояние между несколькими переменными. Таким образом, структура моей проблемы выглядит следующим образом (весьма упрощенный):Как получить доступ к решению для решения dual simx?
Minimize
obj: [ a^2 - 2 a * b + b^2 ]/2
Subject To
c1: a + b >= 10
c2: a <= 100
End
Я использую Python API, чтобы решить проблему следующим образом:
import cplex
cpx = cplex.Cplex()
cpx.read('quadratic_obj_so.lp')
# use the dual simplex
cpx.parameters.lpmethod.set(cpx.parameters.lpmethod.values.dual)
cpx.solve()
print cpx.solution.get_values()[0:15]
print cpx.solution.status[cpx.solution.get_status()]
print cpx.solution.get_objective_value()
И для приведенного выше примера я тогда получить (показывать только итерации 16-18):
Itn Primal Obj Dual Obj Prim Inf Upper Inf Dual Inf
16 1.4492800e-19 -1.0579911e-07 3.81e-14 7.11e-15 5.17e-25
17 9.0580247e-21 -2.6449779e-08 1.91e-14 3.55e-15 2.33e-25
18 5.6612645e-22 -6.6124446e-09 5.45e-14 7.11e-15 6.46e-27
[73.11695794600045, 73.11695794603409]
optimal
0.0
так a
и b
равны, который имеет смысл, так как я стараюсь, чтобы минимизировать их расстояние и сдерживает является CLE исполнилось.
Однако моя актуальная проблема является гораздо более сложным, и я получаю:
Itn Primal Obj Dual Obj Prim Inf Upper Inf Dual Inf
92 1.4468496e+06 1.2138985e+06 1.80e+02 2.64e-12 5.17e-02
93 1.4468523e+06 1.2138969e+06 2.23e+02 2.17e-12 1.08e-02
94 1.4468541e+06 1.2138945e+06 2.93e+02 2.31e-12 5.62e-02
* 1.4457132e+06 1.2138598e+06 7.75e+00 7.61e-09 2.76e-02
num_best
1445714.46525
У меня сейчас несколько вопросов относительно выхода, которые тесно связаны:
1) Очевидно, что это не цель значение для двойного симплекса. Почему это, поскольку я установил решателя как двойной симплекс ?!
2) Как мне получить доступ к результатам для двойного симплекса? Поскольку объективное значение меньше, я был бы более заинтересован в этих результатах.
3) Означает ли статус num_best
, что все ограничения выполнены, то есть решение является действительным, но не гарантировано оптимальным?
4) Primal Obj
и Dual Obj
отличаются довольно много. Есть ли какая-либо стратегия, чтобы свести к минимуму их разницу?
Я не думаю, что этот журнал из двойного симплекса, а скорее из метода барьера. Также обратите внимание, что решение QP обычно не выполняется с помощью метода Simplex LP. –
@ErwinKalvelagen: спасибо за ваш комментарий! Что бы вы рекомендовали вместо этого? – Cleb
Сначала я бы рассмотрел возможные варианты переформулировки. Постарайтесь максимально логично вывести логику из объектива в линейные ограничения (например, (x + y)^2 можно записать в виде z^2 с z = x + y). Также посмотрите на масштабирование. Попробуйте параметр Cplex 'numericalEmphasis'. –