使用scipy.optimize.linprog求解线性规划问题

使用scipy.optimize.linprog求解线性规划问题

          • 线性规划模型
          • 问题求解
          • 结果分析

使用scipy.optimize.linprog求解线性规划问题方法如下:

线性规划模型

使用scipy.optimize.linprog求解线性规划问题_第1张图片

问题求解

在这里我们将使用scipy中的linprog进行求解,其用法如下:

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和b_ub对应线性不等式约束,A_eq和b_eq对应线性等式约束,bounds确定边界,如x≥0为(0,None),x无约束则为(None,None),method是求解器的类型,'simplex’为单纯形法,其他的参数暂时可忽略。
要使用linprog,目标函数要变成求最小值,如果原题目要求求max(最大值),只需对目标函数取负,但要注意求解的最终值是取负后的目标函数的最小值,取负即为最大值。
使用python计算如下:

import numpy as np
from scipy.optimize import linprog

c = np.array([0.4, 0.5])
A_ub = np.array([[0.3, 0.1], [-0.6, -0.4]])  # 不等式约束
b_ub = np.array([2.7, -6])
A_eq = np.array([[0.5, 0.5]])                # 等式约束
b_eq = np.array([6])
r = linprog(c, A_ub, b_ub, A_eq, b_eq, bounds=((0, None), (0, None)))
print(r)
结果分析

程序求解输出结果为:

     fun: 5.2499999910145405
 message: 'Optimization terminated successfully.'
     nit: 5
   slack: array([2.67959077e-09, 2.99999992e-01])
  status: 0
 success: True
       x: array([7.5       , 4.49999999])

fun为目标函数的最优值,slack为松弛变量,status表示优化结果状态,x为最优解。
此模型的求解结果为:当x1=7.5,x2=4.49999999时,函数取得最小值5.2499999910145405。

你可能感兴趣的:(使用scipy.optimize.linprog求解线性规划问题)