單純形法之大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.pswp.cn/bicheng/74518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74518.shtml
英文地址,請注明出處:http://en.pswp.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;主要包括三維解算…