gusucode.com > 十大算法matlab程序说明 > 十大算法matlab程序说明/遗传退火法/Anneal7.m
function [X2,fX2] = Anneal(x,fx,FitnessFcn,B,stepSize,A,LB,UB,R,L,t) GenomeLength = length(x); Lbnd = B(1,:); Ubnd = B(2,:); span = max([sqrt(eps)*x;min([x-Lbnd;Ubnd-x])]); scale = stepSize * span; X2=[];fX2=[]; r=0; l=0; nb=0; while r<R && l<L x2 = x + scale .* randn(1,GenomeLength); y2 = (A*x2')'; if all(LB'<y2 & y2<UB'); l = l+1; fx2 = feval(FitnessFcn,x2); delta_f = fx2 - fx; if delta_f < 0 nb = 0; r = r+1; x = x2; fx = fx2; span = min([x-Lbnd;Ubnd-x]); scale = stepSize * span; X2 = [X2;x2]; fX2 = [fX2;fx2]; elseif exp(-delta_f/t) > rand nb = 0; r = r+1; x = x2; fx = fx2; span = min([x-Lbnd;Ubnd-x]); scale = stepSize * span; X2 = [X2;x2]; fX2 = [fX2;fx2]; else nb = nb + 1; if nb == 10*GenomeLength stepSize = stepSize / 10; scale = stepSize * span; elseif nb == 30*GenomeLength stepSize = min(2,stepSize * 20); scale = stepSize * span; elseif nb == 50*GenomeLength stepSize = stepSize / 40; scale = stepSize * span; nb = 0; end end else nb = nb + 1; end end