《MATLAB遺傳算法工具箱及應(yīng)用》課件第9章_第1頁
《MATLAB遺傳算法工具箱及應(yīng)用》課件第9章_第2頁
《MATLAB遺傳算法工具箱及應(yīng)用》課件第9章_第3頁
《MATLAB遺傳算法工具箱及應(yīng)用》課件第9章_第4頁
《MATLAB遺傳算法工具箱及應(yīng)用》課件第9章_第5頁
已閱讀5頁,還剩321頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第九章使用MATLAB直接搜索工具 9.1直接搜索工具概述

與遺傳算法一樣,直接搜索算法工具也可以作為其他優(yōu)化方法的一個(gè)補(bǔ)充,用來尋找最佳起始點(diǎn),繼而可以通過使用傳統(tǒng)的優(yōu)化技術(shù)來進(jìn)一步找出最優(yōu)解。

直接搜索工具函數(shù)可以通過圖形界面或MATLAB命令行來訪問。所有算法工具函數(shù)都是用MATLAB語言編寫的,對(duì)用戶開放,因此可以查看算法、修改源代碼或生成用戶函數(shù)。

工具箱中的直接搜索算法實(shí)現(xiàn)的是模式搜索方法。大多數(shù)傳統(tǒng)優(yōu)化方法通過使用梯度或高階導(dǎo)數(shù)的方法來搜尋優(yōu)化點(diǎn),而模式搜索方法可搜索出最大最小正基模式。它可以處理邊界約束、線性等式、線性不等式,并且不需要函數(shù)可微或連續(xù)。

(1)表決方法——用來決定怎樣產(chǎn)生和估計(jì)模式中的點(diǎn)數(shù)以及每一步生成的最大點(diǎn)數(shù)。可以通過控制點(diǎn)的表決順序來提高效率。

(2)搜索方法——用來選擇比表決步效率更高的搜索方法??梢栽谝粋€(gè)模式內(nèi)或整個(gè)搜索空間中執(zhí)行搜索。與遺傳算法相似,全局搜索方法可以用來獲得一個(gè)好的起始點(diǎn)。

(3)網(wǎng)格——用來迭代過程中控制模式如何變化;對(duì)于各維尺度不同的問題還需要調(diào)整網(wǎng)格??梢赃x擇初始網(wǎng)格尺寸,網(wǎng)格細(xì)分因子或網(wǎng)格收縮因子。網(wǎng)格加速器加快了最小值附近的收斂速度。

(4)緩存器——用來存儲(chǔ)優(yōu)化過程中的計(jì)算量大的目標(biāo)函數(shù)的估計(jì)點(diǎn)??梢灾付J剿阉魉惴ㄖ芯彺嫫鞯拇笮『腿莶?,還可以在計(jì)算過程中調(diào)整緩存器容差,以提高尋優(yōu)的速度和效率。

通過命令行或圖形用戶界面可修改上述任一選項(xiàng)。 9.2直接搜索算法

9.2.1何謂直接搜索

直接搜索(Directsearch)是一種求解優(yōu)化問題的方法,它不要求任何目標(biāo)函數(shù)梯度的信息。與使用梯度或高階導(dǎo)數(shù)信息來搜索優(yōu)化點(diǎn)的較傳統(tǒng)的優(yōu)化算法相反,直接搜索算法搜索當(dāng)前點(diǎn)周圍的一系列點(diǎn),尋找目標(biāo)函數(shù)值低于當(dāng)前點(diǎn)值的那些點(diǎn)。我們可以使用直接搜索算法來求解那些目標(biāo)函數(shù)不可微、甚至不連續(xù)的問題。直接搜索工具實(shí)現(xiàn)一類特殊的直接搜索算法,稱為模式搜索(patternsearch)算法。模式搜索算法確定一個(gè)點(diǎn)的序列,這個(gè)點(diǎn)序列呈現(xiàn)越來越接近理想點(diǎn)的趨勢(shì)。在每一步,該算法搜索在當(dāng)前點(diǎn)周圍的一系列點(diǎn),稱為網(wǎng)格(mesh)。當(dāng)前點(diǎn)是指該算法在前一步計(jì)算出來的點(diǎn)。該算法通過把當(dāng)前點(diǎn)與一個(gè)稱為模式(pattern)的固定向量集的標(biāo)量倍數(shù)相加來構(gòu)成網(wǎng)格。如果算法在網(wǎng)格中找到一個(gè)新點(diǎn),且在該點(diǎn)比在當(dāng)前點(diǎn)使目標(biāo)函數(shù)得到改善,則該算法在下一步就將新點(diǎn)作為當(dāng)前點(diǎn)。9.2.2執(zhí)行模式搜索

本節(jié)簡(jiǎn)要介紹模式搜索工具和實(shí)現(xiàn)模式搜索的圖形用戶界面(GUI)。主要內(nèi)容包括:從命令行調(diào)用模式搜索;使用模式搜索工具GUI。

1.從命令行調(diào)用模式搜索

為了在命令行上對(duì)無約束問題執(zhí)行模式搜索,可以用下面的語法調(diào)用函數(shù)patternsearch

[xfval]=patternsearch(@objfun,x0)

其中:@objfun——目標(biāo)函數(shù)句柄;x0——模式搜索的起始點(diǎn)。

返回的結(jié)果為:fval——目標(biāo)函數(shù)的最終值;x——獲得最終值的點(diǎn)。

2.模式搜索工具GUI

為了打開模式搜索工具GUI,在MATLAB7.x可鍵入

psearchtool

為了打開模式搜索工具GUI,在MATLAB8.x可鍵入

(1)

optimtool(‘patternsearch’)或者psearchtool

這時(shí)打開的模式搜索工具如圖9.1所示。a)MATLAB7.x版本開始模式搜索

顯示結(jié)果輸入目標(biāo)函數(shù)輸入初始點(diǎn)單擊顯示參數(shù)描述b)MATLAB8.x版本圖9.1模式搜索工具為了使用模式搜索工具,首先必須輸入下列信息:

(1)ObjectiveFunction(目標(biāo)函數(shù))——想要最小化的目標(biāo)函數(shù)。輸入目標(biāo)函數(shù)的形式為@objfun,這里objfun.m是計(jì)算目標(biāo)函數(shù)的一個(gè)M文件。符號(hào)“@”產(chǎn)生objfun的函數(shù)句柄。

(2)Startpoint(起始點(diǎn))——即開始點(diǎn),算法從該點(diǎn)開始進(jìn)行優(yōu)化。

在“Constraints(約束)”窗格輸入對(duì)問題的約束。如果問題是無約束的,則該字段應(yīng)保持為空。

然后,點(diǎn)擊“Start(開始)”按鈕。模式搜索工具隨即在“Statusandresults(狀態(tài)與結(jié)果)”窗格顯示出優(yōu)化的結(jié)果。

我們也可以在“Options(選項(xiàng))”窗格改變模式搜索的選項(xiàng)。為了查看某一類選項(xiàng),可點(diǎn)擊與之連接的加號(hào)“+”。

“尋找函數(shù)的最小值”一節(jié)給出了使用模式搜索工具的一個(gè)實(shí)例。9.2.3尋找函數(shù)最小值

本節(jié)介紹使用模式搜索來尋找函數(shù)最小值的一個(gè)實(shí)例,主要內(nèi)容有:目標(biāo)函數(shù);尋找函數(shù)的最小值;繪制目標(biāo)函數(shù)值和網(wǎng)格尺寸的圖形。

1.目標(biāo)函數(shù)

本例使用目標(biāo)函數(shù)ps_example,它包含在直接搜索工具箱之中。鍵入下列命令就可以查看該函數(shù)的代碼:

typeps_example

圖9.2顯示出該函數(shù)的圖形細(xì)節(jié)。圖9.2目標(biāo)函數(shù)ps_exampl

2.尋找函數(shù)的最小值

為了尋找ps_example的最小值,進(jìn)行如下步驟:

(1)在MATLAB7.x環(huán)境下鍵入

psearchtool

在MATLAB8.x環(huán)境下鍵入

optimtool或者psearchtool

選擇模式搜索工具。

(2)在優(yōu)化工具的“Objectivefunction(目標(biāo)函數(shù))”字段,輸入@ps_example。

(3)在“Startpoint(起始點(diǎn))”字段,輸入[2.11.7]。打開優(yōu)化工具后的這兩步操作,即輸入目標(biāo)函數(shù)與起始點(diǎn),如圖9.3所示。因?yàn)樵搯栴}是無約束的,所以讓Constraints字段保持為空白。圖9.3為模式搜索工具輸入目標(biāo)函數(shù)與起始點(diǎn)

(4)點(diǎn)擊Start按鈕運(yùn)行模式搜索。

在“StatusandResults”窗格顯示模式搜索的結(jié)果,如圖9.4所示。圖9.4目標(biāo)函數(shù)ps_example的模式搜索結(jié)果

3.繪制目標(biāo)函數(shù)值和網(wǎng)格尺寸的圖形

為了查看模式搜索的性能,可以顯示每一次迭代時(shí)的最佳函數(shù)值與網(wǎng)格尺寸。首先,在“繪圖(Plots)”窗格(參見圖9.5所示)選中下列復(fù)選框:Bestfunctionvalue(最佳函數(shù)值)。Meshsize(網(wǎng)格尺寸)。圖9.5繪圖窗口圖9.6ps_example的最佳函數(shù)值與網(wǎng)格尺寸9.2.4模式搜索術(shù)語

本節(jié)解釋模式搜索的3個(gè)標(biāo)準(zhǔn)術(shù)語,包括:模式(Patterns)、網(wǎng)格(Meshes)和表決(Polling)。

1.模式

Patterns是若干向量{vi}的一個(gè)集合,向量由算法來使用,以確定在每次迭代時(shí)要搜索哪一點(diǎn)。例如,如果在某優(yōu)化問題中存在兩個(gè)獨(dú)立變量,則缺省模式由下面的向量組成:一個(gè)N+1正基準(zhǔn)由下列默認(rèn)的模式向量組成。

2.網(wǎng)格在每一步,模式搜索算法搜索一組點(diǎn),稱為mesh,以尋找使目標(biāo)函數(shù)得到改善的點(diǎn)。該算法形成網(wǎng)格的方法是:給模式向量乘以一個(gè)標(biāo)量,稱為網(wǎng)格尺寸(meshsize)。

2.網(wǎng)格

在每一步中,模式搜索算法搜索一組點(diǎn)(稱為網(wǎng)格(mesh)),以尋找使目標(biāo)函數(shù)得到改善的點(diǎn)。該算法

形成網(wǎng)格的方法是:

(1)給模式向量乘以一個(gè)標(biāo)量,稱為網(wǎng)格尺寸(meshsize)。

(2)把結(jié)果向量與當(dāng)前點(diǎn)相加。當(dāng)前點(diǎn)是指在前一步找到的具有最佳目標(biāo)函數(shù)值的點(diǎn)。

例如,假定當(dāng)前點(diǎn)是[1.63.4],模式由下列向量組成:

v1=[10]

v2=[01]

v3=[-10]

v4=[0-1]

當(dāng)前網(wǎng)格尺寸是4。算法給模式向量乘以4,并且把它們與當(dāng)前點(diǎn)相加,從而獲得下面的網(wǎng)格:

[1.63.4]+4*[10]=[5.63.4]

[1.63.4]+4*[01]=[1.67.4]

[1.63.4]+4*[-10]=[-2.43.4]

[1.63.4]+4*[0-1]=[1.6-0.6]9.2.5模式搜索如何工作

模式搜索算法可以找到一個(gè)點(diǎn)序列,x0,x1,x2,...,它們逐漸逼近理想點(diǎn)。序列中的每一點(diǎn)到下一點(diǎn)的目標(biāo)函數(shù)值逐漸減少。本節(jié)以前面所描述的目標(biāo)函數(shù)ps_exampl為例,說明模式搜索算法是如何工作的,主要內(nèi)容包括:SuccessfulPoll(成功選舉);AnUnsuccessfulPoll(不成功選舉);顯示每次迭代的結(jié)果;更多的迭代;模式搜索的停止條件。

為了使解釋簡(jiǎn)明起見,假定在這里描述模式搜索算法如何工作的時(shí)候,選項(xiàng)“Mesh”中的參數(shù)Scale設(shè)置為Off。

1.成功選舉

對(duì)于目標(biāo)函數(shù)ps_exampl,模式搜索從所提供的起始點(diǎn)x0開始。在本例中,起始點(diǎn)x0=[2.11.7]。下面敘述模式搜索算法的工作過程。

1)第1次迭代

在第1迭代時(shí),網(wǎng)格尺寸為1,模式搜索算法把模式向量與起始點(diǎn)x0=[2.11.7]相加,計(jì)算出下列網(wǎng)格點(diǎn):

[10]+x0=[3.11.7]

[01]+x0=[2.12.7]

[-10]+x0=[1.11.7]

[0-1]+x0=[2.10.7]圖9.8目標(biāo)函數(shù)在起始點(diǎn)和各網(wǎng)格點(diǎn)的值在第1迭代時(shí),網(wǎng)格尺寸為1,模式搜索算法把模式向量與起始點(diǎn)x0=[2.11.7]相加,計(jì)算出下列網(wǎng)格點(diǎn):

[10]+x0=[3.11.7]

[01]+x0=[2.12.7]

[-10]+x0=[1.11.7]

[0-1]+x0=[2.10.7]

算法以上面顯示的順序計(jì)算各網(wǎng)格點(diǎn)的目標(biāo)函數(shù)。圖9.8顯示出ps_example在起始點(diǎn)和各網(wǎng)格點(diǎn)的值。圖9.8目標(biāo)函數(shù)在起始點(diǎn)和各網(wǎng)格點(diǎn)的值該算法通過計(jì)算各網(wǎng)格點(diǎn)的目標(biāo)函數(shù)值來表決選取各網(wǎng)格點(diǎn),直到它找到其函數(shù)值小于x0點(diǎn)的函數(shù)值4.6347的點(diǎn)。在本例中,它找到的第一個(gè)這樣的點(diǎn)是[1.11.7],目標(biāo)函數(shù)在該點(diǎn)的值是4.5146,故迭代1的選取獲得成功。算法設(shè)置序列中的下一點(diǎn)為

x1=[1.11.7]

注意:按照缺省,模式搜索算法一旦找到其目標(biāo)函數(shù)值小于當(dāng)前點(diǎn)的一個(gè)網(wǎng)格點(diǎn)時(shí),就停止當(dāng)前的迭代。因此,該算法不可能選出所有的網(wǎng)格點(diǎn)。我們可以通過設(shè)置“Completepoll”選項(xiàng)為On,而使算法選取所有網(wǎng)格點(diǎn)。

2)第2次迭代

在一次成功選舉之后,該算法把當(dāng)前網(wǎng)格尺寸乘以2,這是“Mesh”選項(xiàng)窗格中的“Expansionfactor(擴(kuò)張因子)”的缺省值。因?yàn)槌跏季W(wǎng)格尺寸是1,在第二次迭代時(shí)網(wǎng)格尺寸為2。第二次迭代時(shí)的網(wǎng)格包含下列點(diǎn):

2*[10]+x1=[3.11.7]

2*[01]+x1=[1.13.7]

2*[-10]+x1=[-0.91.7]

2*[0-1]+x1=[1.1-0.3]

目標(biāo)函數(shù)ps_example在當(dāng)前點(diǎn)x1和各網(wǎng)格點(diǎn)的相應(yīng)值如圖9.9所示。圖9.9目標(biāo)函數(shù)在x1點(diǎn)和各網(wǎng)格點(diǎn)的值算法檢測(cè)各網(wǎng)格點(diǎn),尋找其函數(shù)值小于當(dāng)前點(diǎn)x1處值4.5146的一個(gè)點(diǎn)。它找到的第一個(gè)滿足條件的點(diǎn)是[-0.91.7],目標(biāo)函數(shù)在該點(diǎn)處的值是3.25,故迭代2的選取再次成功。該算法設(shè)置序列中的第二個(gè)點(diǎn)為

x2=[-0.91.7]

因?yàn)檫x取成功,算法把當(dāng)前網(wǎng)格尺寸乘以2,得到第三次迭代的網(wǎng)格尺寸為4。

(3)第3次迭代

到第三次迭代時(shí),當(dāng)前點(diǎn)是

x2=[-0.91.7]且網(wǎng)格尺寸為4,所以網(wǎng)格由下列點(diǎn)組成:

4*[10]+x3=[3.11.7]

4*[-10]+x3=[-4.91.7]

4*[01]+x3=[-0.95.7]

4*[0-1]+x3=[-0.9-2.3]

算法選取各網(wǎng)格點(diǎn),找到其值小于x2處值的第一個(gè)點(diǎn)[-4.91.7],該點(diǎn)處目標(biāo)函數(shù)的值是-0.2649,故迭代3的選取再次成功。該算法設(shè)置序列中的第三個(gè)點(diǎn)為

x3=[-4.91.7]

因?yàn)檫x取成功,算法把當(dāng)前網(wǎng)格尺寸再乘以2,得到第三次迭代后的網(wǎng)格尺寸為8。

2.不成功選舉

到第四次迭代時(shí),當(dāng)前點(diǎn)是x3=[-4.91.7],網(wǎng)格尺寸為8,所以網(wǎng)格由下列點(diǎn)組成:

8*[10]+x3=[3.11.7]

8*[-10]+x3=[-12.91.7]

8*[01]+x3=[-4.99.7]

8*[0-1]+x3=[-4.9-6.3]

圖9.10顯示出各網(wǎng)格點(diǎn)以及它們的目標(biāo)函數(shù)值。圖9.10在x3點(diǎn)與各網(wǎng)格點(diǎn)的目標(biāo)函數(shù)值這次迭代,不存在其目標(biāo)函數(shù)值小于x3處值的網(wǎng)格點(diǎn),故選取不成功。在本例中,算法不改變下次迭代的當(dāng)前點(diǎn)。即

x4=x3

下次迭代時(shí),算法對(duì)當(dāng)前網(wǎng)格尺寸乘以0.5,這是“Mesh”選項(xiàng)窗格中的“Contractionfactor(收縮因子)”的缺省值。因此,下次迭代的網(wǎng)格尺寸為4。這樣,算法的選舉具有了較小的網(wǎng)格尺寸。

3.顯示每次迭代的結(jié)果

通過設(shè)置在“Displaytocommandwindow(顯示到命令窗口)”選項(xiàng)中的Levelofdisplay(顯示級(jí)別)為“iterative(迭代)”,就可以顯示出每次迭代時(shí)模式搜索的結(jié)果。這使得我們可以評(píng)估模式搜索的進(jìn)展,在必要時(shí)可以改變相關(guān)選項(xiàng)。

有了這樣的設(shè)置,模式搜索在命令行顯示每次迭代的信息。對(duì)于本例,顯示的前幾行如下:

Iterf-countf(x)

MeshSizeMethod

014.634741

144.51464

2SuccessfulPoll

273.254SuccessfulPoll

310-0.2649058SuccessfulPoll

414-0.2649054RefineMesh

在Method(方法)之下顯示的信息“SuccessfulPoll”表明當(dāng)前迭代是成功的。例如,第2次迭代的選舉是成功的。因此,在第2次迭代中計(jì)算出來的那一點(diǎn)的、顯示在f(x)下面的目標(biāo)函數(shù)值,小于在第1次迭代中計(jì)算出來的值。

在第4次迭代中,Method之下的信息“RefineMesh(改善網(wǎng)格)”告訴我們,選舉是不成功的。因此,第4次迭代的函數(shù)值仍然保持第3次迭代的函數(shù)值不變。

注意:模式搜索在每次成功選舉之后使網(wǎng)格尺寸加倍,而在每次不成功的選舉之后使網(wǎng)格尺寸減半。

4.更多的迭代

對(duì)于本例,模式搜索在停止之前執(zhí)行60次迭代。圖9.11顯示出模式搜索的前13次迭代計(jì)算序列中的若干點(diǎn)。

在各個(gè)點(diǎn)下面的數(shù)字表示該算法找到該點(diǎn)時(shí)的迭代次數(shù)。這個(gè)圖只顯示出與成功選舉相對(duì)應(yīng)的迭代次數(shù),因?yàn)樵谝淮尾怀晒Φ倪x舉之后最佳點(diǎn)不發(fā)生變化。例如,第4次迭代和第5次迭代的最佳點(diǎn)就與第3次迭代的最佳點(diǎn)相同。圖9.11模式搜索在前13次迭代的點(diǎn)

5.模式搜索的停止條件

模式搜索算法運(yùn)行的停止要遵循一定的停止標(biāo)準(zhǔn)。這些標(biāo)準(zhǔn)列寫在模式搜索工具的“Stoppingcriteria(停止標(biāo)準(zhǔn))”窗格中,如圖9.12所示。

當(dāng)下列任何一個(gè)條件出現(xiàn)時(shí),模式搜索算法停止:

(1)網(wǎng)格尺寸小于Meshtolerance(網(wǎng)格容限)。

(2)算法執(zhí)行的迭代次數(shù)達(dá)到Maxiterations(最大迭代)規(guī)定的值。

(3)算法完成的目標(biāo)函數(shù)評(píng)估的總次數(shù)達(dá)到Maxfunctionevaluations(最大函數(shù)評(píng)估)規(guī)定的值。

(4)算法運(yùn)行時(shí)間達(dá)到它所完成需要的Timelimit(時(shí)間限制)。圖9.12停止標(biāo)準(zhǔn)窗口

(5)一次成功選舉所找到的點(diǎn)與下一次成功選舉所找到的點(diǎn)之間的距離小于X的容限(Xtolerance)。

(6)從一次成功選舉到下一次成功選舉的目標(biāo)函數(shù)的改變小于Functiontolerance(函數(shù)容限)。

(7)“Bindtolerance(綁定容限)選項(xiàng),用來識(shí)別有約束問題的現(xiàn)行約束,并不用來作為一種停止標(biāo)準(zhǔn)(MATLAB7.x中)。

(8)Nonlinearconstrainttolerance(非線性約束容限)不是作為停止標(biāo)準(zhǔn),它是用來判定非線性約束可行性的(MATLAB8.x中)。

9.3使用直接搜索工具

本節(jié)詳細(xì)介紹直接搜索工具及其使用方法,主要包括:瀏覽模式搜索工具、從命令行運(yùn)行直接搜索、模式搜索算法舉例和patternsearch調(diào)用的參數(shù)化函數(shù)。

9.3.1瀏覽模式搜索工具

在這里首先瀏覽一下模式搜索工具的圖形用戶界面(GUI),內(nèi)容包括:打開模式搜索工具;在模式工具箱中定義問題;運(yùn)行模式搜索;求解有約束條件的問題;暫停和停止算法;圖形顯示;在模式搜索工具中設(shè)置參數(shù);輸入、輸出參數(shù)和問題;生成一個(gè)M文件。

1.打開模式搜索工具

在MATLAB7.x工作區(qū)輸入:

psearchtool[HT]將打開模式搜索工具,初始界面如圖9.13(a)所示。模式搜索工具的右半部是選項(xiàng)參數(shù)區(qū),包含各種選項(xiàng)窗格,單擊與之相關(guān)的加號(hào)“+”,可以將其展開,方便地進(jìn)行參數(shù)設(shè)置。其左半部是操作顯示區(qū),包括各種運(yùn)行參數(shù)的設(shè)置及各種狀態(tài)、結(jié)果的顯示,從上到下依次為:Objectivefunction(目標(biāo)函數(shù))、Startpoint(起始點(diǎn))、Constraints(窗格)、Plots(窗格)、Runsolver(運(yùn)行求解器)、Statusandresults(顯示窗格)、Finalpoint(窗格),最下面還包含一個(gè)命令按鈕“ExporttoWorkspace”。圖9.13模式搜索工具初啟時(shí)的界面在MATLAB8.x工作區(qū)輸入:

optimtool(′patternsearch′)[HT]將打開模式搜索工具,初始界面如圖9.13(b)所示?;蛘咻斎雘ptimtool,在Solver下拉菜單中選擇patternsearch,打開模式搜索工具,也可以直接從MATLAB的工具條中選擇。模式搜索工具的右半部是擴(kuò)展幫助區(qū),中間部分是選項(xiàng)參數(shù)區(qū),包含各種選項(xiàng)窗格,單擊與之相關(guān)的加號(hào)“+”,可以將其展開,方便地進(jìn)行參數(shù)設(shè)置。其左半部是操作顯示區(qū),包括各種運(yùn)行參數(shù)的設(shè)置及各種狀態(tài)、結(jié)果的顯示,從上到下依次為:Solver(求解器)窗格、Problem(求解問題)窗格、Constraints(約束條件)窗格、Runsolverandviewresults(運(yùn)行求解器并查看結(jié)果)窗格和Finalpoint窗格。

2.在模式工具中定義問題

用模式搜索工具求解問題時(shí),要在下列區(qū)域中定義要解決的問題:

(1)Objectivefunction——目標(biāo)函數(shù)是最小化問題。在此輸入要計(jì)算目標(biāo)函數(shù)的M文件的函數(shù)句柄。

(2)Startpoint——模式搜索算法的起始點(diǎn)。

在模式搜索工具中定義待求解的問題,亦即設(shè)置目標(biāo)函數(shù)和起始點(diǎn)的情形,如圖9.14所示。圖9.14目標(biāo)函數(shù)、起始點(diǎn)和約束條件輸入窗口注意:在運(yùn)行模式搜索工具時(shí),不要使用“Editor/Debugger(編輯/調(diào)試)”功能來調(diào)試目標(biāo)函數(shù)的M文件。如果這樣做,在命令窗口會(huì)產(chǎn)生Java的多余信息,并使得調(diào)試更加困難。因而應(yīng)該從命令行直接調(diào)用目標(biāo)函數(shù),或者把它傳遞patternsearch函數(shù)。為了快速調(diào)試,可以從模式搜索工具把問題輸出到MATLAB工作空間。

對(duì)于有約束條件的問題,要在Constraints窗格中設(shè)置好相應(yīng)的約束條件。在“Constraints”窗格的下列區(qū)域,可以輸入任何約束條件:

(1)Linearinequalities(線性不等式)——在下列文本框中輸入不等式約束條件Ax≤b:

在文本框A=中,輸入矩陣A。

在文本框b=中,輸入矩陣向量b。

(2)Linearequalities(線性等式)——在下列文本框中輸入等式約束條件Aeqx=beq:

在文本框Aeq=中,輸入矩陣Aeq。

在文本框beq=中,輸入矩陣向量beq。

(3)Bounds(邊界)——在下列文本框中輸入邊界約束條件lb≤x,x≤UB:

在文本框Lower=中,輸入向量的下界LB。

在文本框Upper=中,輸入向量的上界UB。

沒有對(duì)應(yīng)約束條件的文本框設(shè)置為空。

3.運(yùn)行模式搜索

運(yùn)行模式搜索的方法在MATLAB7.x和MATLAB8.x中基本相同,在此以MATLAB8.x為例進(jìn)行介紹。

在Runsolverandviewresults(運(yùn)行求解器并查看結(jié)果)”窗格中,單擊“Start”按鈕,運(yùn)行模式搜索。這時(shí),“Currentiteration(當(dāng)前迭代)”區(qū)域顯示當(dāng)前迭代次數(shù),“viewresults”區(qū)域顯示信息“Patternsearchrunning(模式搜索運(yùn)行)”。

當(dāng)模式搜索停止時(shí),“viewresults”區(qū)域顯示:

(1)信息“Patternsearchrunning”。

(2)最終點(diǎn)的目標(biāo)函數(shù)值。

(3)模式搜索停止的原因。

(4)最終點(diǎn)的坐標(biāo)。圖9.15模式搜索算法顯示的狀態(tài)與結(jié)果

4.求解有約束條件的問題

1)線性約束問題

在這里,提供一個(gè)模式搜索的例子,是帶有約束條件的求函數(shù)最小值問題。目標(biāo)函數(shù)為式中,約束條件為其中,運(yùn)行模式搜索工具來求解這個(gè)問題,在MATLAB7.x中,輸入:

psearchtool在MATLAB8.x中,則輸入:

optimtool(′patternsearch′)打開模式搜索工具。然后設(shè)置“Objectivefunction”為@lincontest7——在工具箱中包含一個(gè)計(jì)算這個(gè)目標(biāo)函數(shù)值的M文件lincontest7.m。因?yàn)橛镁仃嚭拖蛄慷x起始點(diǎn)和約束條件太大,所以在MATLAB工作空間中分別把它們?cè)O(shè)置為變量,然后在模式搜索工具中輸入這些變量的名稱,這樣做是非常方便的。下面輸入:

x0=[210910];

Aineq=[-873-490];

bineq=[7];

Aeq=[718333;505158;267118;100000];

beq=[8462651];

(1)設(shè)置“Startpoint”為x0。

(2)在“Linearinequalities”中設(shè)置:

“A=”為Aineq

“b=”為bineq

“Aeq=”為Aeq

“beq=”為beq在模式搜索工具中設(shè)置的這些參數(shù)如圖9.16所示。圖9.16設(shè)置有約束問題的目標(biāo)函數(shù)、起始點(diǎn)和約束條件圖9.17求解有約束問題的狀態(tài)與結(jié)果

2)非線性約束問題

假設(shè)現(xiàn)在需要求一個(gè)簡(jiǎn)單目標(biāo)函數(shù)的最小值,該函數(shù)含有兩個(gè)變量x1和x2:并且受以下非線性不等式條件和邊界約束:(非線性約束條件)(非線性約束條件)(邊界)(邊界)第一步,從目標(biāo)函數(shù)和約束函數(shù)開始計(jì)算。首先,創(chuàng)建名為simple_objective.m的M文件:

functiony=simple_objective(x)

y=(4-2.1*x(1)^2+x(1)^4/3)*x(1)^2+x(1)*x(2)+(-4+4*x(2)^2)*x(2)^2;

模式搜索器假設(shè)目標(biāo)函數(shù)只有一個(gè)輸入x,而x包含的元素個(gè)數(shù)和問題中的變量個(gè)數(shù)一致。目標(biāo)函數(shù)計(jì)算函數(shù)值并返回一個(gè)標(biāo)量值y。然后,創(chuàng)建一個(gè)名為simple_constraint.m的M文件,包含以下約束條件:

function[c,ceq]=simple_constraint(x)

c=[1.5+x(1)*x(2)+x(1)-x(2);

-x(1)*x(2)+10];

ceq=[];

模式搜索器假設(shè)約束函數(shù)只有一個(gè)輸入x,而x包含的元素個(gè)數(shù)和問題中的變量個(gè)數(shù)一致。約束函數(shù)計(jì)算所有等式和不等式約束條件并返回兩個(gè)獨(dú)立的向量c和ceq。

第二步,要使用patternsearch函數(shù)最小化目標(biāo)函數(shù),需要向目標(biāo)函數(shù)傳遞一個(gè)函數(shù)句柄,同時(shí)選定一個(gè)起始點(diǎn)作為第二個(gè)變量。上下界分別以LB和UB表示。此外,也需要向非線性約束函數(shù)傳遞一個(gè)函數(shù)句柄:ObjectiveFunction=@simple_objective;

x0=[00];%起始點(diǎn)

lb=[00];%下界

ub=[113];%上界

ConstraintFunction=@simple_constraint;

[x,fval]=patternsearch(ObjectiveFunction,x0,[],[],[],[],...lb,ub,ConstraintFunction)[JP]

Optimizationterminated:meshsizelessthanoptions.TolMesh

andconstraintviolationislessthanoptions.TolCon.

x=

0.812212.3122

fval=

9.1324e+004

第三步,繪制結(jié)果圖像。用psoptimset函數(shù)調(diào)用兩個(gè)繪圖函數(shù)創(chuàng)建一個(gè)參數(shù)結(jié)構(gòu)體(optionsstructure)。第一個(gè)繪圖函數(shù)psplotbestf繪制每次迭代得到的最優(yōu)目標(biāo)函數(shù)值。第二個(gè)繪圖函數(shù)psplotmaxconstr繪制每次迭代的最大約束容忍度。

注意:也可以通過“Display”選項(xiàng)將算法的演化過程展現(xiàn)在“CommandWindow”窗格中。

options=psoptimset(′PlotFcns′,{@psplotbestf,@psplotmaxconstr},′Display′,′iter′)

[x,fval]=patternsearch(ObjectiveFunction,x0,[],[],[],[],lb,ub,ConstraintFunction,options)

options=psoptimset('PlotFcns',{@psplotbestf,@psplotmaxconstr},'Display','iter');

[x,fval]=patternsearch(ObjectiveFunction,X0,[],[],[],[],LB,UB,ConstraintFunction,options)

Iterf-countf(x)maxconstraintMeshSizeMethod

010100.8919

12811358000.001Increasepenalty

2105913241.782e-0071e-005Increasepenalty

3192913241.188e-0111e-007Increasepenalty

Optimizationterminated:meshsizelessthanoptions.TolMesh

andconstraintviolationislessthanoptions.TolCon.

x=

0.812212.3122

fval=

9.1324e+004圖9.18每次迭代的目標(biāo)函數(shù)最優(yōu)值和約束條件最大容忍度

5.暫停和停止算法

當(dāng)模式搜索正在運(yùn)行時(shí),可以

(1)單擊“Pause(暫停)”按鈕暫停運(yùn)行,這時(shí)按鈕的名稱更改為“Resume(恢復(fù))”,再單擊“Resume”,即從暫停處繼續(xù)運(yùn)行。

(2)單擊“Stop(停止)”按鈕停止運(yùn)行。單擊“Stop”按鈕時(shí),“Runsolverandviewresults”窗口顯示當(dāng)前點(diǎn)的目標(biāo)函數(shù)值。

6.圖形顯示

在“Plotsfunctions(繪圖)”窗格(參見圖9.19)中,通過選擇來控制顯示模式搜索運(yùn)行結(jié)果的圖形。在MATLAB7.x版本中為Plots(窗格)。

選擇需要顯示圖形的復(fù)選框,例如,可以選擇“Bestfunctionvalue(最佳函數(shù)值)”和“Meshsize(網(wǎng)格尺寸)”。運(yùn)行前面敘述的目標(biāo)函數(shù)ps_example,所顯示的圖形如圖9.20所示。圖9.19繪圖窗格圖9.20目標(biāo)函數(shù)ps_example模式搜索結(jié)果

7.在模式搜索工具中設(shè)置參數(shù)

設(shè)置模式搜索工具使用時(shí)的選項(xiàng)參數(shù)有兩種方法:一種是在模式搜索工具GUI的“Options(選項(xiàng))”窗格中直接進(jìn)行設(shè)置,另一種是在MATLAB工作空間中通過命令行方式進(jìn)行設(shè)置。

在“Options”窗格中設(shè)置模式搜索的各種運(yùn)行參數(shù),如圖9.21所示。每一類參數(shù)對(duì)應(yīng)有一個(gè)窗格,單擊該類參數(shù)時(shí),對(duì)應(yīng)窗格展開。例如,單擊“Poll”參數(shù)選項(xiàng),表決窗格展開,可以逐一設(shè)置其中的參數(shù)項(xiàng),如Pollmethod、是否Completepoll、Pollingorder(表決次序)等。圖9.21模式搜索選項(xiàng)參數(shù)此外,其他選項(xiàng)參數(shù)類還有:Search(搜索)、Mesh、Cache(緩存)、Stoppingcriteria(停止標(biāo)準(zhǔn))、Output(輸出)、Displaytocommandwindow(顯示到命令窗口)、Vectorize(向量化)等。這些選項(xiàng)參數(shù)類各自對(duì)應(yīng)一個(gè)參數(shù)窗格,單擊后相應(yīng)窗格隨即展開,可以進(jìn)行參數(shù)項(xiàng)的設(shè)置。

所有變量參數(shù)的含義及詳細(xì)描述,可參見9.4.1節(jié)“模式搜索參數(shù)”。

我們可以在MATLAB工作空間把參數(shù)設(shè)置為變量。可以通過在相應(yīng)的編輯框復(fù)制參數(shù)的值,或者通過在包含參數(shù)值的MATLAB工作空間,輸入變量的名稱,直接設(shè)置多個(gè)變量。在MATLAB工作空間,定義大矩陣或向量值作為變量,是非常方便的。

8.輸入、輸出參數(shù)和問題結(jié)構(gòu)

參數(shù)和問題結(jié)構(gòu)可以從模式搜索工具中輸出到MATLAB工作空間,并且此后在工具箱的工作期間可以把它們導(dǎo)入進(jìn)來。這樣,就為模式搜索工具在以后活動(dòng)期間保存自己所做的工作提供了一個(gè)簡(jiǎn)單途徑。下面描述如何輸入、輸出參數(shù)和問題結(jié)構(gòu)。

1)輸出參數(shù)、問題和結(jié)果

使用模式搜索工具求解一個(gè)問題時(shí),可以輸出下列信息到MATLAB工作空間:

(1)問題定義,包括:目標(biāo)函數(shù);起始點(diǎn);問題的約束條件。

(2)當(dāng)前的選項(xiàng)參數(shù)。

(3)算法運(yùn)行的結(jié)果。圖9.22輸出到工作空間對(duì)話框?qū)υ捒蛱峁┫铝羞x項(xiàng):

(1)在MATLAB結(jié)構(gòu)中保存目標(biāo)函數(shù)和參數(shù)。選擇“ExportproblemandoptionstoaMATLABstructurenamed(輸出問題與參數(shù)到已命名的MATLAB結(jié)構(gòu))”,可以在MATLAB結(jié)構(gòu)中保存目標(biāo)函數(shù)和參數(shù),這時(shí),需要在右面的文本框中輸入一個(gè)MATLAB結(jié)構(gòu)的名字。如果需要在當(dāng)前任務(wù)活動(dòng)期間運(yùn)行模式搜索,可選擇“Includeinformationneededtoresumethisrun(包括所需要的信息以重新開始本次運(yùn)行)”,這樣,最近一次搜索的最終點(diǎn)將保存在“Startpoint”的位置。如果隨后想以最近一次搜索的最終點(diǎn)來運(yùn)行模式搜索,可使用這個(gè)參數(shù)。

(2)在MATLAB結(jié)構(gòu)中保存參數(shù)。選擇“ExportoptionstoaMATLABstructurenamed”,可以在MATLAB結(jié)構(gòu)中保存參數(shù)。這時(shí),在這個(gè)選項(xiàng)后面的文本框中,輸入該參數(shù)結(jié)構(gòu)的名字。

(3)在MATLAB結(jié)構(gòu)中保存算法的最后運(yùn)行結(jié)果。選擇“ExportresultstoaMATLABstructurenamed”,可以在MATLAB結(jié)構(gòu)中保存算法的最后運(yùn)行結(jié)果。這時(shí),在這個(gè)選項(xiàng)后面的文本框中,輸入這個(gè)結(jié)果結(jié)構(gòu)的名稱。

2)運(yùn)行模式搜索求解輸出問題

輸出問題的描述可參見前面求解有約束條件的問題的例子(參見9.3.1節(jié))。對(duì)于這個(gè)例子,可在命令行調(diào)用patternsearch函數(shù),運(yùn)行模式搜索。其具體步驟為

(1)打開“ExporttoWorkspace”對(duì)話框。

(2)在“ExporttoWorkspace”對(duì)話框的“ExportproblemandoptionstoaMATLABstructurenamed”右面的文本框中,輸入問題結(jié)構(gòu)的名字,例如my_psproblem。(3)用my_psproblem調(diào)用patternsearch函數(shù):

[xfval]=patternsearch(my_psproblem)[HT]結(jié)果為

x=

1.0010-2.30279.5131-0.0474-0.19771.3083

fval=

2.1890e+003

3)輸入?yún)?shù)

為了在MATLAB工作空間為模式搜索輸入?yún)?shù)結(jié)構(gòu),可以從“File”菜單中選擇“ImportOptions(輸入?yún)?shù))”。打開一個(gè)對(duì)話框,在MATLAB工作空間,顯示一系列有效的模式搜索的參數(shù)結(jié)構(gòu)。當(dāng)選擇參數(shù)結(jié)構(gòu),并單擊“Import”按鈕時(shí),模式搜索工具重新設(shè)置它的參數(shù)為所輸入結(jié)構(gòu)的值。

注意:不能在包含任何無效參數(shù)區(qū)域輸入?yún)?shù)結(jié)構(gòu)。無效區(qū)域結(jié)構(gòu)在“ImportPatternSearchOptions(輸入模式搜索參數(shù))”對(duì)話框中不顯示。創(chuàng)建參數(shù)結(jié)構(gòu)有兩種方法:

(1)用options調(diào)用psoptimset,作為輸出。

(2)在模式搜索工具中,從“ExporttoWorkspace”對(duì)話框保存當(dāng)前參數(shù)。

4)輸入問題

為了輸入以前從模式搜索工具中輸出的問題,可以從“File”菜單中選擇“ImportProblem”菜單項(xiàng)。打開一個(gè)對(duì)話框,在MATLAB工作空間,顯示一系列有效的模式搜索問題結(jié)構(gòu)。當(dāng)選擇了一個(gè)問題結(jié)構(gòu)并單擊“OK”按鈕時(shí),模式搜索工具在輸入結(jié)構(gòu)內(nèi)重新設(shè)置問題的定義和參數(shù)值。另外,當(dāng)創(chuàng)建問題結(jié)構(gòu)時(shí),選擇“Includeinformationneededtoresumethisrun(包括所需要的信息以重新開始本次運(yùn)行)”,則工具箱把最后一次運(yùn)行的最終點(diǎn)設(shè)置為下一次運(yùn)行的“Startpoint”,它比輸出結(jié)構(gòu)優(yōu)先。

9.生成一個(gè)M文件

為了生成一個(gè)運(yùn)行模式搜索的M文件,可以從“File”菜單中選擇“GenerateM[CD*2]File(生成M文件)”菜單項(xiàng)來進(jìn)行,生成的M文件可保存在MATLAB路徑的目錄中。這個(gè)M文件使用在模式搜索工具中指定的目標(biāo)函數(shù)和參數(shù)。在命令行調(diào)用這個(gè)M文件時(shí),所返回的結(jié)果,與生成M文件時(shí)模式搜索工具在同一位置使用目標(biāo)函數(shù)和參數(shù)設(shè)置所返回的結(jié)果相同。9.3.2從命令行運(yùn)行模式搜索

使用模式搜索工具的另一個(gè)途徑是,在命令行調(diào)用patternsearch函數(shù)。本節(jié)詳細(xì)敘述這種使用方法,內(nèi)容包括:使用缺省參數(shù)值調(diào)用patternsearch函數(shù);在命令行設(shè)置patternsearch的參數(shù);從模式搜索工具中使用參數(shù)和問題。

1.使用缺省參數(shù)值調(diào)用patternsearch函數(shù)

這里描述如何使用缺省參數(shù)來運(yùn)行模式搜索。

1)無約束條件問題的模式搜索

對(duì)于無約束條件問題,用下面語句調(diào)用patternsearch函數(shù):

[xfval]=patternsearch(@objectfun,x0)其中,輸出變量:

x——最終點(diǎn)。

fval——目標(biāo)函數(shù)在x點(diǎn)的值。

需要輸入的變量:

@objectfun——標(biāo)函數(shù)objectfun的句柄,可以寫成一個(gè)M文件。參見8.1.2節(jié)“編寫待優(yōu)化函數(shù)的M文件”。

x0——模式搜索算法的起始點(diǎn)。對(duì)于前面描述的例子,即目標(biāo)函數(shù)為ps_example,在這里,要從命令行運(yùn)行模式搜索,可輸入:

[xfval]=patternsearch(@ps_example,[2.11.7])運(yùn)行結(jié)果為

Optimizationterminated:meshsizelessthanoptions.TolMesh′.

x=

-4.7124-0.0000

fval=

-2.0000

2)有約束條件問題的模式搜索

如果問題帶有約束條件,則應(yīng)使用語句:

[xfval]=patternsearch(@objfun,x0,A,b,Aeq,beq,lb,ub)其中,

A和b分別為代表不等式約束條件的矩陣和向量A·x≤b。

Aeq和beq分別為代表等式約束條件的矩陣和向量Aeq·x=beq。

lb和ub代表向量的邊界lb≤x,x≤ub。

在MATLAB8.x中,patternsearch函數(shù)多了一個(gè)輸入變量nonlcon,即

[xfval]=patternsearch(@objfun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

nonlcon是一個(gè)函數(shù),分別返回非線性等式向量c和非線性不等式向量ceq。通過令c(x)≤0且ceq(x)=0,使這個(gè)函數(shù)最小化。在這里,只需要輸入問題的約束條件部分。例如,如果沒有邊界約束條件,則使用下面的語句:

[xfval]=patternsearch(@objfun,x0,A,b,Aeq,beq)

對(duì)于沒有約束條件的輸入?yún)?shù)值,使用空的中括號(hào)‘[]’。例如,如果沒有不等式約束條件或者非線性約束函數(shù),就使用下面語句:

[xfval]=patternsearch(@objfun,x0,[],[],Aeq,beq,lb,ub)

3)增加輸出參數(shù)

若要得到更多關(guān)于模式搜索運(yùn)行的性能信息,可以使用下面語句調(diào)用patternsearch函數(shù):

[xfvalexitflagoutput]=patternsearch(@objfun,x0)除了x和fval外,還返回下面的輸出參數(shù):

exitflag:整數(shù),表示算法是否成功。

output:結(jié)構(gòu),包含關(guān)于求解器的性能的信息。

2.在命令行設(shè)置模式搜索參數(shù)

通過將options結(jié)構(gòu)作為模式搜索函數(shù)patternsearch的輸入?yún)?shù)結(jié)構(gòu),可以設(shè)置模式搜索工具中任何有效的參數(shù)值。MATLAB7.x中使用的語句為

[xfval]=patternsearch(@fitnessfun,nvars,A,b,Aeq,beq,lb,ub,options)

而MATLAB8.x中使用的語句為

[xfval]=patternsearch(@fitnessfun,nvars,…,A,b,Aeq,beq,lb,ub,nonlcon,options)

如果問題是無約束條件的,在約束條件輸入時(shí)必須使用空括號(hào),這里MATLAB7.x和MATLAB8.x的方式是一致的。例如,使用語句:如果問題是無約束條件的,在約束條件輸入時(shí)必須使用空括號(hào),這里MATLAB7.x和MATLAB8.x的方式是一致的。例如,使用語句:

[xfval]=patternsearch(@fitnessfun,nvars,[],[],[],[],[],[],options)

還可以使用psoptimset函數(shù)生成options結(jié)構(gòu)。例如,MATLAB7.x中使用語句:

options=psoptimset返回一個(gè)帶缺省值的options參數(shù)結(jié)構(gòu):

options=

TolMesh:1.0000e-006

TolX:1.0000e-006

TolFun:1.0000e-006

TolBind:1.0000e-003

MaxIteration:′100*numberofvariables′

MaxFunEvals:′2000*numberofvariables′

MeshContraction:0.5000

MeshExpansion:2

MeshAccelerator:′off′

MeshRotate:′on′

InitialMeshSize:1

ScaleMesh:′on′

MaxMeshSize:Inf

PollMethod:′positivebasis2n′

CompletePoll:′off′

PollingOrder:′consecutive′

SearchMethod:[]

CompleteSearch:′off′

Display:′final′

OutputFcns:[]

PlotFcns:[]

PlotInterval:1

Cache:′off′

CacheSize:10000

CacheTol:2.2204e-016

Vectorized:′off′在MATLAB8.x中使用語句:

options=psoptimset(@patternsearch)其返回值比MATLAB7.x多了以下4項(xiàng):

TolCon:1.0000e-006

InitialPenalty:10

PenaltyFactor:100

UseParallel:′never′

如果沒有輸入options,則函數(shù)patternsearch使用缺省值。每一個(gè)參數(shù)值保存在options結(jié)構(gòu)成員中,例如options.MeshExpansion,即通過在options后面輸入成員的名字,可以顯示任何參數(shù)值。例如,如果要顯示模式搜索網(wǎng)格擴(kuò)展因子,可輸入:

options.MeshExpansion

ans=

2如果要生成與缺省值不同的options結(jié)構(gòu),可以使用函數(shù)psoptimset來完成。例如,為了改變網(wǎng)格擴(kuò)展因子的值為3來代替其缺省值2,可輸入:

options=psoptimset(′MeshExpansion′,3)這時(shí)生成的options結(jié)構(gòu),除了MeshExpansion值為3外,其他參數(shù)值都為缺省值。

如果現(xiàn)在調(diào)用輸入?yún)?shù)為options的patternsearch,則模式搜索使用的網(wǎng)格擴(kuò)展因子為3。如果再?zèng)Q定改變options結(jié)構(gòu)的另一個(gè)成員的值,例如,要設(shè)置PlotFcns為@psplotmeshsize,它是在每一次迭代中畫出網(wǎng)格尺寸的繪圖函數(shù),則可以使用下面的語句來調(diào)用psoptimset函數(shù):

options=psoptimset(options,′PlotFcns′,@psplotmeshsize)結(jié)果保存options結(jié)構(gòu)的所有成員的當(dāng)前值,而PlotFcns則被改變?yōu)锧plotmeshsize。

注意:如果省略options作為輸入?yún)?shù),則psoptimset重新設(shè)置MeshExpansion為它的缺省值2.0。

也可以用一個(gè)命令同時(shí)設(shè)置MeshExpansion和PlotFcns值:

options=psoptimset(′MeshExpansion′,3,′PlotFcns′,@plotmeshsize)

3.從模式搜索工具中使用參數(shù)和問題

使用psoptimset來生成一個(gè)參數(shù)結(jié)構(gòu),可以在模式搜索工具中設(shè)置參數(shù)的值,并在MATLAB工作空間輸出這些參數(shù)值。其詳細(xì)描述可參見前面的9.3.1節(jié)中的“輸入、輸出參數(shù)、問題和結(jié)果”。如果在模式搜索工具中輸出缺省參數(shù),則options結(jié)構(gòu)的參數(shù)設(shè)置與由下面命令得到的參數(shù)設(shè)置相同:

options=psoptimset

但是,′Display′的缺省值被改變了:當(dāng)由psoptimset函數(shù)生成時(shí)′Display′為′final′;而在模式搜索工具中生成時(shí)′Display′為′none′。

也可以從模式搜索工具輸出整個(gè)問題,并且可以從命令行運(yùn)行它。9.3.3模式搜索算法舉例

本節(jié)通過實(shí)例說明如何運(yùn)用模式搜索算法來求解問題,如何設(shè)置模式搜索的參數(shù)等。

1.表決方法

在每一次迭代時(shí),模式搜索在當(dāng)前網(wǎng)格中畫出這些點(diǎn),就是說,它計(jì)算目標(biāo)函數(shù)在這些網(wǎng)格點(diǎn)的值,看哪些點(diǎn)的函數(shù)值比當(dāng)前點(diǎn)的函數(shù)值小。在前面介紹的內(nèi)容中,已經(jīng)多次涉及模式搜索的工作過程,也列舉了選舉過程的例子。在模式搜索中,所定義的網(wǎng)格可以通過“Pollmethod(選舉方法)”參數(shù)來指定,下面敘述其基本原理。缺省的模式“PositiveBasis(正基數(shù))2N”由2N個(gè)向量組成,這里的N是目標(biāo)函數(shù)中獨(dú)立變量的個(gè)數(shù)。這2N個(gè)向量為

[100…0]

[010…0]

[000…1]

[-100…0]

[0-10…0]

[000…-1]

例如,目標(biāo)函數(shù)有三個(gè)獨(dú)立變量,則模式由以下6個(gè)向量組成:

[100]

[010]

[001]

[-100]

[0-10]

[00-1]另外,如果設(shè)置“Pollmethod”為“PositiveBasisNP1”,則模式由下列N+1個(gè)向量組成:

[100…0]

[010…0]

[000…1]

[-1-1-1…-1]例如,如果目標(biāo)函數(shù)有3個(gè)獨(dú)立變量,則模式由下列4個(gè)向量組成:

[100]

[010]

[001]

[-1-1-1]模式搜索有時(shí)使用“PositiveBasisNP1”作為選舉方法運(yùn)行速度快,因?yàn)樗惴ㄔ诿恳坏兴阉鞯狞c(diǎn)較少。例如:運(yùn)行模式搜索來求解前面描述的有約束問題時(shí),算法使用缺省選舉方法“PositiveBasis2N”將執(zhí)行2080次函數(shù)估計(jì),但使用正基數(shù)NP1將只執(zhí)行1413次函數(shù)估計(jì)。

然而,如果目標(biāo)函數(shù)有許多局部最小值,使用“PositiveBasis2N”作為檢測(cè)方法有可能避免找到的是局部最小值即非全局最小值,因?yàn)檫@個(gè)搜索的每一迭代在當(dāng)前點(diǎn)周圍搜索了更多的點(diǎn)。

2.完全表決

按照缺省設(shè)置,模式搜索找到一個(gè)改進(jìn)目標(biāo)函數(shù)值的網(wǎng)格點(diǎn)時(shí),算法就停止檢測(cè),并設(shè)置這個(gè)點(diǎn)作為下一次迭代的當(dāng)前點(diǎn)。當(dāng)這種情況發(fā)生時(shí),許多網(wǎng)格點(diǎn)并沒有得到檢測(cè),這些沒有被檢測(cè)的點(diǎn)中的一些點(diǎn)可能具有比模式搜索最先找到的那個(gè)點(diǎn)更小的目標(biāo)函數(shù)值。

對(duì)于一些有局部最小值的問題,有時(shí)執(zhí)行的是使模式搜索在每一次迭代中檢測(cè)所有網(wǎng)格點(diǎn),挑選一個(gè)具有最佳目標(biāo)函數(shù)值的點(diǎn),這就使得模式搜索在每一次迭代中需要搜索更多的點(diǎn),以避免潛在的局部最小值而非全局最小值的問題。要使模式搜索檢測(cè)整個(gè)網(wǎng)格,則需在Poll參數(shù)中設(shè)置“Completepoll”為on。

下面舉例說明在模式搜索中如何使用完全表決。本例使用的目標(biāo)函數(shù)如下:圖9.23顯示了這個(gè)函數(shù)的圖形。圖9.23目標(biāo)函數(shù)圖形函數(shù)的全局最小值在(0,0),其值是-25。然而,函數(shù)在(0,9)處有一局部最小值-16。

建立一個(gè)M文件來計(jì)算這個(gè)函數(shù),復(fù)制和粘貼下列代碼到MATLAB編輯器中的新M文件中:

functionz=poll_example(x)

ifx(1)^2+x(2)^2<=25

z=x(1)^2+x(2)^2-25;

elseifx(1)^2+(x(2)-9)^2<=16

z=x(1)^2+(x(2)-9)^2-16;

else

z=0;

end

保存該M文件在MATLAB指定的一目錄中,文件名為poll_example.m。

為了對(duì)函數(shù)運(yùn)行模式搜索,在模式搜索工具中輸入以下內(nèi)容:

(1)設(shè)置“Solver”為patternsearch。(此項(xiàng)只在MATLAB8.x中設(shè)置)

(2)設(shè)置“Objectivefunction”為@poll_example。

(3)設(shè)置“Startpoint”為[0,5]。

(4)在“Displaytocommandwindow(顯示到命令窗口)”參數(shù)中設(shè)置“Levelofdisplay(顯示級(jí)別)”為Iterative。使用“Completepoll”的缺省值off,單擊“Start”按鈕運(yùn)行模式搜索,模式搜索工具在“Runsolverandviewresults”窗口中顯示狀態(tài)與結(jié)果信息,如圖9.24所示。

從運(yùn)行結(jié)果可以看出,模式搜索返回了在點(diǎn)(0,9)的局部最小值。

在起始點(diǎn),目標(biāo)函數(shù)值是0,在第一次迭代中,算法檢測(cè)如下網(wǎng)格點(diǎn):

f((0,5)+(1,0))=f(1,5)=0

f((0,5)+(0,1))=f(0,6)=-7圖9.24完全表決為off時(shí)函數(shù)poll_example的狀態(tài)與結(jié)果一旦算法檢測(cè)網(wǎng)格點(diǎn)(0,6),這點(diǎn)的目標(biāo)函數(shù)值比起始點(diǎn)的值要小,就會(huì)立即停止當(dāng)前網(wǎng)格的檢測(cè),并設(shè)置下一代的當(dāng)前網(wǎng)格點(diǎn)為(0,6)。在第一次迭代時(shí),這個(gè)搜索朝局部最小點(diǎn)(0,9)移動(dòng)。在命令行顯示的頭兩行可看到如下內(nèi)容:

Iterf-countMeshSize

f(x)

Method

0

1

1

0

Startiterations

1

3

2

-7SuccessfulPoll

注意:模式搜索在第一次迭代中只執(zhí)行了兩次目標(biāo)函數(shù)計(jì)算,增加總的函數(shù)計(jì)數(shù)從1到3。設(shè)置“Completepoll”為on,并單擊“Start”按鈕,將在“Runsolverandviewresults”窗口中顯示的結(jié)果,如圖9.25所示。圖9.25完全表決為on時(shí)函數(shù)poll_example的狀態(tài)與結(jié)果這時(shí),模式搜索找到全局最小值在(0,0)處。這一次和前一次不同的是“Completepoll”設(shè)置為on,模式搜索在第一次迭代中檢測(cè)了所有4個(gè)網(wǎng)格點(diǎn):

f((0,5)+(1,0))=f(1,5)=0

f((0,5)+(0,1))=f(0,6)=-7

f((0,5)+(-1,0))=f(-1,5)=0

f((0,5)+(0,-1))=f(0,4)=-9由于最后一個(gè)網(wǎng)格點(diǎn)具有最小目標(biāo)函數(shù)值,模式搜索選擇它作為下一次迭代的當(dāng)前點(diǎn)。在命令行顯示的頭兩行可看到如下內(nèi)容:

Iter

f-count

MeshSize

f(x)

Method

0

1

1

0

Startiterations

1

5

2

-9

SuccessfulPoll

在這種情況下,目標(biāo)函數(shù)在第一次迭代中被計(jì)算了4次。結(jié)果,模式搜索朝全局最小點(diǎn)(0,0)移動(dòng)。圖9.26完全表決為on和off時(shí)返回的點(diǎn)序列比較

3.不同表決方法效率比較

這個(gè)例子展示了在迭代和函數(shù)的全局進(jìn)化過程中幾個(gè)不同的表決參數(shù)是如何相互影響的。主要結(jié)果如下:

對(duì)于線性約束問題,GSS比GPS或MADS更有效。

盡管將CompletePoll設(shè)置為on影響了迭代次數(shù),但它是增加還是降低了效率,還并不明確。

同樣的,2N表決法和Np1表決法哪個(gè)更有效也是不明確的。但是,最有效的表決方法是GSS

PositivebasisNp1,并且將Completepoll設(shè)置為on。效率最低的方法是MADSPositive

basisNp1,并且將Completepoll設(shè)置為on。

1)問題設(shè)置(ProblemSetup)

這里所指的線性約束問題與9.3.3節(jié)“模式搜索算法舉例(PerformingaPatternSearchontheExample)”中的問題是相同的。這個(gè)線性約束問題使用的是工具箱中自帶的lincontest7文件。

(1)在MATLAB工作區(qū)中鍵入以下內(nèi)容:

x0=[210910];

Aineq=[-873-490];

bineq=7;

Aeq=[718333;50-51-58;-2-67119;1-12-23-3];

beq=[8462651];

(2)通過命令行輸入optimtool打開模式搜索工具。

(3)選擇patternsearch求解器。

(4)以圖9.27所示的方式輸入問題和約束條件。圖9.27問題和約束條件設(shè)置(5)確定表決方法是GPSPositivebasis2N,如圖9.28所示。圖9.28表決方法設(shè)置

2)產(chǎn)生結(jié)果(GeneratetheResults)

產(chǎn)生的結(jié)果如下:

(1)運(yùn)行搜索如圖9.29所示。圖9.29運(yùn)行搜索

(2)選擇File菜單中的ExporttoWorkspace選項(xiàng)。

(3)將結(jié)果以名為gps2noffde的結(jié)構(gòu)體輸出,如圖9.30所示。圖9.30輸出結(jié)果

(4)將“Options”菜單的“Poll”窗格中的“Completepoll”設(shè)置為on,如圖9.31所示。圖9.31設(shè)置完全表決方法

(5)運(yùn)行搜索。

(6)將結(jié)果以名為gps2non的結(jié)構(gòu)體輸出。

(7)將Options→Poll→PollMethod設(shè)置為GPSPositivebasisNp1,Completepoll設(shè)置為off。

(8)運(yùn)行搜索。

(9)將結(jié)果以名為gpsnp1off的結(jié)構(gòu)體輸出。

(10)將Completepoll設(shè)置為on。

(11)運(yùn)行搜索。

(12)將結(jié)果以名為gpsnp1on的結(jié)構(gòu)體輸出。

(13)按同樣的方法,分別將Completepoll設(shè)置為on和off,為其他表決方法建立結(jié)果結(jié)構(gòu)體:gss2noff,gss2non,gssnp1off,gssnp1on,mads2noff,mads2non,madsnp1off和madsnp1on。

3)檢查結(jié)果(ExaminetheResults)

現(xiàn)在有12次優(yōu)化運(yùn)行的結(jié)果。表9.1通過全部函數(shù)計(jì)數(shù)和迭代次數(shù)來度量各次運(yùn)行的效

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論