模擬退火二元法.docx_第1頁
模擬退火二元法.docx_第2頁
模擬退火二元法.docx_第3頁
模擬退火二元法.docx_第4頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

%matlab 程序?qū)崿F(xiàn) 模擬退火算法程序 函數(shù)求極值(引用后修改,感謝 ARMYLAU)%使用模擬退火法求函數(shù)f(x,y) = 3*cos(xy) + x + y2的最小值%解:根據(jù)題意,我們設(shè)計冷卻表進(jìn)度表為:%即初始溫度為30%衰減參數(shù)為0.95%馬可夫鏈長度為10000%Metropolis的步長為0.02%結(jié)束條件為根據(jù)上一個最優(yōu)解與最新的一個最優(yōu)解的之差小于某個容差。%使用METROPOLIS接受準(zhǔn)則進(jìn)行模擬, 程序如下%* 日期:201211-29%* 作者:steven%*EMAIL:%* 結(jié)束條件為兩次最優(yōu)解之差小于某小量function BestX,BestY=SimulateAnnealing1clear;clc;%/ 要求最優(yōu)值的目標(biāo)函數(shù),搜索的最大區(qū)間XMAX= 4;YMAX = 4;%冷卻表參數(shù)MarkovLength = 10000; %/ 馬可夫鏈長度DecayScale = 0.95; %/ 衰減參數(shù)StepFactor = 0.02; %/ 步長因子Temperature=30; %/ 初始溫度Tolerance = 1e-8; %/ 容差A(yù)cceptPoints = 0.0; %/ Metropolis過程中總接受點rnd =rand;% 隨機(jī)選點 初值設(shè)定PreX = -XMAX * rand ;PreY = -YMAX * rand;PreBestX= PreX;PreBestY = PreY;PreX = -XMAX * rand ;PreY = -YMAX * rand;BestX = PreX;BestY = PreY;% 每迭代一次退火一次(降溫), 直到滿足迭代條件為止mm=abs( ObjectFunction( BestX,BestY)-ObjectFunction (PreBestX, PreBestY);while mm ToleranceTemperature=DecayScale*Temperature;AcceptPoints = 0.0;% 在當(dāng)前溫度T下迭代loop(即MARKOV鏈長度)次for i=0:MarkovLength:1% 1) 在此點附近隨機(jī)選下一點p=0;while p=0NextX = PreX + StepFactor*XMAX*(rand-0.5);NextY = PreY + StepFactor*YMAX*(rand-0.5);if p= (NextX = -XMAX & NextX = -YMAX & NextY ObjectFunction(NextX,NextY)% 保留上一個最優(yōu)解PreBestX =BestX;PreBestY = BestY;% 此為新的最優(yōu)解BestX=NextX;BestY=NextY;end% 3) Metropolis過程if( ObjectFunction(PreX,PreY) - ObjectFunction(NextX,NextY) 0 )%/ 接受, 此處lastPoint即下一個迭代的點以新接受的點開始PreX=NextX;PreY=NextY;AcceptPoints=AcceptPoints+1;elsechanger = -1 * ( ObjectFunction(NextX,NextY) - ObjectFunction(PreX,PreY) ) / Temperature ;rnd=rand;p1=exp(changer);double (p1);if p1 rand%/ 不接受, 保存原解PreX=NextX;PreY=NextY;AcceptPoints=AcceptPoints+1;endendendmm=abs( ObjectFunction( BestX,BestY)-ObjectFunction (PreBestX, PreBestY);enddisp(最小值在點:);BestXBestYdisp( 最小值為:0);ObjectFunction(BestX, BestY)end*子函數(shù),目標(biāo)函數(shù)值計算functionvalue=ObjectFunction(x,y)value=3*cos(x*y)+x+y*y;end%使用模擬退火法求函數(shù)f(x,y)=sin(x*y)+x2+y2的最小值format longXMAX=4; %搜索的最大區(qū)間YMAX=4; %搜索的最大區(qū)間MarkovLength=10000; %馬可夫鏈長度DecayScale=0.95; %衰減參數(shù)0.95StepFactor=0.02; %步長因子Temperature=100; %初始溫度Tolerance=1e-8; %容差A(yù)cceptPoints=0.0; %Metropolis過程中總接受點PreX=-XMAX*rand; %初始的搜索值PreY=-YMAX*rand; %初始的搜索值PreBestX=PreX; %上一個最優(yōu)解PreBestY=PreY; %上一個最優(yōu)解BestX=PreX; %最終解BestY=PreY; %最終解while(1) Temperature=Temperature*DecayScale; %每迭代一次退火一次(降溫),直到滿足迭代條件為止 AcceptPoints=0.0; %在當(dāng)前溫度下迭代(即MARKOV鏈長度)次 for i=0:1:MarkovLength while(1) NextX=PreX+StepFactor*XMAX*(rand-0.5); %在初始點附近隨機(jī)選下一點 NextY=PreY+StepFactor*YMAX*(rand-0.5); %在初始點附近隨機(jī)選下一點 %判斷新產(chǎn)生的點是否在規(guī)定的最大搜索區(qū)間內(nèi),若在,則退出循環(huán),不在,繼續(xù)循環(huán),直到新產(chǎn)生的點在規(guī)定的最大搜索區(qū)間內(nèi) if(NextX=-XMAX & NextX=-YMAX & NextYminfunction(NextX,NextY) PreBestX=BestX; %保留上一個最優(yōu)解 PreBestY=BestY; BestX=NextX; %新的最優(yōu)解 BestY=NextY; end %接受新產(chǎn)生的點為下一迭代的開始點 if(minfunction(PreX,PreY)-minfunction(NextX,NextY)0) PreX=NextX; PreY=NextY; AcceptPoints=AcceptPoints+1; else change=-1*(minfunction(NextX,NextY)-minfunction(PreX,PreY)/Temperature; %不接受,保存原解 if(exp(change)rand) PreX=NextX; PreY=NextY; AcceptPoints=AcceptPoints+1; end end end %結(jié)束條件為根據(jù)上一個最優(yōu)解與最新的一個最優(yōu)解的之差小于某個容差 if(abs(minfunction(BestX,BestY)-minfunc

溫馨提示

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

評論

0/150

提交評論