【数学建模笔记 01】数学建模的线性规划

01. 线性规划

定义

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

线性规划由三部分组成:

  • 决策变量
  • 目标函数
  • 约束条件

形式

编程中,线性规划的标准形式为:
min ⁡ x c T x \min_xc^Tx xmincTx

s . t . { A x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b s.t.\left\{\begin{aligned} &Ax\le b \\ &Aeq\cdot x=beq \\ &lb\le x\le ub \end{aligned}\right. s.t.AxbAeqx=beqlbxub

其中 c , x c,x c,x n n n​ 维列向量, A , A e q A,Aeq A,Aeq 为适当维数的矩阵, b , b e q b,beq b,beq 为适当维数的列向量。

例子

如对于下列线性规划问题:
max ⁡ z = 2 x 1 + 3 x 2 − 5 x 3 \max z=2x_1+3x_2-5x_3 maxz=2x1+3x25x3

s . t . { x 1 + x 2 + x 3 = 7 2 x 1 − 5 x 2 + x 3 ≥ 10 x 1 + 3 x 2 + x 3 ≤ 12 x 1 , x 2 , x 3 ≥ 0 s.t.\left\{\begin{aligned} &x_1+x_2+x_3=7 \\ &2x_1-5x_2+x_3\ge10 \\ &x_1+3x_2+x_3\le12 \\ &x_1,x_2,x_3\ge0 \end{aligned}\right. s.t.x1+x2+x3=72x15x2+x310x1+3x2+x312x1,x2,x30

对于目标函数

化为矩阵形式有:

c = ( 2 3 − 5 ) T , x = ( x 1 x 2 x 3 ) T c=\begin{pmatrix} 2 & 3 & -5 \end{pmatrix}^T, x=\begin{pmatrix} x_1 & x_2 & x_3 \end{pmatrix}^T c=(235)T,x=(x1x2x3)T

注意到原目标函数求最大值,因此转换为求最小值后取反。

对于约束条件中的不等式

化为矩阵形式有:

A = ( − 2 5 − 1 1 3 1 ) , b = ( − 10 12 ) T A=\begin{pmatrix} -2 & 5 & -1 \\ 1 & 3 & 1 \end{pmatrix}, b=\begin{pmatrix} -10 & 12 \end{pmatrix}^T A=(215311),b=(1012)T

注意到最终要求左边小于等于右边,因此对于原为大于或大于等于的不等式要先取反。

对于约束条件中的等式

化为矩阵形式有:
A e q = ( 1 1 1 ) , b e q = ( 7 ) T = 7 Aeq=\begin{pmatrix} 1 & 1 & 1 \end{pmatrix}, beq=\begin{pmatrix} 7 \end{pmatrix}^T=7 Aeq=(111),beq=(7)T=7

对于约束条件中的取值范围

化为矩阵形式有:
l b = ( 0 0 0 ) lb=\begin{pmatrix} 0 & 0 & 0 \end{pmatrix} lb=(000)

Python 代码

使用 python 的求解代码如下:

# %%

import numpy as np
from scipy.optimize import linprog

# %%

# 目标函数形如 min c^T·x
c = np.array([2, 3, -5])

# 不等式约束形如 A·x <= b
A = np.array([[-2, 5, -1],
              [1, 3, 1]])
b = np.array([-10, 12])

# 等式约束形如 Aeq·x = beq
Aeq = np.array([[1, 1, 1]])
beq = np.array([7])

# 取值范围约束形如 lb <= x <= ub
lb = np.array([0, 0, 0])
ub = np.array([None, None, None])
bound = tuple(zip(lb, ub))

res = linprog(c, A, b, Aeq, beq, bound)
print('min y =', res.fun)
print('x =', res.x)

输入如下:

min y = -14.000000657683218
x = [2.99999979e+00 1.04988686e-08 4.00000005e+00]

于是解得:

x 1 = 3 , x 2 = 0 , x 3 = 4 x_1=3,x_2=0,x_3=4 x1=3,x2=0,x3=4​ 时,目标函数取得最大值 14.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值