#===========
# Задача о рационе
# см.гл.9, раздел "Линейное программирование"
# Имеется 2 продукта, содержащих 3 нужных витамина.
# Составляем рацион минимальной стоимости,
# обеспечивающий потребность в витаминах.
#===========

from scipy.optimize import linprog

from time import time           # это необходимо только для
start = time()                  #   измерения времени работы программы

c = [1000, 1010]                # минимизируем целевую функцию вида SUM{C[i]*X[i]} -> min

     # так задаются ограничения-неравенства вида SUM{A1[i,j]*X[i]} <= B[j]
     #
A_ub = [[-0.1, -0.3],
        [-1.1, -0.6],
        [-0.3, -0.3],
        ]
b_ub = [ -4, -18, -6.5 ]

    # Ограничения-равенства вида SUM{A2[i,j]*X[i]} = B2[j]
    #   - в этой задаче отсутствуют
    
res = linprog(c, A_ub, b_ub)    # вызываем функцию решения задачи ЛП
                                #   тут могут быть доп.параметры ..., A_eq, b_eq, bounds, method="highs")

print ("min.F={}\n At x1,x2=({}, {})".format(res.fun, res.x[0], res.x[1]))
print ("elapsed:", time() - start)
