📄 simfire.m
字号:
%模拟退火主程序
function [xbest,fbest]=simfire()
%初始温度
T=10;
%退火速度
a=0.5;
%马尔可夫长度
L=1000;
%结束温度条件
e=0.1;
%人为初始化初始值
fo = -100;
fbest = -10;
xo=[0.1 0.8 0.1 0 0];
%退火过程模拟
while T>e
for i=1:L
xn=init(xo);
%xn=check(xn);
fn=obj(xn);
if fn>fbest %求最大值
fbest=fn;
xbest=xn;
end
p=Metropolis(fn,fo,T);
if p>rand()
xo=xn;
end
end
T=a*T;
end
%新解产生器
function xn=init(xo)
i=round(4*rand()+1); %产生随机数
j=round(4*rand()+1); %产生随机数
t=rand();
xo(j)=xo(j)+t*xo(i);
xo(i)=(1-t)*xo(i);
xn=xo;
%检测器
%function xn=check(xn)
function fn=obj(xn)
w=[0.0500 0.2673 0.1863 -0.1517 -0.2424];
h=[0 0.2475 0.1471 0.3793 0.1576];
g=0.2;
fn = (1-g)*dot(w,xn)-g*max(xn.*h);
function p=Metropolis(fn,fo,T)
w=fn-fo;
if w>=0;
p=1;
end
if w<0
p=exp(w/T);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -