【優化論】約束優化算法

在這里插入圖片描述

約束優化算法是一類專門處理目標函數在存在約束條件下求解最優解的方法。為了更好地理解約束優化算法,我們需要了解一些核心概念和基本方法。

約束優化的核心概念

  1. 可行域(Feasible Region)
    • 比喻:想象你在一個園藝場里種植不同種類的植物,但只有特定區域可以種植。可行域就是這些允許種植的區域。
    • 技術細節:可行域是滿足所有約束條件的所有點的集合。若約束條件為 g i ( x ) ≤ 0 g_i(x) \leq 0 gi?(x)0 h j ( x ) = 0 h_j(x) = 0 hj?(x)=0 ,則可行域可以表示為 { x ∣ g i ( x ) ≤ 0 , h j ( x ) = 0 } \{ x \, | \, g_i(x) \leq 0, \, h_j(x) = 0 \} {xgi?(x)0,hj?(x)=0}
  2. 拉格朗日乘子法(Lagrange Multipliers)
    • 比喻:假設你在調整種植區域時,既想保持植物健康生長(目標函數),又要遵循園藝場的規定(約束條件)。拉格朗日乘子法就像在這兩者之間找到一個平衡點
    • 技術細節:拉格朗日乘子法引入拉格朗日乘子 λ \lambda λ ,構造拉格朗日函數 L ( x , λ ) = f ( x ) + λ g ( x ) L(x, \lambda) = f(x) + \lambda g(x) L(x,λ)=f(x)+λg(x) 。通過求解 ? L = 0 \nabla L = 0 ?L=0 可以找到約束優化問題的解。

常用的約束優化算法

  1. 罰函數法(Penalty Method)
    • 比喻:罰函數法就像在種植區域外種植植物時會受到罰款,這樣你會盡量保持在可行域內
    • 技術細節:將約束條件轉換為目標函數的一部分,加上一個懲罰項,使得在違反約束條件時目標函數的值變得很大。例如,對于約束 g ( x ) ≤ 0 g(x) \leq 0 g(x)0 ,構造目標函數 f ( x ) + 1 2 ρ max ? ( 0 , g ( x ) ) 2 f(x) + \frac{1}{2}\rho \max(0, g(x))^2 f(x)+21?ρmax(0,g(x))2 ,其中 ρ \rho ρ 是罰參數。
  2. 障礙函數法(Barrier Method)
    • 比喻:障礙函數法就像在可行域邊界設置了障礙物,防止你越過邊界。
    • 技術細節:引入障礙函數 ? ( x ) \phi(x) ?(x) ,當 x x x 靠近約束邊界時,障礙函數值趨于無窮大。例如,對于約束 g ( x ) ≤ 0 g(x) \leq 0 g(x)0 ,構造目標函數 f ( x ) ? μ log ? ( ? g ( x ) ) f(x) - \mu \log(-g(x)) f(x)?μlog(?g(x)) ,其中 μ \mu μ 是障礙參數。
  3. 拉格朗日乘子法(Lagrangian Method)
    • 比喻:拉格朗日乘子法就像同時調整種植區域和遵守規定的權重,使兩者達到平衡。
    • 技術細節:構造拉格朗日函數 L ( x , λ , ν ) = f ( x ) + ∑ λ i g i ( x ) + ∑ ν j h j ( x ) L(x, \lambda, \nu) = f(x) + \sum \lambda_i g_i(x) + \sum \nu_j h_j(x) L(x,λ,ν)=f(x)+λi?gi?(x)+νj?hj?(x) ,通過求解 ? L = 0 \nabla L = 0 ?L=0 可以找到問題的鞍點,從而求解優化問題。

實例一

讓我們通過一個實例來具體了解約束優化的過程:

假設我們要最小化函數 f ( x ) = x 1 2 + x 2 2 f(x) = x_1^2 + x_2^2 f(x)=x12?+x22? ,但有約束 g ( x ) = x 1 + x 2 ? 1 ≤ 0 g(x) = x_1 + x_2 - 1 \leq 0 g(x)=x1?+x2??10

  1. 罰函數法
    • 構造罰函數: P ( x ) = x 1 2 + x 2 2 + 1 2 ρ max ? ( 0 , x 1 + x 2 ? 1 ) 2 P(x) = x_1^2 + x_2^2 + \frac{1}{2}\rho \max(0, x_1 + x_2 - 1)^2 P(x)=x12?+x22?+21?ρmax(0,x1?+x2??1)2
    • x 1 + x 2 ≤ 1 x_1 + x_2 \leq 1 x1?+x2?1 時,無懲罰項;當 x 1 + x 2 > 1 x_1 + x_2 > 1 x1?+x2?>1 時,有懲罰項,導致目標函數值增加。【目標是使目標函數最小】
  2. 障礙函數法
    • 構造障礙函數: B ( x ) = x 1 2 + x 2 2 ? μ log ? ( 1 ? x 1 ? x 2 ) B(x) = x_1^2 + x_2^2 - \mu \log(1 - x_1 - x_2) B(x)=x12?+x22??μlog(1?x1??x2?)
    • x 1 + x 2 x_1 + x_2 x1?+x2? 接近 1 1 1 時, ? log ? ( 1 ? x 1 ? x 2 ) -\log(1 - x_1 - x_2) ?log(1?x1??x2?) 的值趨于無窮大,使得目標函數值增大。
  3. 拉格朗日乘子法
    • 構造拉格朗日函數: L ( x , λ ) = x 1 2 + x 2 2 + λ ( x 1 + x 2 ? 1 ) L(x, \lambda) = x_1^2 + x_2^2 + \lambda (x_1 + x_2 - 1) L(x,λ)=x12?+x22?+λ(x1?+x2??1)
    • 求解 ? L = 0 \nabla L = 0 ?L=0 得到: 2 x 1 + λ = 0 2x_1 + \lambda = 0 2x1?+λ=0 2 x 2 + λ = 0 2x_2 + \lambda = 0 2x2?+λ=0 x 1 + x 2 ? 1 = 0 x_1 + x_2 - 1 = 0 x1?+x2??1=0
    • 解得 x 1 = x 2 = 1 2 , λ = ? 1 x_1 = x_2 = \frac{1}{2} ,\lambda = -1 x1?=x2?=21?λ=?1

實例二

我們需要最小化函數 f ( x , y ) = x + 3 y f(x, y) = x + \sqrt{3}y f(x,y)=x+3 ?y ,并且滿足約束條件 x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1

罰函數法

  1. 構造罰函數
    首先,我們將約束條件轉換為一個懲罰項。對于約束條件 x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1 ,我們可以構造以下罰函數: P ( x , y ) = ( x 2 + y 2 ? 1 ) 2 P(x, y) = (x^2 + y^2 - 1)^2 P(x,y)=(x2+y2?1)2

    這里,我們使用平方形式來確保任何違約束的情況都會被顯著地懲罰

  2. 構造新的目標函數
    將懲罰項加入到目標函數中,形成新的目標函數: F ( x , y ) = x + 3 y + ρ 2 ( x 2 + y 2 ? 1 ) 2 F(x, y) = x + \sqrt{3}y + \frac{\rho}{2} (x^2 + y^2 - 1)^2 F(x,y)=x+3 ?y+2ρ?(x2+y2?1)2

    其中, ρ \rho ρ 是一個正的罰參數,用來調整懲罰項的權重。

  3. 求解優化問題
    我們的目標是找到使新的目標函數 F ( x , y ) F(x, y) F(x,y) 最小的 x x x y y y 值。

在這里插入圖片描述

二次罰函數法算法詳解

在這里插入圖片描述

基本概念

  1. 目標函數:我們想最小化的函數。例如, f ( x , y ) = x + 3 y f(x, y) = x + \sqrt{3}y f(x,y)=x+3 ?y
  2. 約束條件:限制條件,必須滿足。例如, x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1

罰函數法通過將約束條件轉換為懲罰項,加入到目標函數中,從而形成新的目標函數。這個新目標函數在每次迭代時會逐步增加懲罰力度,使得解最終滿足約束條件。

步驟解析

第一步:初始化

  1. 給定初始罰參數 σ 1 > 0 \sigma_1 > 0 σ1?>0
    • 這是初始的懲罰參數。懲罰參數決定了違反約束條件時受到的懲罰程度。
    • 例如,設定 σ 1 = 1 \sigma_1 = 1 σ1?=1
  2. 設定初始點 x 0 x^0 x0
    • 這是我們開始優化的初始猜測值。
    • 例如, x 0 = [ 0.5 , 0.5 ] x^0 = [0.5, 0.5] x0=[0.5,0.5]
  3. 設定迭代次數 k ← 1 k \leftarrow 1 k1
    • 這是一個計數器,用于跟蹤迭代次數。
  4. 設定懲罰因子增長系數 ρ > 1 \rho > 1 ρ>1
    • 這是一個用來增加懲罰參數的因子,每次迭代后懲罰參數會乘以這個因子。
    • 例如,設定 ρ = 10 \rho = 10 ρ=10

第二步:迭代過程

  1. while 循環
    • 這個循環會持續運行,直到滿足某個收斂準則(例如,目標函數值變化很小,或達到最大迭代次數)。
  2. 以當前點為初始點,求解新的點
    • 我們要最小化新的目標函數 P E ( x , σ k ) P_E(x, \sigma_k) PE?(x,σk?) ,找到新的 x k + 1 x^{k+1} xk+1

    • 新的目標函數形式為:

      P E ( x , σ k ) = f ( x ) + σ k 2 ( x 2 + y 2 ? 1 ) 2 P_E(x, \sigma_k) = f(x) + \frac{\sigma_k}{2} (x^2 + y^2 - 1)^2 PE?(x,σk?)=f(x)+2σk??(x2+y2?1)2

    • 使用數值優化方法(如梯度下降法)來求解這個新的目標函數。

  3. 更新罰參數
    • 計算新的罰參數 σ k + 1 = ρ σ k \sigma_{k+1} = \rho \sigma_k σk+1?=ρσk?
  4. 更新迭代次數
    • k ← k + 1 k \leftarrow k + 1 kk+1
  5. 結束迭代
    • 當滿足收斂準則時,結束 while 循環。

詳細解釋與實例

初始化

我們設定初始參數:

σ 1 = 1 , x 0 = [ 0.5 , 0.5 ] , ρ = 10 , k = 1 \sigma_1 = 1, \quad x^0 = [0.5, 0.5], \quad \rho = 10, \quad k = 1 σ1?=1,x0=[0.5,0.5],ρ=10,k=1

迭代過程

假設我們要最小化以下目標函數:

f ( x , y ) = x + 3 y f(x, y) = x + \sqrt{3}y f(x,y)=x+3 ?y

并且滿足約束條件:

x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1

第一次迭代

  1. 構造新的目標函數

    P E ( x , σ 1 ) = x + 3 y + 1 2 σ 1 ( x 2 + y 2 ? 1 ) 2 P_E(x, \sigma_1) = x + \sqrt{3}y + \frac{1}{2} \sigma_1 (x^2 + y^2 - 1)^2 PE?(x,σ1?)=x+3 ?y+21?σ1?(x2+y2?1)2

    其中 σ 1 = 1 \sigma_1 = 1 σ1?=1

  2. 求解新目標函數
    使用數值優化方法找到最小化 P E ( x , 1 ) P_E(x, 1) PE?(x,1) x x x y y y 值。
    假設我們找到新的點 x 1 x^1 x1

  3. 更新罰參數

    σ 2 = ρ σ 1 = 10 × 1 = 10 \sigma_2 = \rho \sigma_1 = 10 \times 1 = 10 σ2?=ρσ1?=10×1=10

  4. 更新迭代次數

    k ← 2 k \leftarrow 2 k2

第二次迭代

  1. 構造新的目標函數

    P E ( x , σ 2 ) = x + 3 y + 1 2 σ 2 ( x 2 + y 2 ? 1 ) 2 P_E(x, \sigma_2) = x + \sqrt{3}y + \frac{1}{2} \sigma_2 (x^2 + y^2 - 1)^2 PE?(x,σ2?)=x+3 ?y+21?σ2?(x2+y2?1)2

    其中 σ 2 = 10 \sigma_2 = 10 σ2?=10

  2. 求解新目標函數
    使用數值優化方法找到最小化 P E ( x , 10 ) P_E(x, 10) PE?(x,10) x x x y y y 值。
    假設我們找到新的點 x 2 x^2 x2

  3. 更新罰參數

    σ 3 = ρ σ 2 = 10 × 10 = 100 \sigma_3 = \rho \sigma_2 = 10 \times 10 = 100 σ3?=ρσ2?=10×10=100

  4. 更新迭代次數

    k ← 3 k \leftarrow 3 k3

這個過程不斷重復,直到滿足收斂準則為止。

什么是收斂準則

收斂準則是用來決定優化算法何時停止迭代的標準。常見的收斂準則包括以下幾種:

  1. 目標函數值變化很小
    • 如果在連續的迭代中,目標函數的值變化很小(小于某個閾值),則認為算法已收斂,可以停止迭代。
    • 例如,設定閾值為 ? \epsilon ?,如果 ∣ f ( x k + 1 ) ? f ( x k ) ∣ < ? |f(x^{k+1}) - f(x^k)| < \epsilon f(xk+1)?f(xk)<?,則停止迭代。
  2. 梯度值很小
    • 如果目標函數的梯度(或導數)值很小,表示已經到達了極值點附近,則可以停止迭代。
    • 例如,如果 ∥ ? f ( x k ) ∥ < ? \|\nabla f(x^k)\| < \epsilon ∥?f(xk)<?,則停止迭代。
  3. 迭代次數達到上限
    • 如果迭代次數達到了預先設定的最大迭代次數,則停止迭代。
    • 例如,設定最大迭代次數為 N N N,如果 k ≥ N k \geq N kN,則停止迭代。

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

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

相關文章

基于機器學習的永磁同步電機矢量控制策略-高分資源-下載可用!

基于機器學習的永磁同步電機矢量控制策略 優勢 訓練了RL-Agent&#xff0c;能夠提高電機在非線性負載下的性能。 部分程序 仿真結果 轉矩估計及dq軸電流。 代碼有償&#xff0c;50&#xff0c;需要的可以聯系。

數學建模算法目標規劃

在人們的生產實踐中&#xff0c;經常會遇到如何利用現有資源來安排生產&#xff0c;以取得最大經濟 效益的問題。此類問題構成了運籌學的一個重要分支—數學規劃&#xff0c;而線性規劃(Linear Programming 簡記 LP)則是數學規劃的一個重要分支。特別是在計算機能處理成千上萬個…

底層軟件 | STM32啟動分析之main函數是怎樣跑起來的

應屆生面試&#xff0c;基本上嵌入式一般都是基于32的項目&#xff0c;記得我當年面大疆的就是有這個題目。 1、STM32啟動規則 STM32根據boot0和boot1的電平決定啟動位置&#xff0c;boot00時從主Flash啟動&#xff0c;即0x08000000地址啟動。 按照spec&#xff0c;M3核的中斷…

構建工程化:多種不同的工程體系如何編寫MakeFile

源碼分析 核心MakeFile 這個 Makefile 是一個復雜的構建腳本&#xff0c;用于管理和構建一個大型項目。它包括多個目標、條件判斷和遞歸調用 make 命令來處理多個子項目和子目錄。讓我們逐部分進行詳細解析。 偽目標和變量定義 .PHONY: all clean install build test init.…

依賴注入的優點、解決的問題以及其底層原理和邏輯

依賴注入&#xff08;Dependency Injection, DI&#xff09;是一種設計模式&#xff0c;用于實現控制反轉&#xff08;Inversion of Control, IoC&#xff09;。它通過將對象的依賴關系從類內部轉移到外部配置或注入&#xff0c;從而提高代碼的可維護性、可測試性和可擴展性。以…

使用Spring Boot和Apache Camel集成第三方服務

使用Spring Boot和Apache Camel集成第三方服務 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將探討如何利用Spring Boot和Apache Camel來集成第三方服…

pycharm如何使用jupyter

目錄 配置jupyter新建jupyter文件別人寫的方法&#xff08;在pycharm種安裝&#xff0c;在網頁中使用&#xff09; pycharm專業版 配置jupyter 在pycharm終端啟動一個conda虛擬環境&#xff0c;輸入 conda install jupyter會有很多前置包需要安裝&#xff1a; 新建jupyter…

一文理清LK光流

舉出幾種光流方法&#xff0c;說明LK光流的建模方式&#xff1f; 光流方法是用于估計圖像序列中像素點運動的技術&#xff0c;廣泛應用于計算機視覺和視頻處理領域。以下是幾種常見的光流方法&#xff1a; Lucas-Kanade (LK) 方法&#xff1a; 一種基于局部窗口的光流估計方法…

代理IP在未來將面臨哪些挑戰?

今天我們來聊聊代理IP在未來可能會面臨的挑戰。雖然代理IP技術目前應用廣泛&#xff0c;但隨著科技的發展和網絡環境的變化&#xff0c;代理IP也將面臨一些新的挑戰。讓我們一起來看看這些挑戰是什么吧&#xff01; 1. 更嚴格的網絡封鎖和檢測 現代社會各行各業都在飛速發展&…

可變參數 Collections 不可變集合 Stream流

目錄 1.可變參數&#xff1a; 2.Collections: 3.不可變集合&#xff1a; 4.Stream流: 1、什么是流 2、如何生成流 1.單列集合獲取Stream流 2.雙列集合獲取Stream流 3.數組獲取Stream流&#xff1a; 4.一堆零散數據&#xff1a; Stream接口中的靜態方法 3.Stream流的…

解決分布式環境下session共享問題

在分布式環境下&#xff0c;session會存在兩個問題 第一個問題:不同域名下&#xff0c;瀏覽器存儲的jsessionid是沒有存儲的。比如登錄時認證服務auth.gulimall.com存儲了session&#xff0c;但是搜索服務search.gulimall.com是沒有這個session的&#xff1b; 第二個問題&…

基于SpringBoot的校園臺球廳人員與設備管理系統

本系統是要設計一個校園臺球廳人員與設備管理系統&#xff0c;這個系統能夠滿足校園臺球廳人員與設備的管理及用戶的校園臺球廳人員與設備管理功能。系統的主要功能包括首頁、個人中心、用戶管理、會員賬號管理、會員充值管理、球桌信息管理、會員預約管理、普通預約管理、留言…

【SSRF】

SSRF &#xff08;Server-Side Request Forgery 服務端請求偽造&#xff09; 文章目錄 0x01 是什么&#xff1f;0x02 怎么判斷是否存在SSRF漏洞&#xff1f;0x03 防御0x04 繞過手段 0x01 是什么&#xff1f; 是什么&#xff1f; ??答&#xff1a;攻擊者構造請求&#xff0c;…

w3wp.exe 中發生未處理的 Microsoft ,NETFramework 異常。

&#x1f3c6;本文收錄于「Bug調優」專欄&#xff0c;主要記錄項目實戰過程中的Bug之前因后果及提供真實有效的解決方案&#xff0c;希望能夠助你一臂之力&#xff0c;幫你早日登頂實現財富自由&#x1f680;&#xff1b;同時&#xff0c;歡迎大家關注&&收藏&&…

Spring 6.1.10版本源碼編譯

每篇一句 我們對時間的感知其實非常主觀&#xff0c;我們越習慣于我們的生活方式&#xff0c;生活里面的新鮮感就越少&#xff0c;我們對時間 的感知就越快&#xff0c;生命就越短。 1.源碼下載 進入Spring官網 https://spring.io/ 按照上圖步驟進入如下Spring Framework鏈…

羅劍鋒的C++實戰筆記學習(二):容器、算法庫、多線程

4、容器 1&#xff09;、容器的通用特性 所有容器都具有的一個基本特性&#xff1a;它保存元素采用的是值&#xff08;value&#xff09;語義&#xff0c;也就是說&#xff0c;容器里存儲的是元素的拷貝、副本&#xff0c;而不是引用 容器操作元素的很大一塊成本就是值的拷貝…

RAG 工業落地方案框架(Qanything、RAGFlow、FastGPT、智譜RAG)細節比對!CVPR自動駕駛最in挑戰賽賽道,全球冠軍被算力選手奪走了

RAG 工業落地方案框架&#xff08;Qanything、RAGFlow、FastGPT、智譜RAG&#xff09;細節比對&#xff01;CVPR自動駕駛最in挑戰賽賽道&#xff0c;全球冠軍被算力選手奪走了。 本文詳細比較了四種 RAG 工業落地方案 ——Qanything、RAGFlow、FastGPT 和智譜 RAG&#xff0c;重…

git push之后回滾到某個版本

背景 因為粗心在主分支上修改了代碼&#xff0c;push了上去&#xff0c;污染了主分支&#xff0c;希望將主分支之后的修改回滾&#xff0c;包括提交記錄&#xff0c;就是遠程的記錄中回到希望回到的版本&#xff0c;保持干凈。 git push -f 可以做到&#xff0c;會沖掉所有的…

SwiftUI 6.0(iOS 18.0)滾動視圖新增的滾動階段(Scroll Phase)監聽功能趣談

何曾幾時&#xff0c;在 SwiftUI 開發中的禿頭小碼農們迫切需要一種能夠讀取當前滾動狀態的方法。 在過去&#xff0c;他們往往需要借助于 UIKit 的神秘力量。不過這一切在 SwiftUI 6.0 中已成“滄海桑田”。 在本篇博文中&#xff0c;您將學到如下內容&#xff1a; 1. Scroll…

一份適合新手的軟件測試練習項目

最近&#xff0c;不少讀者托我找一個能實際練手的測試項目。開始&#xff0c;我覺得這是很簡單的一件事&#xff0c;但當我付諸行動時&#xff0c;卻發現&#xff0c;要找到一個對新手友好的練手項目&#xff0c;著實困難。 我翻了不下一百個web網頁&#xff0c;包括之前推薦練…