Я новичок в оптимизации, и у меня есть проблема, которую я хочу решить. Это похоже на знаменитую «проблему диеты». Дело в том, что у меня есть следующие функции и ограничения:
f(x) = c = 1.8p1 + 1.3p2 + 1.3p3 + 1.4p4 + 1.7p5 + 2.2p6 + 2.3p7 + 2.3p8 +
2.3p9 2.6p10 + 2.6p11 + 2.6p12 + 2.8p13
10p1 + 21p2 + 20p3 + 0p4 + 4p5 + 45p6 + 4p7 + 20p8 + 0p9 + 8p10 + 6p11 +
0p12 + 10p13 >= N
10p1 + 0p2 + 0p3 + 17p4 + 14p5 + 0p6 + 30p7 + 5p8 + 0p9 + 28p10 + 30p11 +
42p12 + 50p13 >= P
90p1 + 65p2 + 67p3 + 68p4 + 86p5 + 110p6 + 115p7 + 115p8 + 115p9 + 129p10
+ 130p11 + 130p12 + 140p13 >= K
Я пытался следовать документации scipy, чтобы построить это, и у меня есть результат, но я не уверен, что это как-товерный. Я изменил значения, чтобы посмотреть, смогу ли я получить более «визуальный» ответ. Вот что я попробовал:
import numpy as np
from scipy.optimize import linprog
c = [1.8, 1.3, 1.3, 1.4, 1.7, 2.2, 2.3, 2.3, 2.3, 2.6, 2.6, 2.6, 2.8]
A = [[-10,-21,-20,0,-4,-45,-4,-20,0,-8,-6,0,-10],
[-10,0,0,-17,-14,0,-30,-5,0,-28,-30,-42,-50],
[-90,-65,-67,-68,-86,-110,-115,-115,-115,-129,-130,-130,-140]]
b = [-120,-85,-150]
x0_bounds = (None,None,None)
x1_bounds = (None,None,None)
res = linprog(c, A_ub=A, b_ub=b)
print(res)
-120, -85 и -150 - только примеры. В качестве вывода я получаю следующее:
con: array([], dtype=float64)
fun: 9.795555574049025
message: 'Optimization terminated successfully.'
nit: 8
slack: array([5.43219159e-08, 5.50113981e-08, 3.39777779e+02])
status: 0
success: True
x: array([9.26241275e-10, 1.40584882e-08, 1.05127346e-08, 6.29244595e-10,
8.21781076e-10, 2.28888888e+00, 1.22624807e-09, 7.42280787e-10,
2.17807793e-11, 7.27165179e-10, 7.79542099e-10, 1.61706284e-09,
1.70000000e+00])
Так что мне нужна помощь, чтобы понять это. Спасибо!