Найти тему
Властелин машин

Линейное программирование со SciPy

Многие экономические задачи сводятся к моделям линейного программирования, инструментарий для решения которых уже имеется, например, для языка Python реализован в библиотеке SciPy. Общий вид задач линейного программирования следующий:

-2

Допустим, перед нами стоит следующая задача:

“На площади 100 га высаживаются три культуры: пшеница, кукуруза и бобы. Выращивание пшеницы позволяет получать прибыль (в расчете на 1 га) в размере 90 тыс. ден.ед., кукурузы – 100 тыс. ден.ед., бобов – 200 тыс. ден.ед. Затраты трудовых и материальных ресурсов приведены в таблице. Определить оптимальное сочетание посевов этих культур, чтобы получить максимальную прибыль”.

-3
-4

Здесь через три переменные (v1,v2,v3) заданы искомые площади пшеницы, кукурузы и бобов. Ниже привожу код на Python для решения задачи:

from scipy.optimize import linprog

if __name__ ==
'__main__':


# коэффициенты выручки для каждой культуры
prs_coef = [90,100,200]
# коэффициенты трудовых затрат
hum_res_coefs = [100,80,120]
# ограничение на трудовые затраты
hum_res_lim = 2000
# коэффициенты материальных затрат
mat_res_coefs = [50,30,60]
# ограничение на материальные затраты
mat_res_lim = 3000
# коэффициенты при объемах культур и ограничение на объем земель
vols_coefs = [1,1,1]
vol_lim = 100

# linprog минимизирует целевую функцию,
# поэтому для ее максимизации
# нужно умножить на (-1)
c = [it*(-1) for it in prs_coef]
# в A_ub и b_ub задаются неравенства
# в виде коэффициентов для каждого в строках A_ub
# и соответствующих им ограничивающих значений в строках b_ub
A_ub = [hum_res_coefs,
mat_res_coefs,
vols_coefs]
b_ub = [hum_res_lim,mat_res_lim,vol_lim]

print(linprog(c, A_ub, b_ub))