Python线性规划

线性规划需要使用scipy模块

以及一般需要使用scipy模块中的linprog

Python线性规划_第1张图片

 

 

#导入包
from scipy import optimize
import numpy as np
#确定c,A,b,Aeq,beq
c = np.array([-1,4])
A = np.array([[-3,1],[1,2]])
b = np.array([6,4])
x1_bounds=[-3,None]
#求解
res = optimize.linprog(c,A,b,bounds=(x1_bounds)) 
   #此处使用的linprog函数,最后的bound指的是变量的范围限制,x1_bound的范围是大于等于负三。
   #再者,需要将所需要满足的等式不等式均列在linprog中
print(res)

 此处使用的linprog函数,最后的bound指的是变量的范围限制,x1_bound的范围是大于等于负三。再者,需要将所需要满足的等式不等式均列在linprog中

fun: -22.0
       ineqlin:  marginals: array([-0., -1.])
  residual: array([39.,  0.])
         lower:  marginals: array([0., 6.])
  residual: array([13.,  0.])
       message: 'Optimization terminated successfully. (HiGHS Status 7: Optimal)'
           nit: 0
         slack: array([39.,  0.])
        status: 0
       success: True
         upper:  marginals: array([0., 0.])
  residual: array([inf, inf])
             x: array([10., -3.])

我们所需要的结果只有fun和x

fun就是目标函数最小值,x就是最优解。

再举一个例子

Python线性规划_第2张图片

 

因为方程2和方程三的不等号方向不同,所以改变不等号的方向,转换成同向的不等式,即可最终求出正确结果。 

同时,在建立矩阵时,我们需要把方程右边放在一起,方程左边放在一起。(一个矩阵取得是方程左边の各个变量的系数,另外一个矩阵取得是方程右边)

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

#确定c,A,b,Aeq,beq
c = np.array([2,3,-5])
A = np.array([[-2,5,-1],[1,3,1]])
b = np.array([-10,12)]
Aeq = np.array([[1,1,1]])
beq = np.array([7])

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

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

在求解时带入-c并且把第二个式子的系数加了负号,是因为需要化为MATLAB标准形式,最终求出来的值为最小值即-14.57,去掉负号就是我们要的最大值。

你可能感兴趣的:(python数学建模算法,python,scipy,matplotlib,MATLAB)