线性规划核心知识点

一、线性规划的标准型:统一求解的"通用格式"

1. 标准型的4个核心特征

线性规划的标准型是求解所有线性规划问题的基础,必须满足以下条件:

  • 目标函数 :默认求极小值(若原问题是求极大值,可转化为 min (-f));
  • 约束条件:全部为等式约束(不含不等式);
  • 右端常数 :约束等式右端的 b_i ≥ 0(若 b_i < 0,等式两端乘 -1 调整);
  • 变量约束 :所有决策变量 x_j ≥ 0(无取值无限制的变量)。

标准型数学表达式 (矩阵形式):
min⁡f=cTxs.t.Ax=bx≥0 \min \quad f = \boldsymbol{c}^T \boldsymbol{x} \\ \text{s.t.} \quad \boldsymbol{A}\boldsymbol{x} = \boldsymbol{b} \\ \quad \boldsymbol{x} \geq 0 minf=cTxs.t.Ax=bx≥0

其中:

  • c\boldsymbol{c}c 是目标函数系数向量(nnn 维);
  • A\boldsymbol{A}A 是约束系数矩阵(m×nm \times nm×n 阶,m<nm < nm<n,秩为 mmm);
  • b\boldsymbol{b}b 是约束右端常数向量(mmm 维,bi≥0b_i ≥ 0bi≥0);
  • x\boldsymbol{x}x 是决策变量向量(nnn 维,xj≥0x_j ≥ 0xj≥0)。

2. 一般形式转化为标准型的5种场景

实际问题的约束可能是不等式、变量无约束等,需按以下规则转化为标准型:

原约束/目标函数类型 转化方法
目标函数求极大值(max⁡f\max fmaxf) 转化为 min⁡(−f)\min (-f)min(−f)(目标函数系数全部取反)
约束为"≤"(如 ∑aijxj≤bi\sum a_{ij}x_j ≤ b_i∑aijxj≤bi) 松弛变量 xn+i≥0x_{n+i} ≥ 0xn+i≥0,变为 ∑aijxj+xn+i=bi\sum a_{ij}x_j + x_{n+i} = b_i∑aijxj+xn+i=bi
约束为"≥"(如 ∑aijxj≥bi\sum a_{ij}x_j ≥ b_i∑aijxj≥bi) 剩余变量 xn+i≥0x_{n+i} ≥ 0xn+i≥0,变为 ∑aijxj−xn+i=bi\sum a_{ij}x_j - x_{n+i} = b_i∑aijxj−xn+i=bi
约束右端 bi<0b_i < 0bi<0 等式两端乘 −1-1−1,同时调整约束符号(如"≤"变"≥")
变量 xjx_jxj 无取值限制 令 xj=xj′−xj′′x_j = x_j' - x_j''xj=xj′−xj′′(xj′≥0,xj′′≥0x_j' ≥ 0, x_j'' ≥ 0xj′≥0,xj′′≥0),代入目标函数和约束
变量 xj≤0x_j ≤ 0xj≤0 令 xj=−xj′x_j = -x_j'xj=−xj′(xj′≥0x_j' ≥ 0xj′≥0),替换原变量

示例 :将 max⁡f=3x1+x2−2x3\max f = 3x_1 + x_2 - 2x_3maxf=3x1+x2−2x3(约束含 ≤、≥、等式,x2x_2x2 无约束,x3≤0x_3 ≤ 0x3≤0)转化为标准型:

  1. 目标函数:min⁡f′=−3x1−x2′+x2′′+2x3′\min f' = -3x_1 - x_2' + x_2'' + 2x_3'minf′=−3x1−x2′+x2′′+2x3′(x2=x2′−x2′′x_2 = x_2' - x_2''x2=x2′−x2′′,x3=−x3′x_3 = -x_3'x3=−x3′);
  2. 约束转化:
    • 2x1+3(x2′−x2′′)+4x3′+x4=122x_1 + 3(x_2' - x_2'') + 4x_3' + x_4 = 122x1+3(x2′−x2′′)+4x3′+x4=12(原 ≤ 加松弛变量 x4x_4x4);
    • 4x1+(x2′−x2′′)−2x3′−x5=84x_1 + (x_2' - x_2'') - 2x_3' - x_5 = 84x1+(x2′−x2′′)−2x3′−x5=8(原 ≥ 减剩余变量 x5x_5x5);
    • 3x1−(x2′−x2′′)−3x3′=63x_1 - (x_2' - x_2'') - 3x_3' = 63x1−(x2′−x2′′)−3x3′=6(原等式不变);
  3. 变量约束:x1,x2′,x2′′,x3′,x4,x5≥0x_1, x_2', x_2'', x_3', x_4, x_5 ≥ 0x1,x2′,x2′′,x3′,x4,x5≥0。

二、线性规划的解:从可行解到最优解

1. 核心概念辨析

概念 定义与特点
可行解 满足所有约束条件(Ax=b\boldsymbol{A}\boldsymbol{x} = \boldsymbol{b}Ax=b 且 x≥0\boldsymbol{x} ≥ 0x≥0)的 x\boldsymbol{x}x
可行域 所有可行解构成的集合(凸集,即任意两点连线仍在集合内)
基本解 从 A\boldsymbol{A}A 中选 mmm 个线性无关列构成基 B\boldsymbol{B}B,令非基变量为0,求解 BxB=b\boldsymbol{B}\boldsymbol{x}_B = \boldsymbol{b}BxB=b 得到的解(非基变量全为0,基变量可能为负)
基本可行解 满足 x≥0\boldsymbol{x} ≥ 0x≥0 的基本解(对应可行域的顶点 ,有限个,不超过 (nm)\binom{n}{m}(mn) 个)
退化基本可行解 基本可行解中存在至少一个基变量为0(多个基本解可能对应同一个顶点)
最优解 使目标函数达到最小值的可行解(若存在,必为某个基本可行解)

2. 解的4个核心性质(考试重点)

  1. 可行域是凸集:若存在可行解,可行域必为凸集(有限个闭半空间的交集);
  2. 基本可行解 ↔ 可行域顶点 :可行解是基本可行解,当且仅当其正分量对应的 A\boldsymbol{A}A 的列向量线性无关,且对应可行域的顶点;
  3. 最优解存在则在顶点:若线性规划有最优解,必存在一个基本可行解是最优解(无需遍历所有可行解,只需验证顶点);
  4. 基本可行解有限 :基本可行解个数不超过 (nm)\binom{n}{m}(mn),保证单纯形法可在有限步内收敛。

三、单纯形法:求解线性规划的"通用算法"

单纯形法的核心思路是:从可行域的一个顶点(基本可行解)出发,迭代到相邻顶点,直到找到最优解,全程通过"单纯形表"完成计算。

1. 单纯形法的6个核心步骤

步骤1:构造初始单纯形表
  • 前提:标准型中需存在单位矩阵作为初始基(若没有,需用人工变量法构造,见第四部分);

  • 表格结构 (以 mmm 个基变量、nnn 个变量为例):

    列名 含义
    基(基变量) 当前基变量(初始为松弛变量/人工变量)
    CBC_BCB 基变量在目标函数中的系数
    bbb 基变量的取值(xB=B−1b\boldsymbol{x}_B = \boldsymbol{B}^{-1}\boldsymbol{b}xB=B−1b)
    变量列(x1,...,xnx_1,...,x_nx1,...,xn) 基变量列构成单位矩阵,非基变量列为 B−1Aj\boldsymbol{B}^{-1}\boldsymbol{A}_jB−1Aj
    θ\thetaθ 确定出基变量的最小比值(θi=biaik\theta_i = \frac{b_i}{a_{ik}}θi=aikbi,aik>0a_{ik} > 0aik>0)
    检验数 σj\sigma_jσj 判断是否最优(σj=cj−CBB−1Aj\sigma_j = c_j - \boldsymbol{C}_B\boldsymbol{B}^{-1}\boldsymbol{A}_jσj=cj−CBB−1Aj)
步骤2:最优性检验
  • 判断标准 :若所有非基变量的检验数 σj≤0\sigma_j ≤ 0σj≤0,当前基本可行解是最优解,停止迭代;
  • 特殊情况 :若存在 σj=0\sigma_j = 0σj=0 的非基变量,且能找到 θ>0\theta > 0θ>0,则有无穷多最优解。
步骤3:确定进基变量(换入变量)
  • 规则 :选择检验数最大的非基变量(σk=max⁡{σj∣σj>0}\sigma_k = \max\{\sigma_j \mid \sigma_j > 0\}σk=max{σj∣σj>0}),对应列为"主列";
  • 意义:该变量进基能使目标函数下降最快(极小化问题)。
步骤4:判断无界解
  • 规则 :若进基变量对应的主列中所有元素 aik≤0a_{ik} ≤ 0aik≤0,则目标函数可无限下降,存在无界解,停止迭代。
步骤5:确定出基变量(换出变量)
  • 规则 :计算主列中 aik>0a_{ik} > 0aik>0 对应的 θi=biaik\theta_i = \frac{b_i}{a_{ik}}θi=aikbi,选择最小 θ\thetaθ 对应的基变量为出基变量,对应行为"主行";
  • 主元素 :主行与主列的交点元素 alka_{lk}alk(后续需通过行变换将其变为1,主列其他元素变为0)。
步骤6:迭代更新单纯形表(高斯消元)
  • 行变换规则
    1. 主行:bl′=blalkb'l = \frac{b_l}{a{lk}}bl′=alkbl,alj′=aljalka'{lj} = \frac{a{lj}}{a_{lk}}alj′=alkalj(主元素变为1);
    2. 其他行:bi′=bi−aik⋅bl′b'i = b_i - a{ik} \cdot b'lbi′=bi−aik⋅bl′,aij′=aij−aik⋅alj′a'{ij} = a_{ij} - a_{ik} \cdot a'_{lj}aij′=aij−aik⋅alj′(主列其他元素变为0);
  • 更新后:进基变量替换出基变量,返回步骤2重新检验。

2. 示例:用单纯形法求解

问题 :min⁡f=−3x1−5x2\min f = -3x_1 -5x_2minf=−3x1−5x2,约束 x1≤4x_1 ≤4x1≤4,2x2≤122x_2 ≤122x2≤12,3x1+2x2≤183x_1+2x_2 ≤183x1+2x2≤18,x1,x2≥0x_1,x_2 ≥0x1,x2≥0
步骤

  1. 转化为标准型:加松弛变量 x3,x4,x5x_3,x_4,x_5x3,x4,x5,目标函数 min⁡f=−3x1−5x2+0x3+0x4+0x5\min f = -3x_1 -5x_2 +0x_3 +0x_4 +0x_5minf=−3x1−5x2+0x3+0x4+0x5,约束:
    x1+x3=4, 2x2+x4=12, 3x1+2x2+x5=18, x1,...,x5≥0x_1 +x_3=4,\ 2x_2 +x_4=12,\ 3x_1+2x_2 +x_5=18,\ x_1,...,x_5 ≥0x1+x3=4, 2x2+x4=12, 3x1+2x2+x5=18, x1,...,x5≥0
  2. 初始基为 x3,x4,x5x_3,x_4,x_5x3,x4,x5(单位矩阵),构造初始单纯形表;
  3. 迭代过程:
    • 第1次迭代:σ1=3\sigma_1=3σ1=3,σ2=5\sigma_2=5σ2=5(σ2\sigma_2σ2 最大,x2x_2x2 进基),θmin⁡=6\theta_{\min}=6θmin=6(x4x_4x4 出基),主元素为2;
    • 第2次迭代:更新表后,σ1=−1\sigma_1=-1σ1=−1,σ3=0\sigma_3=0σ3=0,σ4=2.5\sigma_4=2.5σ4=2.5,σ5=0\sigma_5=0σ5=0(σ1\sigma_1σ1 最大,x1x_1x1 进基),θmin⁡=2\theta_{\min}=2θmin=2(x5x_5x5 出基);
    • 第3次迭代:所有 σj≤0\sigma_j ≤0σj≤0,最优解 x1=2,x2=6x_1=2,x_2=6x1=2,x2=6,f=−36f=-36f=−36。

四、人工变量法:处理无初始基的情况

当标准型中无单位矩阵(如约束含"≥"或等式),需添加人工变量构造初始基,常用两种方法:

1. 大M法:用"无穷大"惩罚人工变量

核心逻辑
  • 人工变量 :在无单位矩阵的约束中加人工变量 xn+i≥0x_{n+i} ≥0xn+i≥0(如 ∑aijxj−xn+i+xn+m+i=bi\sum a_{ij}x_j -x_{n+i} +x_{n+m+i}=b_i∑aijxj−xn+i+xn+m+i=bi);
  • 目标函数处理 :极小化问题中,人工变量系数设为 MMM(无穷大正数)------ 若人工变量未出基(取值非0),目标函数会远大于0,说明无可行解;
  • 迭代步骤 :按单纯形法正常迭代,若最终基变量含人工变量且 fff 含 MMM,则原问题无可行解。
示例

问题 :min⁡f=3x1−x3\min f=3x_1 -x_3minf=3x1−x3,约束 x1+x2+x3≤4x_1+x_2+x_3 ≤4x1+x2+x3≤4,−2x1+x2−x3≥1-2x_1+x_2 -x_3 ≥1−2x1+x2−x3≥1,3x2+x3=93x_2+x_3=93x2+x3=9
处理

  • 加松弛变量 x4x_4x4、剩余变量 x5x_5x5、人工变量 x6,x7x_6,x_7x6,x7;
  • 目标函数:min⁡f=3x1+0x2−x3+0x4+0x5+Mx6+Mx7\min f=3x_1 +0x_2 -x_3 +0x_4 +0x_5 +Mx_6 +Mx_7minf=3x1+0x2−x3+0x4+0x5+Mx6+Mx7;
  • 迭代后若 x6,x7x_6,x_7x6,x7 出基(取值0),则有可行解;若仍在基中,无可行解。

2. 两阶段法:分阶段消除人工变量

核心逻辑
  • 第一阶段 :构造辅助问题,目标函数 min⁡w=∑\min w = \summinw=∑ 人工变量,约束为原标准型(含人工变量);
    • 若辅助问题最优解 w=0w=0w=0:人工变量全为0,得到原问题的初始基本可行解,进入第二阶段;
    • 若 w>0w>0w>0:原问题无可行解,停止。
  • 第二阶段:删除辅助问题的目标函数和人工变量列,用原问题目标函数,以第一阶段的最终基为初始基,按单纯形法迭代。
优势

避免大M法中"无穷大"在计算机计算中的精度误差,更适合编程实现。

五、退化与修正单纯形法

1. 退化现象:基变量为0的问题

定义

基本可行解中存在基变量为0(如多个约束交于同一点,导致 θ\thetaθ 有多个最小值),可能引发循环迭代(多次迭代后回到原基本可行解,无法收敛)。

解决方法:摄动法
  • 核心思想 :对约束右端 b\boldsymbol{b}b 加微小扰动 b(ε)=b+ε+ε2+...+εm\boldsymbol{b}(\varepsilon) = \boldsymbol{b} + \varepsilon + \varepsilon^2 + ... + \varepsilon^mb(ε)=b+ε+ε2+...+εm(ε\varepsilonε 充分小),使所有基变量非0,避免退化;
  • 计算技巧 :无需实际代入 ε\varepsilonε,只需按"多项式字典序"比较 θ\thetaθ(先比常数项,再比 ε\varepsilonε 系数,以此类推),确定唯一出基变量。

2. 修正单纯形法:优化计算效率

核心改进

普通单纯形法迭代时会重复计算非基变量列,修正法仅需维护基的逆矩阵 B−1\boldsymbol{B}^{-1}B−1,减少计算量和内存占用。

计算步骤
  1. 初始基 :设初始基为单位矩阵(B−1=I\boldsymbol{B}^{-1} = \boldsymbol{I}B−1=I),计算 xB=b\boldsymbol{x}_B = \boldsymbol{b}xB=b,CB\boldsymbol{C}_BCB;
  2. 检验数计算 :σj=cj−CBB−1Aj\sigma_j = c_j - \boldsymbol{C}_B\boldsymbol{B}^{-1}\boldsymbol{A}_jσj=cj−CBB−1Aj,判断是否最优;
  3. 进基变量 :选 σk=max⁡{σj>0}\sigma_k = \max\{\sigma_j >0\}σk=max{σj>0},计算 yk=B−1Ak\boldsymbol{y}_k = \boldsymbol{B}^{-1}\boldsymbol{A}_kyk=B−1Ak;
  4. 出基变量 :计算 θmin⁡=min⁡{xBiyki∣yki>0}\theta_{\min} = \min\{\frac{x_{Bi}}{y_{ki}} \mid y_{ki} >0\}θmin=min{ykixBi∣yki>0},确定出基变量对应行 rrr;
  5. 更新 B−1\boldsymbol{B}^{-1}B−1 :构造初等矩阵 E\boldsymbol{E}E(仅第 rrr 行不同),B新−1=EB−1\boldsymbol{B}^{-1}_{\text{新}} = \boldsymbol{E}\boldsymbol{B}^{-1}B新−1=EB−1;
  6. 迭代:重复步骤2-5,直到最优。
优势

适合变量和约束较多的问题,是工业级求解器的核心算法之一。

相关推荐
好家伙VCC36 分钟前
**神经编码新视角:用Python实现生物启发的神经信号压缩与解码算法**在人工智能飞速发展的今天
java·人工智能·python·算法
Navicat中国36 分钟前
如何使用 Ollama 配置 AI 助手 | Navicat 教程
数据库·人工智能·ai·navicat·ollama
@小匠5 小时前
Read Frog:一款开源的 AI 驱动浏览器语言学习扩展
人工智能·学习
山间小僧6 小时前
「AI学习笔记」RNN
机器学习·aigc·ai编程
网教盟人才服务平台8 小时前
“方班预备班盾立方人才培养计划”正式启动!
大数据·人工智能
芯智工坊8 小时前
第15章 Mosquitto生产环境部署实践
人工智能·mqtt·开源
菜菜艾8 小时前
基于llama.cpp部署私有大模型
linux·运维·服务器·人工智能·ai·云计算·ai编程
TDengine (老段)8 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
小真zzz8 小时前
搜极星:第三方多平台中立GEO洞察专家全面解析
人工智能·搜索引擎·seo·geo·中立·第三方平台
GreenTea9 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端