Python数学建模1 线性规划求解

Python数学建模1——线性规划求解

  • 问题
    • 方法
    • 代码如下
    • 运行结果
  • 变式问题
    • 代码
    • 运行结果

问题

用python解决如下线性规划问题
Python数学建模1 线性规划求解_第1张图片

方法

在python中此类线性规划问题可用以下函数解决

scipy.optimize._linprog def linprog(c: int,
            A_ub: Optional[int] = None,
            b_ub: Optional[int] = None,
            A_eq: Optional[int] = None,
            b_eq: Optional[int] = None,
            bounds: Optional[Iterable] = None,
            method: Optional[str] = 'simplex',
            callback: Optional[Callable] = None,
            options: Optional[dict] = None) -> OptimizeResult

代码如下

from scipy import  optimize as opt
import numpy as np
#参数
f=np.array([2,3,-5])
a=np.array([[-2,5,-1],[1,3,1]])
b=np.array([-10,12])
a1=np.array([[1,1,1]])
b1=np.array([7])
#限制
lim1=(0,7)
lim2=(0,7)
lim3=(0,7)
#调用函数
ans=opt.linprog(-f,a,b,a1,b1,bounds=(lim1,lim2,lim3))
#输出结果
print(ans)

运行结果

 con: array([0.])
     fun: -14.571428571428571
 message: 'Optimization terminated successfully.'
     nit: 8
   slack: array([0.        , 3.85714286])
  status: 0
 success: True
       x: array([6.42857143, 0.57142857, 0.        ])

变式问题

min ⁡ ( z ) = ∣ 2 x 1 ∣ + ∣ 3 x 2 ∣ + ∣ 5 x 3 ∣ \min(z)=\vert 2x_1 \vert+\vert 3x_2 \vert+\vert 5x_3 \vert min(z)=2x1+3x2+5x3
  2 x 1 − 5 x 2 + x 3 ≥ 10 \ 2x_1-5x_2+x_3 \ge 10  2x15x2+x310
  x 1 + 3 x 2 + x 3 ≤ 12 \ x_1+3x_2+x_3 \le 12  x1+3x2+x312

代码

与非绝对值方法一样,但需要对代码作一些改变

from scipy import  optimize as opt
import numpy as np

f=np.array([2,3,5])
f=np.r_[f,f]
a=np.array([[-2,5,-1],[1,3,1]])
a=np.c_[a,-a]
b=np.array([-10,12])

ans=opt.linprog(f,a,b)
get=ans.x
ans=get[0:3]-get[3:6]
print(ans)

运行结果

[ 0. -2.  0.]

你可能感兴趣的:(Python数学建模1 线性规划求解)