Линейное программирование со 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))
Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: