?? computerminf.asv
字號:
%使用模擬退火法求函數(shù)f(x,y)=5sin(x*y)+x^2+y^2的最小值
XMAX=4; %搜索的最大區(qū)間
YMAX=4; %搜索的最大區(qū)間
MarkovLength=10000; %馬可夫鏈長度
DecayScale=0.95; %衰減參數(shù)0.95
StepFactor=0.02; %步長因子
Temperature=100; %初始溫度
Tolerance=1e-8; %容差
AcceptPoints=0.0; %Metropolis過程中總接受點(diǎn)
PreX=-XMAX*rand; %初始的搜索值
PreY=-YMAX*rand; %初始的搜索值
PreBestX=PreX; %上一個(gè)最優(yōu)解
PreBestY=PreY; %上一個(gè)最優(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); %在初始點(diǎn)附近隨機(jī)選下一點(diǎn)
NextY=PreY+StepFactor*YMAX*(rand-0.5); %在初始點(diǎn)附近隨機(jī)選下一點(diǎn)
%判斷新產(chǎn)生的點(diǎn)是否在規(guī)定的最大搜索區(qū)間內(nèi),若在,則退出循環(huán),不在,繼續(xù)循環(huán),直到新產(chǎn)生的點(diǎn)在規(guī)定的最大搜索區(qū)間內(nèi)
if((NextX>=-XMAX && NextX<=XMAX && NextY>=-YMAX && NextY<=YMAX))
break %退出循環(huán)
end
end
%判斷新產(chǎn)生點(diǎn)與原來最優(yōu)點(diǎn)哪個(gè)更優(yōu)
if(minfunction(BestX,BestY)>minfunction(NextX,NextY))
PreBestX=BestX; %保留上一個(gè)最優(yōu)解
PreBestY=BestY;
BestX=NextX; %新的最優(yōu)解
BestY=NextY;
end
%接受新產(chǎn)生的點(diǎn)為下一迭代的開始點(diǎ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ù)上一個(gè)最優(yōu)解與最新的一個(gè)最優(yōu)解的之差小于某個(gè)容差
if(abs(minfunction(BestX,BestY)-minfunction(PreBestX,PreBestY))>Tolerance)
break
end
end
a=BestX
b=BestY
c=minfunction(BestX,BestY)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -