线性规划问题——scipy.optimize.linprog

一.例题

以《数学建模算法与应用》中的题为例:

在这里插入图片描述

二.线性规划问题

数学建模旨在将复杂问题抽象为更加本质的模型

线性规划问题的标准形式:

min c T x c^Tx cTx
s.t.{
A u b x < = b u b A_{ub}x<=b_{ub} Aubx<=bub
A e q x = b e q A_{eq}x=b_{eq} Aeqx=beq
l b < = x < = r b lb<=x<=rb lb<=x<=rb
}

min:标准形式中求的是最小值,如果想求最大值只要将系数矩阵取负数,再将得到的最小值取负数即得

c T c^T cT是系数,是一个值不变的向量(一维矩阵),T表示转置,系数向量转置后变为行向量

x在这里表示决策变量,也是一个向量,形如: [ x 1 , x 2 , x 3 … … ] [x_1,x_2,x_3……] [x1,x2,x3]

c T x c^Tx cTx就是目标函数

s.t.是subject to的缩写,后面的式子是约束条件,有三种类型的约束条件(ub表示upper bound,eq表示equal)

线性规划问题,就是在约束条件的限制下求目标函数最大值/最小值的问题

三.linprog

1.导入模板

import numpy as np
from scipy.optimize import linprog

2.参数解释

解决线性规划问题使用的函数是linprog(linear programming):

scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method=‘interior-point’, callback=None, options=None, x0=None)

①参数c:表示目标函数中的系数,一个一维的数组

②参数A_ub:该参数为可选参数,若线性规划问题中的约束条件含有不等式则使用该参数,A_ub是一个二维的矩阵(数组),它的每一行都代表一个不等式的系数

以例题的约束条件中的三个不等式为例:

2 x 1 + x 2 < = 10 2x_1+x_2<=10 2x1+x2<=10
x 1 + x 2 < = 8 x_1+x_2<=8 x1+x2<=8
x 2 < = 7 x_2<=7 x2<=7

则系数矩阵应该表示为:

2 1
1 1
0 1

③参数b_ub:该参数为可选参数,对应上面的系数矩阵,是一个一维的列向量

④参数A_eq和b_eq大同小异,分别为等式约束条件中的系数矩阵和约束向量

⑤参数bound:是一个由元组(min,max)组成的序列,限定决策变量的取值范围,用None表示无限制

3.例

例题的代码:

import numpy as np
from scipy.optimize import linprog

c=np.array([4,3])
A=np.array([[2,1],[1,1],[0,1]])
b=np.array([10,8,7])

ret=linprog(-c,A_ub=A,b_ub=b,bounds=((0,None),(0,None)))

print(ret)
print(ret.x)  #表示最优解
print(ret.fun)  #表示最值
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值