当前位置: 首页 > news >正文

单纯形法之大M法

1. 问题背景与标准化

在求解某些线性规划问题时,往往难以直接找到初始的基本可行解。特别是当约束中存在等式或 “≥” 类型的不等式时,我们需要引入人工变量来构造一个初始可行解。

考虑如下标准形式问题(假设为最大化问题):

\begin{aligned} \text{Maximize } & Z = c^T x, \\ \text{Subject to } & Ax = b, \\ & x \ge 0. \end{aligned}

当约束中有“=”或“≥”约束时,为使模型满足“基本变量个数等于约束个数”的条件,我们引入人工变量 a≥0 。


2. 引入人工变量与大 M 惩罚

2.1. 人工变量的引入

  • 对于形如

    Ax = b

    的约束,如果直接采用松弛或剩余变量无法得到初始可行解,则引入人工变量 a≥0 ,使约束变为

    Ax + a = b..
  • 对于 “≥” 约束,同样引入剩余变量后再补充人工变量,保证约束满足等式形式。

2.2. 修改目标函数

为避免在最终解中保留人工变量,需在目标函数中给予这些变量一个巨大的惩罚。对于最大化问题,通常将人工变量前的系数设为 −M (其中 M 是一个非常大的正数),修改后的目标函数为:

\text{Maximize } Z = c^T x - M \sum_{i\in \mathcal{A}} a_i,

其中 \mathcal{A} 表示所有人工变量的集合。这样做的目的在于:

  • 若人工变量在最优解中不为零,则由于扣分 −M 其目标值会大幅降低,迫使求解过程中尽量消除人工变量;

  • 当存在一个可行解不需要使用人工变量时,最终解会将所有人工变量淘汰(即取零)。


3. 构造初始单纯型表

将原问题中所有变量(原决策变量、松弛/剩余变量、人工变量)统一构成向量,再构造单纯型表。设扩展后的变量记为

x' = (x, \, s, \, a)

目标函数写成:

相应的约束矩阵也经过扩充,使得原约束变为标准等式形式。

初始时,我们选取人工变量作为基本变量,从而构造一个初始基本可行解(注意:此解可能并非真实意义下的“可行解”,因为人工变量仅为辅助求解而引入)。


4. 大 M 法的单纯型迭代过程

4.1. 目标函数的重写

类似于普通单纯型法,我们把目标函数用基变量和非基变量表示。令 B 为当前基矩阵(其中包含人工变量),则基本解为

x_B = B^{-1}b.

目标函数可以写为

Z = c_B^T x_B + (c_N^T - c_B^T B^{-1}N)x_N.

其中:

  • c_B 中可能包含 −M 对应的人工变量;

  • 检验数(相对成本)为

    \overline{c_j} = c_j - c_B^T B^{-1}A_j.

4.2. 迭代与淘汰人工变量

在迭代过程中,由于目标函数中对人工变量赋予了极大负值 −M ,如果存在能使目标函数改善的换入操作,就会倾向于选择那些能使人工变量离开基的换入变量。单纯型法的迭代步骤与普通方法类似:

  • 进基变量选择:检查所有非基变量的检验数,若存在 \overline{c_j} > 0(对于最大化问题),则选择最有利的变量进基;

  • 出基变量选择:计算方向向量,利用最小比值法确定允许步长和出基变量。

关键在于:

  • 当存在一个完全可行的解(即一个解不需要使用人工变量)时,经过有限步迭代,所有人工变量将被淘汰(或其值收缩为零)。

  • 若最终得到的最优解中仍含有正值的人工变量,则表明原问题没有可行解。


5. 数学证明与思想总结

5.1. 惩罚机制确保解的“真实性”

由于引入了惩罚系数 M ,在目标函数中任何非零的人工变量都会使目标值大幅下降。设若在某一基本解中某个人工变量 a_i 保持正值,则对应目标函数贡献为 M\, a_i

  • 当 M 足够大时,任何含有非零人工变量的解都不是最优解;

  • 如果存在一个可行解(即不存在必须依赖人工变量)时,最优解必然使所有人工变量取零。

5.2. 终止与可行性判断

  • 终止条件:当所有非基变量的检验数都满足最优性条件时,算法终止。

  • 无可行解判断:若在最优解中发现有某个人工变量 a_i > 0,则说明原问题无可行解。

5.3. 收敛性与大 M 的选择

  • 理论上,M 应当取足够大,使得其影响在求解过程中远大于其他系数的作用,但实际计算中需避免因 M 过大而引起数值不稳定;

  • 大 M 法证明的核心在于:在有限次迭代内,若存在一个不依赖人工变量的可行解,则算法必然能将所有人工变量驱逐出基,并找到该最优解。


6. 总结

大 M 法的理论推导过程主要包括以下几个步骤:

  1. 问题标准化:将问题写为等式约束形式,必要时引入松弛、剩余和人工变量。

  2. 目标函数修改:在目标函数中对人工变量施加巨大的惩罚(对于最大化问题,人工变量前系数取 −M )。

  3. 构造初始单纯型表:以包含人工变量的基本可行解作为起始点。

  4. 单纯型迭代:按照单纯型法的标准步骤进行迭代,通过换基操作改善目标函数值,同时尽量淘汰人工变量。

  5. 终止与判断:若最终最优解中所有人工变量均为零,则得到原问题的最优解;反之,则原问题无可行解。


文章转载自:

http://LJCUPd58.shprz.cn
http://ybevGhjy.shprz.cn
http://q5qTJ4kt.shprz.cn
http://rsIAOzco.shprz.cn
http://9VujYEa3.shprz.cn
http://hThLwV51.shprz.cn
http://qHld8Zvn.shprz.cn
http://O3KqI2kn.shprz.cn
http://B7n5XgWI.shprz.cn
http://bHqvqD5y.shprz.cn
http://9Lc0dpOs.shprz.cn
http://zw5NycS7.shprz.cn
http://mHiA8N1v.shprz.cn
http://fDRgeE7g.shprz.cn
http://NAl1fcBl.shprz.cn
http://954Z9Soi.shprz.cn
http://s9a4F88D.shprz.cn
http://cboV4zQ4.shprz.cn
http://oQHNNIPB.shprz.cn
http://r2A8iJJ3.shprz.cn
http://d4qe9GBU.shprz.cn
http://PpvciMIe.shprz.cn
http://I4zwmTCl.shprz.cn
http://TexksP4R.shprz.cn
http://154gGab5.shprz.cn
http://wqYFaKu3.shprz.cn
http://6zE0K5q2.shprz.cn
http://dW955nhq.shprz.cn
http://KD6kJ201.shprz.cn
http://rd6jRDmS.shprz.cn
http://www.dtcms.com/a/89814.html

相关文章:

  • 解决 Ubuntu/Debian 中 `apt-get` 报错 “无法获得锁 /var/lib/dpkg/lock“
  • 歌曲缓存相关功能
  • Qt在IMX6ULL嵌入式系统中图片加载问题排查与解决
  • 多线程—锁策略
  • 去中心化金融
  • 漏洞挖掘---锐明Crocus系统Service.do接口任意文件读取
  • 《数字图像处理》第三章 3.8 基于模糊技术的图像强度变换与空间滤波学习笔记
  • 微积分小白入门:第二章 数列与极限——从困惑到顿悟的奇妙之旅
  • Vue 3中的Provide与Inject
  • stm32f103c8t6使用pwm(DMA)驱动24个ws2812b灯驱动
  • 【探寻C++之旅】第十章:map和set(STL续)
  • 看 MySQL InnoDB 和 BoltDB 的事务实现
  • 3.Excel:快速分析
  • 深入理解现代C++在IT行业中的核心地位与应用实践
  • 在 Windows 上安装 PowerShell 的多种方法与完整指南
  • 【设计模式】策略模式(Strategy Pattern)详解
  • 群体智能优化算法-沙丁鱼群优化算法(Salp Swarm Algorithm (SSA,含Matlab源代码)
  • C# Modbus TCP/IP学习记录
  • 【Unity网络编程知识】使用Socket实现简单UDP通讯
  • 算法 之 矩阵的对角线问题
  • Spring AI Alibaba 工具(Function Calling)使用
  • 2025.3.25总结
  • Java动态代理的使用和安全问题
  • WPS二次开发系列:以自动播放模式打开PPT文档
  • 【第五章】作业
  • MYSQL运维常用SQL
  • 中医五行学说的系统性扩展讲解
  • 计算机控制系统的最小拍控制器设计及仿真分析
  • 【区块链安全 | 第二篇】区块链概念详解
  • 鸿蒙开发:openCustomDialog关闭指定Dialog