这是一本书上所给的MATLAB源代码,目的是利用标准遗传算法求函数极值,程序如下
NP = 50;
L = 20 ;
Pc = 0.8 ;
Pm = 0.1;
G = 100 ;
Xs = 10;
Xx = 0;
f = randi(NP,L);
%%%%%%%%%%%%%%%循环%%%%%%%%%%
for k = 1:G
for i = 1 : NP
U = f(i,:);
m = 0;
for j = 1:L
m = U(j)*2^(j-1)+m;
end
x(i) = Xx + m *(Xs - Xx)/(2^L - 1);
Fit(i) = func1(x(i));
end
maxFit = max(Fit);
minFit = min(Fit);
rr = find(Fit == maxFit);
fBest = f(rr(1,1),:);
xBest = x(rr(1,1));
Fit = (Fit - minFit)/(maxFit - minFit);
%%%%%%%%Copy%%%%%
sum_Fit = sum(Fit);
fitvalue = Fit./sum_Fit;
fitvalue = cumsum(fitvalue);
ms = sort(rand(NP,1));
fiti = 1;
newi = 1;
while newi <= NP
if (ms(newi)) < fitvalue(fiti)
nf(newi,:) = f(fiti,:);
newi = newi + 1;
else
fiti = fiti + 1;
end
end
%%%%%%%%%%交叉%%%%%%%
for i = 1 : 2 : NP
p = rand;
if p < Pc
q = randin(1,L);
for j = 1 : L
if q(j) == 1
temp = nf(i+1,j);
nf(i+1,j)=nf(i,j);
nf(i,j) = temp;
end
end
end
end
%%%%%%%%%变异%%%%%%
i = 1;
while i <= round(NP*Pc)
h = randi(1,1,[1,NP]);
for j = 1 : round(L*Pc)
g = randi(1,1,[1,L]);
nf(h,g) =~ nf(h,g);
end
i = i + 1;
end
f = nf;
f(1,:) = fBest;
trace(k) = maxFit;
end
xBEst;
figure
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')
%%%%%%适应度函数%%%
function result = func1(x)
fit = x + 10*sin(5*x) + 7 * cos(4*x);
result = fit;
end
问题:func1并没有定义 ,为什么可以在后面直接使用
这个代码是要直接写在Command window里 还是建立.m文件写在里面,如何运行?
程序源代码就是上面这些 ,应该如何更改才能运行 ,希望大牛们能给初学者一点指导,谢谢~
慕沐林林
阿晨1998
森栏