Я думаю, что столкнулся с проблемой Милпа, но я не уверен.
Проблема в упрощенной форме:Есть 3 поставщика материалов (грузовых автомобилей) для 3 городов.Настоящая проблема - 30 поставщиков и 100 городов ...Емкость поставщиков: а: 1;Би 2;C: 3.Города Спрос: а: 2;б: 3;C: 1Расстояния Поставщик (Города):
- a (a: 2; b: 4; c: 6)
- b (a: 4; b: 2; c: 4)
- с (а: 6; б: 4; с: 2)
вот так с каждым Capacity и Demand
Sa1 - Ca2Sb2 - Cb3Sc3 - Cc1Цель состоит в том, чтобы оптимизировать снабжение, но есть одно (дьявольское) условие:
- Всего один поставщик на город.
Без условия проблема является простой проблемой, которую нужно решитьс базовым линейным программированием.С условием я думаю, что это может быть решено с помощью смешанного целочисленного линейного программирования - MILP.Но не поймите, как решить эту проблему с помощью метода MILP и Pulp (модуль python).
Если кто-то может мне помочьСпасибо!
Моя первая попытка
from scipy.optimize import linprog
c = [2,4,6,4,2,4,6,4,2]
Ae = [[1,1,1,0,0,0,0,0,0],
[0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,0,1,1,1],
[1,0,0,1,0,0,1,0,0],
[0,1,0,0,1,0,0,1,0],
[0,0,1,0,0,1,0,0,1],
]
be = [1,2,3,2,3,1]
x0_bounds = (0,None)
x1_bounds = (0,None)
x2_bounds = (0,None)
x3_bounds = (0,None)
x4_bounds = (0,None)
x5_bounds = (0,None)
x6_bounds = (0,None)
x7_bounds = (0,None)
x8_bounds = (0,None)
sol = linprog(c, A_eq= Ae, b_eq = be, bounds = ((x0_bounds,x1_bounds,x2_bounds,x3_bounds,x4_bounds,x5_bounds,x6_bounds,x7_bounds,x8_bounds)) )
print(sol)
fun: 18.0
message: 'Optimization terminated successfully.'
nit: 10
slack: array([], dtype=float64)
status: 0
success: True
x: array([1., 0., 0., 0., 2., 0., 1., 1., 1.])
Process finished with exit code 0