Линейное программирование на практике
Линейное программирование является эффективным способом решения разнородных экономических проблем (детальнее читай здесь). В данной статье разберем и приведем код решения еще одной задачи:
“Найти оптимальное сочетание посевов пшеницы и кукурузы на участках различного плодородия площадью 100 и 200 га. Данные об урожайности приведены в таблице:
Условия: должно быть собрано не менее 1500 ц. пшеницы и 4500 ц. кукурузы, цена одного ц. пшеницы - 6 руб., кукурузы - 4 руб. Наша задача - максимизация выручки продукции в денежном выражении”.
Как вы помните, общий вид модели линейного программирования следующий:
Как и раньше, воспользуемся функцией linprog библиотеки SciPy (модуль scipy.optimize). Ей необходимо задать коэффициенты при неизвестных значениях (xij) целевой функции, которую надо минимизировать, а также коэффициенты и ограничивающие значения при всех неравенствах (вида <=) и равенствах (конечно, если они есть). С учетом этих условий нам потребуется преобразовать задачу нахождения максимума в задачу минимизации (для этого достаточно умножить функцию на “-1”), а также преобразовать неравенства к единому виду. В результате сделаны следующие изменения:
Привожу итоговый код для получения результата:
from scipy.optimize import linprog
s1 = 100
s2 = 200
h1_1 = 20
h1_2 = 15
c11 = h1_1*c1
c12 = h1_2*c1
c21 = h2_1*c2
c22 = h2_2*c2
c = [-c11,-c12,-c21,-c22]
# в A_ub и b_ub задаются неравенства
# в виде коэффициентов для каждого в строках A_ub
# и соответствующих им ограничивающих значений в строках b_ub
A_ub = [[-h1_1,-h1_2,0,0],
[0,0,-h2_1,-h2_2],
[1,0,1,0], [0,1,0,1]]
b_ub = [-1500,-4500,100,200]
Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: