单纯形法之大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://www.mzph.cn/bicheng/74518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot集成Debezium监听postgresql变更

1.创建springboot项目引入pom <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>io.debezium</groupI…

报错 standard_init_linux.go:228: exec user process caused: exec format error

docker logs 容器名 报错&#xff1a; standard_init_linux.go:228: exec user process caused: exec format error 或者 standard_init_linux.go:228: exec user process caused: input/output error 排查思路 1、检查源镜像的框架是否正确&#xff0c;是否amd64&#x…

Go 代理爬虫

现在注册&#xff0c;还送15美金注册奖励金 --- 亮数据-网络IP代理及全网数据一站式服务商 使用代理服务器&#xff0c;通过 Colly、Goquery、Selenium 进行网络爬虫的基础示例程序 本仓库包含两个分支&#xff1a; basic 分支包含供 Go Proxy Servers 这篇文章改动的基础代码…

STM32实现智能温控系统(暖手宝):PID 算法 + DS18B20+OLED 显示,[学习 PID 优质项目]

一、项目概述 本文基于 STM32F103C8T6 单片机&#xff0c;设计了一个高精度温度控制系统。通过 DS18B20 采集温度&#xff0c;采用位置型 PID 算法控制 PWM 输出驱动 MOS 管加热Pi膜&#xff0c;配合 OLED 实时显示温度数据。系统可稳定将 PI 膜加热至 40℃&#xff0c;适用于…

neo4j知识图谱常用命令

1. 查看所有节点和关系 如果你想查看图数据库中的所有节点和关系&#xff0c;可以使用以下查询&#xff1a; Cypher 深色版本 MATCH (n)-[r]->(m) RETURN n, r, m n 和 m 表示节点。r 表示两个节点之间的关系。这条命令会返回所有节点及其直接相连的关系。 2. 查看所有节…

从零开始:使用Luatools工具高效烧录Air780EPM核心板项目的完整指南

本文将深入讲解如何使用Luatools工具烧录一个具体的项目到Air780EPM开发板中。如何使用官方推荐的Luatools工具&#xff08;一款跨平台、命令行驱动的烧录利器&#xff09;&#xff0c;通过“环境配置→硬件连接→参数设置→一键烧录”四大步骤&#xff0c;帮助用户实现Air780E…

2024年认证杯SPSSPRO杯数学建模C题(第二阶段)云中的海盐全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 C题 云中的海盐 原题再现&#xff1a; 巴黎气候协定提出的目标是&#xff1a;在2100年前&#xff0c;把全球平均气温相对于工业革命以前的气温升幅控制在不超过2摄氏度的水平&#xff0c;并为1.5摄氏度而努力。但事实上&#xff0c;许多之前的…

大疆上云api介绍

概述 目前对于 DJI 无人机接入第三方云平台,主要是基于 MSDK 开发定制 App,然后自己定义私有上云通信协议连接到云平台中。这样对于核心业务是开发云平台,无人机只是其中一个接入硬件设备的开发者来说,重新基于 MSDK 开发 App 工作量大、成本高,同时还需要花很多精力在无人…

云原生之开源遥测框架OpenTelemetry(在 Gin 框架中使用 OpenTelemetry 进行分布式追踪和监控)

文章目录 云原生之开源遥测框架OpenTelemetry背景什么是可观测性&#xff1f; 什么是 OpenTelemetry&#xff1f;Opentelemetry的主要优势有以下几点&#xff1a;理解分布式链路日志Spans分布式链路 在 Gin 框架中使用 OpenTelemetry 进行分布式追踪和监控0. 整体思路1. 初始化…

【蓝桥杯速成】| 11.回溯 之 子集问题

题目一&#xff1a;子集 问题描述 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例…

Nginx目录结构

Nginx目录结构 ​ Nginx 的安装目录结构可能会因安装方式&#xff08;如使用包管理器、源码编译等&#xff09;和操作系统的不同而有所差异。以下是通过在线安装时&#xff0c;Nginx 默认的目录结构&#xff0c;以及各目录和文件的作用。 yum install nginx查询nginx [rootRo…

2.(vue3.x+vite)使用vue-router

前端技术社区总目录(订阅之前请先查看该博客) 效果预览 路由配置的“/”与“helloWorld”都可以访问到以下内容 http://10.11.0.87:4000/#/ http://10.11.0.87:4000/#/helloWorld 1:安装vue-router npm i vue-router 2:创建router文件 在src的目录下创建router文件夹…

后端返回了 xlsx 文件流,前端怎么下载处理

当后端返回一个 .xlsx 文件流时&#xff0c;前端可以通过 JavaScript 处理这个文件流并触发浏览器下载。 实现步骤 发送请求获取文件流&#xff1a; 使用 fetch 或 axios 等工具向后端发送请求&#xff0c;确保响应类型设置为 blob&#xff08;二进制数据流&#xff09;。 创建…

HTML5拖拽功能教程

HTML5拖拽功能教程 简介 HTML5引入了原生拖放(Drag and Drop)API&#xff0c;使开发者能够轻松实现网页中的拖拽功能&#xff0c;无需依赖第三方库。拖拽功能可以大大提升用户体验&#xff0c;适用于文件上传、列表排序、看板系统等多种交互场景。本教程将带您全面了解HTML拖…

VUE3 路由配置

1.下载 VueRouter 模块 在命令行中输入 yarn add vue-router 2.导⼊相关函数 在自己创建的router/index.js 文件中 import { createRouter, createWebHashHistory } from vue-router 3.创建路由实例 在自己创建的router/index.js 文件中 const theFirstRouter ()>{return…

历史序列影像 Esri的World Imagery Wayback简介

Esri的World Imagery Wayback是一个专注于提供历史卫星影像的在线平台&#xff0c;由全球领先的地理信息系统&#xff08;GIS&#xff09;技术提供商Esri开发。该平台整合了多源卫星影像数据&#xff0c;允许用户回溯特定区域在不同时间点的影像变化&#xff0c;支持时间序列分…

golang结构体与指针类型

结构体与指针类型 指针类型字段 具名字段 举例 package struct_knowledgeimport "fmt"//结构体字段为指针类型 func StructWithPoint(){type Student struct{name *string}var lisa Studentfmt.Printf("赋值前,Student的实例的值%#v\n",lisa)//错误的赋…

NetMizer-日志管理系统-远程命令执行漏洞挖掘

漏洞描述&#xff1a;NetMizer 日志管理系统 cmd.php中存在远程命令执行漏洞&#xff0c;攻击者通过传入 cmd参数即可命令执行 1.fofa搜素语句 title"NetMizer 日志管理系统" 2.漏洞验证 网站页面 验证POC /data/manage/cmd.php?cmdid

Contactile三轴触觉传感器:多维力感赋能机器人抓取

在非结构化环境中&#xff0c;机器人对物体的精准抓取与操作始终面临巨大挑战。传统传感器因无法全面感知触觉参数&#xff08;如三维力、位移、摩擦&#xff09;&#xff0c;难以适应复杂多变的场景。Contactile推出的三轴触觉力传感器&#xff0c;通过仿生设计与创新光学技术…

OpenCV三维解算常用方法C++

如果标定过程是通过OpenCV张正友标定法实现的&#xff0c;得到的内参外参保存在.txt文件中是这样的形式&#xff1a; ① 内参intrinsics.txt&#xff1a; ② 外参extrinsics.txt&#xff1a; 那么可以通过如下方法读取.txt文件获取左右相机内外参&#xff0c;主要包括三维解算…