线性规划介绍
1. 定义
线性规划(Linear Programming, LP)是运筹学中用于解决最优化问题的一种数学方法。其核心是在一组线性约束条件下,寻找某个线性目标函数的最大值或最小值。这类问题广泛应用于资源分配、生产计划、运输调度等领域。
–
2. 基本组成部分
- 决策变量:需要确定的变量,例如:x1,x2,…,xnx_1, x_2, \dots, x_nx1,x2,…,xn
- 目标函数:需最大化或最小化的线性表达式,例如:
最大化 z=c1x1+c2x2+⋯+cnxn \text{最大化 } z = c_1x_1 + c_2x_2 + \dots + c_nx_n 最大化 z=c1x1+c2x2+⋯+cnxn
或
最小化 z=c1x1+c2x2+⋯+cnxn \text{最小化 } z = c_1x_1 + c_2x_2 + \dots + c_nx_n 最小化 z=c1x1+c2x2+⋯+cnxn - 约束条件:决策变量需满足的线性不等式或等式,例如:
a11x1+a12x2+⋯+a1nxn≤b1 a_{11}x_1 + a_{12}x_2 + \dots + a_{1n}x_n \leq b_1 a11x1+a12x2+⋯+a1nxn≤b1
am1x1+am2x2+⋯+amnxn=bm a_{m1}x_1 + a_{m2}x_2 + \dots + a_{mn}x_n = b_m am1x1+am2x2+⋯+amnxn=bm
3. 标准形式
线性规划的标准形式通常表示为:
最大化 z=cTx满足 Ax≤b,x≥0
\begin{align*}
\text{最大化 } & z = \mathbf{c}^T \mathbf{x} \\
\text{满足 } & A\mathbf{x} \leq \mathbf{b}, \\
& \mathbf{x} \geq \mathbf{0}
\end{align*}
最大化 满足 z=cTxAx≤b,x≥0
其中:
- x\mathbf{x}x 是决策变量向量,
- c\mathbf{c}c 是目标函数系数向量,
- AAA 是约束系数矩阵,
- b\mathbf{b}b 是资源限制向量。
4. 求解方法
-
图解法(仅适用于2个变量):
通过绘制约束条件的直线,确定可行域(多边形区域),并在顶点处寻找目标函数的最优值。 -
单纯形法(Simplex Method):
一种迭代算法,通过遍历可行域的顶点(基本可行解)逐步逼近最优解。由乔治·丹齐格(George Dantzig)于1947年提出。 -
内点法(Interior-Point Method):
从可行域内部向边界逼近,适用于大规模问题,计算效率较高。
5. 应用举例
-
生产计划:工厂需分配资源生产两种产品,目标是利润最大化。
- 目标函数:利润 = 产品A利润 × 产量A + 产品B利润 × 产量B
- 约束条件:原材料、工时、市场需求等限制。
-
运输问题:从多个仓库向多个商店配送货物,目标是运输成本最小化。
- 目标函数:总成本 = 各路径运输量 × 单位成本之和
- 约束条件:仓库供应量、商店需求量平衡。
6. 重要概念
- 可行解:满足所有约束条件的解。
- 最优解:使目标函数达到极值的可行解。
- 对偶理论:每个线性规划问题都有一个对应的对偶问题,两者最优值相等(强对偶定理)。
7. 实际工具
- Excel规划求解:内置插件,适合简单问题。
- MATLAB:使用
linprog函数。 - Python:通过
SciPy.optimize.linprog或PuLP库实现。
8. 总结
线性规划通过数学建模将实际问题转化为优化问题,结合高效的算法和工具,能够在资源受限的条件下找到最优决策方案。其核心思想是在有限的约束中探索可能性,追求目标的最优平衡。
9.具体示例:工厂生产计划优化
问题描述
某工厂生产两种产品 A 和 B,生产过程中需要消耗原材料和工时。工厂每天可用资源如下:
- 原材料总量:100 公斤
- 总工时:120 小时
已知:
- 生产 1 单位 A 需要:2 公斤原材料,1 小时工时,利润为 50 元。
- 生产 1 单位 B 需要:3 公斤原材料,4 小时工时,利润为 80 元。
目标:制定生产计划,使每日总利润最大。
步骤 1:定义决策变量
设:
- x1x_1x1 = 产品 A 的日产量(单位)
- x2x_2x2 = 产品 B 的日产量(单位)
步骤 2:建立目标函数
总利润需最大化:
最大化 z=50x1+80x2 \text{最大化 } z = 50x_1 + 80x_2 最大化 z=50x1+80x2
步骤 3:列出约束条件
- 原材料约束(不超过 100 公斤):
2x1+3x2≤100 2x_1 + 3x_2 \leq 100 2x1+3x2≤100 - 工时约束(不超过 120 小时):
x1+4x2≤120 x_1 + 4x_2 \leq 120 x1+4x2≤120 - 非负约束(产量不可为负):
x1≥0,x2≥0 x_1 \geq 0, \quad x_2 \geq 0 x1≥0,x2≥0
步骤 4:转化为标准形式
引入松弛变量 s1s_1s1 和 s2s_2s2,将不等式转为等式:
{2x1+3x2+s1=100x1+4x2+s2=120x1,x2,s1,s2≥0
\begin{cases}
2x_1 + 3x_2 + s_1 = 100 \\
x_1 + 4x_2 + s_2 = 120 \\
x_1, x_2, s_1, s_2 \geq 0
\end{cases}
⎩⎨⎧2x1+3x2+s1=100x1+4x2+s2=120x1,x2,s1,s2≥0
步骤 5:求解(图解法)
由于仅有两个变量,可用图解法直观分析:
- 绘制约束线:
- 原材料约束线:2x1+3x2=1002x_1 + 3x_2 = 1002x1+3x2=100,连接点 (50,0)(50, 0)(50,0) 和 (0,33.3)(0, 33.3)(0,33.3)。
- 工时约束线:x1+4x2=120x_1 + 4x_2 = 120x1+4x2=120,连接点 (120,0)(120, 0)(120,0) 和 (0,30)(0, 30)(0,30)。
- 确定可行域:
- 两约束线与坐标轴围成的多边形区域(见示意图)。
- 计算顶点目标函数值:
- 顶点 1:(0,0)(0, 0)(0,0),利润 z=0z = 0z=0 元。
- 顶点 2:(50,0)(50, 0)(50,0),利润 z=50×50=2500z = 50 \times 50 = 2500z=50×50=2500 元。
- 顶点 3:交点解方程:
{2x1+3x2=100x1+4x2=120 \begin{cases} 2x_1 + 3x_2 = 100 \\ x_1 + 4x_2 = 120 \end{cases} {2x1+3x2=100x1+4x2=120
解得 x1=16x_1 = 16x1=16, x2=26x_2 = 26x2=26,利润 z=50×16+80×26=2880z = 50 \times 16 + 80 \times 26 = 2880z=50×16+80×26=2880 元。 - 顶点 4:(0,30)(0, 30)(0,30),利润 z=80×30=2400z = 80 \times 30 = 2400z=80×30=2400 元。
步骤 6:确定最优解
比较顶点利润,最优解为:
x1=16,x2=26 x_1 = 16, \quad x_2 = 26 x1=16,x2=26
此时总利润最大为 2880 元,且满足所有约束:
- 原材料消耗:2×16+3×26=1002 \times 16 + 3 \times 26 = 1002×16+3×26=100 公斤(恰好用完)。
- 工时消耗:16+4×26=12016 + 4 \times 26 = 12016+4×26=120 小时(恰好用完)。
实际意义
工厂应每日生产 16 单位 A 和 26 单位 B,可实现资源充分利用和利润最大化。若需调整(如市场需求变化),可通过敏感度分析评估参数变动对结果的影响。
8447

被折叠的 条评论
为什么被折叠?



