1 2 3
| from scipy import optimize as op import numpy as np
|
scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method=‘simplex’, callback=None, options=None)
很容易发现,c指的应该是要求最大值的函数的系数数组,A_ub是应该是不等式未知量的系数矩阵,仔细观察的人应该发现,为什么第一行里面写的是[-2,5,-1]而不是[2,5,-1]呢,应该要与图里对应才对啊,原来这不等式指的是<=的不等式,那如果是>=呢,乘个负号就行了。A_eq就是其中等式的未知量系数矩阵了。B_ub就是不等式的右边了,B_eq就是等式右边了。bounds的话,指的就是每个未知量的范围了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| c=np.array([2,3,-5])
A_ub=np.array([[-2,5,-1],[1,3,1]])
B_ub=np.array([-10,12])
A_eq=np.array([[1,1,1]]) B_eq=np.array([7])
x1=(0,None) x2=(0,None) x3=(0,None)
res=op.linprog(-c,A_ub,B_ub,A_eq,B_eq,bounds=(x1,x2,x3)) print(res)
|
con: array([1.80713489e-09])
fun: -14.571428565645059
message: 'Optimization terminated successfully.'
nit: 5
slack: array([-2.24614993e-10, 3.85714286e+00])
status: 0
success: True
x: array([6.42857143e+00, 5.71428571e-01, 2.35900788e-10])
1 2
| x = [6.42857143e+00, 5.71428571e-01, 2.35900788e-10] print(2*x[0] + 3*x[1] -5*x[2])
|
14.571428571820496