python
December 21, 2021

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

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

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

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

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

from scipy.optimize import linprog
# коэффициенты выручки для каждой культуры
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))

Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях:

Instagram

Яндекс Дзен