Как правильно использовать NumPy и понять его вывод? - PullRequest
0 голосов
/ 20 октября 2019

Я новичок в оптимизации, и у меня есть проблема, которую я хочу решить. Это похоже на знаменитую «проблему диеты». Дело в том, что у меня есть следующие функции и ограничения:

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])

Так что мне нужна помощь, чтобы понять это. Спасибо!

...