最近在做最优化的作业,涉及到线性规划问题,之前运筹学也学过相关问题,都是通过手写单纯性表来进行求解的,但学了python之后感觉太麻烦了,不如利用python来帮我们求解。

线性规划求解主要弄清楚两个部分,目标函数(max,min)和约束条件(s.t.),我们求解时一般要化为python的标准形式:

python 航线规划工具类 python做线性规划怎么做_线性规划


在此用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)

好啦上门可以跳过不看,来通过一个例子掌握python求解线性规划:

python 航线规划工具类 python做线性规划怎么做_线性规划_02

#导入包
from scipy import optimize
import numpy as np

#确定c,A,b,Aeq,beq
c = np.array([1,-2,1,0])
A = np.array([[2,-1,4,0],[-1,2,-4,0]])
b = np.array([8,4])
Aeq = np.array([[1,1,-2,1]])
beq = np.array([10])

#求解
res = optimize.linprog(c,A,b,Aeq,beq)
print(res)

结果如下

con: array([2.16662244e-11])
     fun: -18.999999999960654
 message: 'Optimization terminated successfully.'
     nit: 5
   slack: array([4.74820183e-12, 1.77671211e-11])
  status: 0
 success: True
       x: array([5.02499921e-13, 1.20000000e+01, 5.00000000e+00, 8.00000000e+00])

可以看到求解的结果,我们关注第一个和最后一个,fun就是目标函数最小值,x就是最优解。
注:如果原问题是求最大值,则在求解时带入-c,化为python标准形式,最终求出来的值为最小值即为相反数,去掉负号就是我们要的最大值。