Симплекс с использованием Python: Как настроить код

#python #numpy #optimization #scipy #linear-programming

#python #numpy #оптимизация #scipy #линейное программирование

Вопрос:

Ограничения:

5×1 6×2 >= 95

18×1 — 9×2 >= 189

x1 x2 <= 45

x1, x2 >= 0

Максимизировать:

z = 15×1 15×2

Код:

 import numpy as np
import scipy as sp


c = [-15,-15]
A = [[-5,-6], [-18,9],[1,1]]
b = [-95,-189,45]
x0_bounds = (0,None)
x1_bounds = (0,None)


from scipy.optimize import linprog
# Solve the problem by Simplex method in Optimization
res = linprog(c, A_ub=A, b_ub=b,  bounds=(x0_bounds, x1_bounds), method='simplex', options={"disp": True})
print(res)
  

Это возвращает:

Максимум 675 случаев при x1 = 22, x2 = 23

Однако ответ — max = 675, встречающийся при (x1, x2) = (22,23) amp; (45,0)

Таким образом, он не возвращает второе значение для x1 и x2

Комментарии:

1. Все точки на x1 x2 = 45 между (22,23) и (45,0) имеют одинаковый минимальный размер. Целевая функция имеет тот же наклон 1: 1, что и это ограничение.

2. Решатели LP сообщают только об одной точке.