Я могу решить следующую проблему минимизации с помощью scipy linprog с матрицей A_ub:
A_ub = [[ 1 10 0 3]
[ 6 2 3 6]
[ 3 5 4 2]
[ 4 9 2 2]]
и
b_ub = [1,1,1,1]
и проблема минимизации c = [-1,-1,-1,-1]
(т.е. отрицательная норма 1).
Вызов linprog от scipy дает следующий результат (как и ожидалось):
scipy.optimize.linprog(c, A_ub=A_ub, b_ub=b_ub)
con: array([], dtype=float64)
fun: -0.2777777777777778
message: 'Optimization terminated successfully.'
nit: 7
slack: array([0.83333333, 0. , 0. , 0.44444444])
status: 0
success: True
x: array([0. , 0. , 0.22222222, 0.05555556])
Однако мне также нужно найти решение для дуальной задачи.
Из моего понимания теоремы о минимаксе вышеупомянутая проблема эквивалентна:
scipy.optimize.linprog(-b_ub, A_ub=A_ub.T, b_ub=c)
Однако выполнение такой команды приведет к ошибкам:
con: array([], dtype=float64)
fun: 0.0
message: "Phase 1 of the simplex method failed to find a feasible solution. The pseudo-objective function evaluates to 4.0e+00 which exceeds the required tolerance of 1e-12 for a solution to be considered 'close enough' to zero to be a basic solution. Consider increasing the tolerance to be greater than 4.0e+00. If this tolerance is unacceptably large the problem may be infeasible."
nit: 0
slack: array([-1., -1., -1., -1.])
status: 2
success: False
x: array([0., 0., 0., 0.])
Если я увеличу допуск до большого значения (10), то оно завершится решением, но я не думаю, что это правильно, так как значение функции не совпадает с основным значением.
Я действительно ценю любую помощь и подсказку относительно этой проблемы и как найти решение для дуала.
лучше,
Хьеу.