线性规划核心知识点

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

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,直到最优。
优势

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

相关推荐
NAGNIP12 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab13 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab13 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP17 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年17 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼17 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS17 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区19 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈19 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang19 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx