從代碼學習數學優化算法 - 拉格朗日松弛 Python版

文章目錄

  • 前言
  • 1. 問題定義 (Problem Definition)
  • 2. 拉格朗日松弛 (Lagrangian Relaxation)
  • 3. 拉格朗日對偶問題 (Lagrangian Dual)
  • 4. 次梯度優化 (Subgradient Optimization)
  • 5. Python 代碼實現
    • 導入庫和問題定義
    • 輔助函數:求解拉格朗日松弛子問題
    • 次梯度優化主循環
    • 結果展示與繪圖
  • 總結


前言

在運籌學和組合優化的世界里,我們經常遇到一些“棘手”的問題,這些問題因為其內在的組合復雜性(例如整數變量、非線性約束等)而難以直接求解。拉格朗日松弛(Lagrangian Relaxation)是一種強大的技術,它通過將這些“復雜”約束暫時“松弛”掉,并將其以懲罰項的形式移入目標函數,從而將原問題轉化為一個相對容易求解的子問題(拉格朗日松弛子問題)。

這個子問題的最優解為原問題提供了一個界限(對于最大化問題是上界,最小化問題是下界)。然后,通過迭代調整與被松弛約束相關的拉格朗日乘子,我們可以逐步逼近這個界限的最優值,這個過程就是求解拉格朗日對偶問題。

本篇博客將通過一個具體的0-1整數規劃例子,結合 Python 代碼實現,帶您一步步了解拉格朗日松弛的基本原理、子問題的求解以及經典的次梯度優化方法來更新拉格朗日乘子。讓我們從代碼中學習,揭開拉格朗日松弛的神秘面紗!

完整代碼:下載鏈接

1. 問題定義 (Problem Definition)

我們將考慮以下形式的優化問題:
最大化 c T x c^T x cTx
約束于:
A x ≤ b Ax \leq b Axb (復雜約束)
D x ≤ e Dx \leq e Dxe (簡單約束,例如 x i ∈ { 0 , 1 } x_i \in \{0,1\} xi?{0,1} x x x 屬于某個單純形)

我們感興趣的是那些如果忽略 A x ≤ b Ax \leq b Axb 約束(或將其整合到目標函數中)就很容易解決的問題。例如,如果 D x ≤ e Dx \leq e Dxe 表示 x i ∈ { 0 , 1 } x_i \in \{0,1\} xi?{0,1},那么問題就很容易解決。

這里,我們考慮以下 0-1 整數規劃問題(示例):
最大化 12 x 1 + 8 x 2 + 7 x 3 + 6 x 4 + 10 x 5 + 5 x 6 12x_1 + 8x_2 + 7x_3 + 6x_4 + 10x_5 + 5x_6 12x1?+8x2?+7x3?+6x4?+10x5?+5x6?
約束于:
5 x 1 + 2 x 2 + 3 x 3 + 4 x 4 + x 5 + 2 x 6 ≤ 7 5x_1 + 2x_2 + 3x_3 + 4x_4 + x_5 + 2x_6 \leq 7 5x1?+2x2?+3x3?+4x4?+x5?+2x6?7 (約束1)
x 1 + x 2 ≤ 1 x_1 + x_2 \leq 1 x1?+x2?1 (約束2)
x 3 + x 4 ≤ 1 x_3 + x_4 \leq 1 x3?+x4?1 (約束3)
x 5 + x 6 ≤ 1 x_5 + x_6 \leq 1 x5?+x6?1 (約束4)
x i ∈ { 0 , 1 } x_i \in \{0,1\} xi?{0,1} 對于 i = 1 , . . . , 6 i = 1, ..., 6 i=1,...,6

在這個問題中,我們可以將約束 (1) 視為“復雜”約束,而約束 (2)-(4) 以及二元變量約束可以被視為“簡單”約束。請注意,這個問題足夠小,可以用標準求解器輕松解決。然而,它可以用來說明拉格朗日松弛的過程。

2. 拉格朗日松弛 (Lagrangian Relaxation)

對于上述問題,我們將復雜約束 A x ≤ b Ax \leq b Axb 松弛掉。這意味著我們將它們從約束集合中移除,并將它們(以懲罰的形式)添加到目標函數中。為此,我們為每個被松弛的約束引入一個拉格朗日乘子 λ i ≥ 0 \lambda_i \geq 0 λi?0

由此產生的拉格朗日(松弛)子問題 L ( λ ) L(\lambda) L(λ) 定義如下:
L ( λ ) = max ? { c T x + λ T ( b ? A x ) } L(\lambda) = \max \{c^T x + \lambda^T (b - Ax)\} L(λ)=max{cTx+λT(b?Ax)}
約束于:
D x ≤ e Dx \leq e Dxe
x i ∈ { 0 , 1 } x_i \in \{0,1\} xi?{0,1}

對于任意給定的 λ ≥ 0 \lambda \geq 0 λ0 L ( λ ) L(\lambda) L(λ) 的最優值是原問題最優值的上界。

對于我們的示例問題,如果我們松弛約束 (1),拉格朗日乘子 λ 1 \lambda_1 λ1? (簡寫為 λ \lambda λ,因為只有一個) 必須是非負的。子問題 L ( λ ) L(\lambda) L(λ) 變為:
L ( λ ) = max ? { ( 12 x 1 + 8 x 2 + 7 x 3 + 6 x 4 + 10 x 5 + 5 x 6 ) + λ ( 7 ? ( 5 x 1 + 2 x 2 + 3 x 3 + 4 x 4 + x 5 + 2 x 6 ) ) } L(\lambda) = \max \{ (12x_1 + 8x_2 + 7x_3 + 6x_4 + 10x_5 + 5x_6) + \lambda(7 - (5x_1 + 2x_2 + 3x_3 + 4x_4 + x_5 + 2x_6)) \} L(λ)=max{(12x1?+8x2?+7x3?+6x4?+10x5?+5x6?)+λ(7?(5x1?+2x2?+3x3?+4x4?+x5?+2x6?))}
約束于:
x 1 + x 2 ≤ 1 x_1 + x_2 \leq 1 x1?+x2?1

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83855.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83855.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83855.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

密碼學實驗

密碼學實驗二 一、實驗目的(本次實驗所涉及并要求掌握的知識點) 掌握RSA算法的基本原理并根據給出的RSA算法簡單的實現代碼源程序,以及能夠使用RSA對文件進行加密。掌握素性測試的基本原理,并且會使用Python進行簡單的素性測試以及初步理解…

力扣面試150題-- 從中序與后序遍歷序列構造二叉樹

Day 44 題目描述 思路 這題類似與昨天那題,首先來復習一下,后序遍歷,對于后序遍歷每一個元素都滿足以下規律: (左子樹)(右子樹)(根),那么我們直…

2區組的2水平析因實驗的混區設計

本文是實驗設計與分析(第6版,Montgomery著傅玨生譯)第7章2k析因的區組化和混區設計第7.4節的python解決方案。本文盡量避免重復書中的理論,著于提供python解決方案,并與原書的運算結果進行對比。您可以從Detail 下載實驗設計與分析…

反向傳播算法——矩陣形式遞推公式——ReLU傳遞函數

總結反向傳播算法。 來源于https://udlbook.github.io/udlbook/,我不明白初始不從 x 0 \boldsymbol{x}_0 x0?開始,而是從 z 0 \boldsymbol{z}_0 z0?開始,不知道怎么想的。 考慮一個深度神經網絡 g [ x i , ? ] g[\boldsymbol{x}_i, \bold…

2025年PMP 學習二十三 16章 高級項目管理

2025年PMP 學習二十三 16章 高級項目管理 文章目錄 2025年PMP 學習二十三 16章 高級項目管理高級項目管理戰略管理戰略管理的組成要素:企業戰略轉化為戰略行動的階段: 組織戰略類型戰略組織類型組織級項目管理OPM(公司項目管理) 組…

Journal of Real-Time Image Processing 投稿過程

投稿要求雙欄12頁以內(包括參考文獻),這個排版要求感覺不是很嚴格,我當時就是用普通的雙欄的格式去拍的版,然后就提交了,也沒單獨去下載模版。 投稿過程 12.12 Submission received 12.12 Submission is under technical check 1…

t檢驗詳解:原理、類型與應用指南

t檢驗詳解:原理、類型與應用指南 t檢驗(t-test)是一種用于比較兩組數據均值是否存在顯著差異的統計方法,適用于數據近似正態分布且滿足方差齊性的場景。以下從核心原理、檢驗類型、實施步驟到實際應用進行系統解析。 一、t檢驗的…

Web4X·AI實業未來家庭普及產品矩陣

Web4XAI實業未來家庭普及產品矩陣 > 打造一個“AI能干活、人更自由”的超級生活系統(web4-web4.0) 一、AI生活服務類 1、代表產品: ? AI語音助手(對話、提醒、天氣、家庭調度) ? AI陪護機器人(老…

Centos上搭建 OpenResty

一、OpenResty簡介 OpenResty 是基于 Nginx 的擴展平臺,完全兼容 Nginx 的核心功能(如 HTTP 服務和反向代理),同時通過內嵌 LuaJIT 支持,允許開發者用 Lua 腳本靈活擴展業務邏輯。它簡化了動態邏輯的實現。 二、安裝…

項目管理進階:基于IPD流程的項目管理部分問題及建議書【附全文閱讀】

該文檔主要探討了研發項目管理中存在的問題及改進建議。指出項目組織、項目計劃、項目監控等方面存在的問題,并給出了相應的設計要點。建議建立跨部門、全流程的項目計劃體系,加強風險管理,引入科學的估計方法,建立項目歷史數據積…

JVM之GC常見的垃圾回收器

收集器適用區域特點適用場景Serial新生代單線程,STW(Stop-The-World)客戶端小應用Parallel Scavenge新生代多線程,吞吐量優先后臺計算任務ParNew新生代Serial 的多線程版配合 CMS 使用CMS老年代并發標記,低延遲響應優先…

免費私有化部署! PawSQL社區版,超越EverSQL的企業級SQL優化工具面向個人開發者開放使用了

1. 概覽 1.1 快速了解 PawSQL PawSQL是專注于數據庫性能優化的企業級工具,解決方案覆蓋SQL開發、測試、運維的整個流程,提供智能SQL審核、查詢重寫優化及自動化巡檢功能,支持MySQL、PostgreSQL、Oracle、SQL Server等主流數據庫及達夢、金倉…

HTTP/HTTPS與SOCKS5協議在隧道代理中的兼容性設計解析

目錄 引言 一、協議特性深度對比 1.1 協議工作模型差異 1.2 隧道代理適配難點 二、兼容性架構設計 2.1 雙協議接入層設計 2.2 統一隧道內核 三、關鍵技術實現 3.1 協議轉換引擎 3.1.1 HTTP→SOCKS5轉換 3.1.2 SOCKS5→HTTP轉換 3.2 連接管理策略 3.2.1 智能連接池 …

3DGS——基礎知識學習筆記

1.什么是3D高斯潑濺(3D Gaussian Splatting)? 目標:從一組稀疏的3D點(比如通過相機或激光雷達采集的點云)重建出高質量的3D場景,并支持實時渲染。 核心思想:用許多“3D高斯分布”&…

【C++】不推薦使用的std::allocator<void>

文章目錄 不推薦使用的std::allocator<void>1. 核心區別2. 成員函數對比(1) allocate 和 deallocate(2) construct 和 destroy 3. 設計動機(1) std::allocator<T>(2) std::allocator<void> 4. 使用場景示例(1) std::allocator<int>(2) std::allocator&…

Go 語言云原生微服務全棧實戰:Docker 鏡像優化、K8s 編排與 Istio 流量治理

本系列文章將以 Go 語言為主導開發語言&#xff0c;系統性地講解如何從零構建一個基于微服務架構的應用系統&#xff0c;涵蓋以下核心模塊&#xff1a; 使用 Go 構建高性能微服務構建精簡且高效的 Docker 鏡像利用 Kubernetes 進行微服務編排與部署通過 Istio 實現微服務的流量…

windows下authas調試tomcat

一般情況下&#xff0c;我們只需要輸入以下代碼 java -jar authas.jar調試tomcat時需要加上進程號 java -jar authas.jar <PID> 此外&#xff0c;如果你使用的是 Java 11 或更高版本&#xff0c;你需要添加 --add-opens 參數&#xff0c;以便 Arthas 能夠訪問 JVM 的內…

01_springboot中bean的生命周期

文章目錄 bean的生命周期1. Bean定義階段2. Bean實例化階段3. 屬性賦值階段4. 初始化階段5. 使用階段6. 銷毀階段 bean的生命周期 在Spring Boot中&#xff0c;Bean的生命周期包括定義、實例化、屬性賦值、初始化、使用和銷毀等階段。下面我將詳細解釋這些階段&#xff0c;并提…

Oracle基礎知識

目錄 1.別名的使用 2.AND的優先級高于OR 3.where后面可以接別名&#xff0c;order by后面不可以 4.Oracle中SQL的執行順序(重點) 5.dual萬用表 6.是否區分大小寫 7.Oracle常用數據類型 8.Oracle常用函數 (1)length字符、lengthb字節和cast強制類型轉換 (2)數據類型轉…

React 播客專欄 Vol.13|樣式不難搞,Tailwind CSS 與 SVG 實戰入門

&#x1f44b; 歡迎回到《前端達人 React 播客書單》第 13 期&#xff08;正文內容為學習筆記摘要&#xff0c;音頻內容是詳細的解讀&#xff0c;方便你理解&#xff09;&#xff0c;請點擊下方收聽 視頻版&#xff1a; 文字版&#xff1a; 今天我們進入樣式化的實戰環節&…