simfire.m

来自「遗传算法求解TSP问题」· M 代码 · 共 57 行

M
57
字号
%模拟退火主程序
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 + =
减小字号Ctrl + -
显示快捷键?