Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Из любопытства сделал ту же задачу на mip с целочисленными (бинарными) constraints для условия закрытия магазинов. Параметры (расходы на магазин и выручку) изменил для меньшей тривиальности решения:
https://gist.github.com/xpl/f93af7ea2d2bd08fad2c45535433327d
Задание ограничений в mip сделано удобнее чем в scipy — через перегрузку операторов, так что не нужно мучаться с кодированием их в виде матриц:
for s in range (N_shops):
m += xsum (supplies_s[s]) <= float (max_demand[s]) * is_open[s]
for f in range (N_facts):
m += xsum (supplies_f[f]) == float (max_supply[f])
m.objective = (xsum (supplies[i] * c[i] for i in range (len (supplies))) -
xsum (is_open[i] * shop_rent_cost for i in range (N_shops)))
Линейное программирование в python силами библиотеки scipy