基於MATLAB環境下實現最優化方法

2021-08-08 03:31:04 字數 4219 閱讀 8316

——阻尼牛頓法

1 優化設計法

優化設計(optimal design)是現代先進的設計方法,這種設計方法是把數學規劃理論與計算方法應用於實際設計中,按照預定的目標,借助計算機的運算尋求最優設計方案的有關引數,從而獲得最好的技術經濟效果。

優化設計反映出人們對於設計規律這一客觀世界認識的深化。設計上的「最優值」是指一定條件影響下所能得到的最佳設計值。最優值是乙個相對的概念,在大多數的情況下,可以用最大值或最小值來表示。

概括起來,優化設計的工作包括以下兩部分內容:

(1)將實際的設計問題的物理模型抽象為數學模型(用數學公式來表示)。建立數學模型時要選取設計變數,列出目標函式,並且給出約束條件。目標函式是設計問題所需求的最優指標與設計變數之間的函式關係式。

(2)選取適當的最優化方法,求解數學模型。也可歸結為在給定的條件(即約束條件)下,求出目標函式的極值或者最優值問題。

最優化問題的一般形式為:

其中為決策變數,f (x)為目標函式,為約束集或可行域。如果,則上述問題稱為無約束最優化問題,否則,稱為約束最優化問題。

對於無約束最優化問題,也已經提出了不少數值求解方法。例如共扼梯度法、牛頓法、guass牛頓法、牛頓型方法、擬牛頓法、非精確牛頓法、廣義擬牛頓法等。

2 牛頓法與阻尼牛頓法

牛頓法是求解無約束優化問題最古老的演算法之一。但到目前為止,它的改進形式仍不失為最有效的演算法之一,因為它最大的優點是收斂速度比較快。

由於乙個函式在一點附近的性態與二次函式很接近,所以往往通過建立二次摸型來構造有效的演算法,最直接而自然的二次模型,顯然就是它的泰勒展開式中只到二次項的部分。由此,牛頓法的基本思想是:

設已知f (x)的極小點x*的乙個近似,在附近將f(x)作泰勒展開有:

其中:若正定,則有極小點存在,設其為,並令

便得到f (x)的極小點的乙個新的近似,由於為二次凸函式,它的極小點很容易求,事實上,令

則有:當用迭代式時,且其中由上式定義時,這種迭代便稱為牛頓迭代,而演算法稱為牛頓法。

由牛頓法的匯出過程可知,牛頓法面臨兩個主要的困難。一是hessian矩陣不正定。這時二次模型不一定有極小點,甚至沒有平穩點。

當不定時,二次模型函式是無界的。為了克服這一困難,人們提出了若干修正措施。goldstein和price提出一種修正牛頓辦法:

當非正定時,採用最速下降方向。giu和murray 提出了乙個數值穩定的處理方法,從的修改cholesky分解形式。

牛頓法的另一困難是,它在實際執行的過程中,每次迭代都需要精確計算hessian矩陣的值,這就需要大量的計算,有時甚至會導致數值實驗的失敗。後來,有人提出能否定義一種牛頓型方法來避免每次迭代都計算hessian陣的值。這樣就導致了人們對經典牛頓法的修正。

其中阻尼牛頓法(修正牛頓法)具有一定的代表性。其基本思想是:為了改變原始牛頓法定步長的搜尋方式,以牛頓方向為搜尋方向進行一維最優化搜尋,求該方向上的最優步長因子,即迭代式改為:

當用迭代式時,這種迭代便稱為阻尼牛頓迭代,而演算法稱為阻尼牛頓法,稱為阻尼因子。顯然,阻尼牛頓法仍然保持了原始牛頓法的二次收斂性質,同時對於非二次函式又具有函式值穩定下降的特點。

3 matlab介紹

自2023年美國math works公司推出matlab以來,目前matlab己發展成為國際上最優秀的科技應用軟體之一,它以強大的科學計算與視覺化功能、簡單易用、開放式可擴充套件環境,特別是所附帶的30多種面向不同領域的工具箱支援,使得matlab在許多科學領域中成為計算機輔助設計利分析、演算法研究和應用開發的基本功聚合首選平台。

matlab最初用於自動控制系統的輔助設計,而後採用了開放性開發的思想,不斷吸收各學科領域所開發的實用程式,形成了一套規模大、覆蓋面積廣的工具箱,包括訊號處理、工程優化、影象處理、小波分析、系統識別、通訊**、模糊控制、神經網路、統計分析等許多現代工程技術學科的內容,它的應用範圍涵蓋了當今所有的工業、電子、醫療、建築等各領域。

對於優化工具箱(optimization toolbox),是將工程上的優化方法進行編譯並設定為固定函式,使人們從繁瑣的程式**中解放出來,其豐富的函式使開發者無需重複程式設計,使用者只需要按照要求進行呼叫相應函式即可,使得整個過程簡單、直接。本文將分別按兩種方式進行程式設計計算案例,一種是按照牛頓法的運算法則進行程式設計,另一種是直接呼叫優化工具箱函式計算,將體現出優化工具箱極大的優勢。

4 程式設計思路和程式模組

根據牛頓法和阻尼牛頓法的計算法則,並依照matlab的特點,阻尼牛頓法程式設計思路一般步驟如下:

(1) 根據目標函式,任意選取初始迭代點,給定計算精度ε,並初始化k=0;

(2) 判斷迭代次數是否超出設定迭代次數,若超出迭代次數,則跳出迭代運算,返回迭代次數、最終迭代點和該點的函式值,並計算目標函式f(x)在點處的梯度以及,其中

;(3) 檢驗終止條件,若≤ε時,則說明是在ε精度下的最優值,計算並輸出,否則轉入第(4)步;

(4) 計算f(x)在點的hessian矩陣,並求其逆矩陣,

;(5) 確定牛頓方向,並沿方向按照armjijo準則做一維沸精確線搜尋,得到步長因子,計算:

並令k=k+1,轉入第(2)步,繼續運算。

按照上面的程式設計思路,阻尼牛頓法的程式模組和程式說明如下:

function [x,f,k]=dampnm(fun,gfun,hess,x0)

maxk=500;%設定最大迭代次數

rho=0.55;sigma=0.4;

k=0;

epsilon=1e-5;%給定計算精度

while(kgk=feval(gfun,x0);%計算函式f在x0的梯度

gk=feval(hess,x0);% 計算函式f在x0的海瑟矩陣(hessian)

dk=-gk\gk;%計算搜尋方向,解方程組-gk=gk*dk

if(norm(gk)end;

m=0;mk=0;

while(m<20)%運用armijo法做非精度線搜尋,確定步長因子

if(feval(fun,x0+rho^m*dk)mk=m;break;

endm=m+1;

endx0=x0+rho^mk*dk;

k=k+1;

endx=x0;%賦值最後迭代點,以便輸出

f=feval(fun,x);計算最後迭代點x的函式值

上面的程式儲存為dampnm.m檔案,以便在案例中呼叫。

5 計算案例

(1) 已知無約束優化問題的目標函式是,求在初始迭代點下,迭代次數不超過500次的目標函式最優值。

因為更好的適應不同的目標函式,以便在求不同目標函式的最優值呼叫程式,所以在程式模組中沒有儲存具體的函式,呼叫該程式時還需建立目標函式、梯度和海瑟矩陣的m檔案。

目標函式的m檔案:

function f=fun(x)

f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;

目標函式梯度的m檔案:

function g=gfun(x)

g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';

目標函式海瑟矩陣的m檔案:

function he=hess(x)

n=length(x);

he=zeros(n,n);

he=[1200*x(1)^2-400*x(2)+2,-400*x(1);-400*x(1),200];

呼叫上面的程式方式為:

>> x0=[0 0]';

>> [x,f,k]=dampnm('fun','gfun','hess',x0)

分別在下程式執行結果如圖一所示。

運用matlab優化工具箱的fminunc函式,可以很輕鬆的實現上述結果。為了要呼叫fminunc函式,首先得編寫關於f(x)的m檔案,其程式**如下:

圖一初始點分別在下按照阻尼牛頓法編寫模組程式執行的結果

圖二運用matlab優化工具箱的fminunc函式,呼叫計算結果

目標函式的m檔案:

function f=myfun(x)

f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;

函式呼叫計算:

>> x0=[0 0];

>> [x,fval]=fminunc(@myfun,x0)

fminunc函式在下執行結果如圖二所示。

6 小結

優化設計的各種方法,如最速下降法、牛頓法等都需要進行大量的迭代運算,而且還要計算目標函式的梯度矩陣和海瑟矩陣,這些運算量是相當大和枯燥重複的。當借助於matlab軟體強大的數值計算能力和卓越的資料視覺化能力,通過將最優化理論與matlab優化工具箱或matlab程式設計結合,既大大簡化了優化設計理論解題過程中繁瑣的高階語言程式設計工作,又能節省程式呼叫時間,使得整個優化計算過程十分簡單。

最優化方法的matlab實現

在生活和工作中,人們對於同乙個問題往往會提出多個解決方案,並通過各方面的論證從中提取最佳方案。最優化方法就是專門研究如何從多個方案中科學合理地提取出最佳方案的科學。由於優化問題無所不在,目前最優化方法的應用和研究已經深入到了生產和科研的各個領域,如土木工程 機械工程 化學工程 運輸排程 生產控制 經...

基於MATLAB的影象平滑演算法實現及應用

1.3 影象雜訊 一幅影象在獲取和傳輸等過程中,會受到各種各樣雜訊的干擾,其主要 有三 一為在光電 電磁轉換過程中引入的人為雜訊 二為大氣層電 磁 暴 閃電 電壓 浪湧等引起的強脈衝性衝激雜訊的干擾 三為自然起伏性雜訊,由物理量的不連續性或粒子性所引起,這類雜訊又可分成熱雜訊 散粒雜訊等。一般在影象...

用MATLAB實現基於混沌的影象置亂加密演算法

由於影象檔案的加密有其自身的要求,傳統的文字加密方法不適合影象檔案加密。為此,我們在混沌對映加密演算法的基礎上,提出了一種利用logistic混沌序列對影象畫素點置亂實現加密的演算法,那麼,我們今天借助matlab軟體平台,看看基於混沌的影象置亂加密演算法如何實現。一 基於混沌的影象置亂加密演算法 ...