规划类算法之线性规划:研究一类条件极值问题,即在一组线性约束条件(包括等式及不等式约束)下,找出一个线性函数的最大值或最小值。
min cTx such that Ax≤b
其中,c和x为n维向量;b为m维向量;A为m X n矩阵。
eg.
线性规划
max **c**^T^**x** such that **Ax**≥**b**
的MATLAB标准型为
min -**c**^T^**x** such that- **Ax**≤-**b**
在此用 python 求解,需用 scipy 和 numpy 库的支持
from scipy import optimize
import numpy as np
#求解函数
res =
optimize.linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
#目标函数最小值
print(res.fun)
#最优解
print(res.x)
例:求解线性规划问题
maxmize:
x1+7x2-5x3
s.t.:
x1+x2+x3=5
3x1-4x2+5x3>=8
6x1+3x2+2x3<=15
xi>=0
代码:
from scipy import optimize
import numpy as np
c=np.array([1,7,-5])
A=np.array([[-3,4,-5],[6,3,2]])
b=np.array([-8,15])
A_eq=np.array([[1,1,1]])
b_eq=np.array([5])
lim1=(0,5)
lim2=(0,5)
lim3=(0,5)
res=optimize.linprog(-c,A,b,A_eq,b_eq,bounds=(lim1,lim2,lim3))
print (res)
result:
con: array([0.])
fun: -0.41176470588235325
message: 'Optimization terminated successfully.'
nit: 6
slack: array([ 1.77635684e-15, -3.55271368e-15])
status: 0
success: True
x: array([0.82352941, 1.70588235, 2.47058824])
最后结果取正,最大值为:-fun=0.41176470588235325.