0

我想implment遗传算法的MATLAB中不使用工具箱。将此作为参考启动http://www.mathworks.com/matlabcentral/answers/6027-ga-implementation-in-matlab-without-using-the-toolbox实现遗传算法的MATLAB中没有工具箱

Changed the variables accordingly 
%% function f = ga_test(x) 
%% f = 120*x1 + 120*x2 + 120*x3 + 120*x4 + 120*x5 + 120*x6 + 120*x7 + 120*x8 + 120*x9 + 120*x10 + 40*y1 + 40*y2 + 40*y3 + 40*y4 + 40*y5 + 40*y6 + 40*y7 + 40*y8 + 40*y9 + 40*y10+ 40*y11 + 40*y12 + 40*y13 + 40*y14 + 40*y15 + 40*y16 + 40*y17 + 40*y18 + 40*y19+ 40*y20; 
% Setup the Genetic Algorithm 
fitnessfunction= @ga_test; 
N = 1475; % number of optimization (decision) variables 
popsize = 268 ; % set population size = number of chromosomes 
max_iteration = 50; % max number of iterations 
minimum_cost = 120; % minimum cost 
mutation_rate = 0.01; % mutation rate 
selection_rate = 0.5; % selection rate: fraction of population 
nbits = 1; 
Nt = nbits*N; % total number of bits in a chormosome 
number_mutations = mutation_rate*N*(popsize-1); % number of mutations 
% #population members that survive (Nkeep = Xrate*Npop); Nkeep survive for mating, and (Npop - Nkeep) are discarded to make room for the new offspring 
keep = floor(selection_rate*popsize); 
iga=0; % generation counter initialized 
pop=TrainVec;%round(rand(popsize,Nt)); % random population of 1s and 0s 
cost=feval(fitnessfunction,pop); % calculates population cost using fitnessfunction 
[cost,ind]=sort(cost); % min cost in element 1 
pop=pop(ind,:); % sorts population with lowest cost first 
minc(1)=min(cost); % minc contains min of population 
while iga < max_iteration %Iterate through generations 
iga=iga+1; % increments generation counter 
% Pair and mate 
M=ceil((M-keep)/2); % number of matings weights chromosomes based upon position in list probability distribution function 
prob=flipud([1:keep]'/sum([1:keep])); 
odds=[0 cumsum(prob(1:keep))]; 
pick1=rand(1,popsize); % mate #1 
pick2=rand(1,popsize); % mate #2 
% parents contain the indicies of the chromosomes that will mate 
ic=1; 
while ic<=M 
for id=2:keep+1 
if pick1(ic)<=odds(id) & pick1(ic)>odds(id-1) 
ma(ic)=id-1; 
end % if 
if pick2(ic)<=odds(id) & pick2(ic)>odds(id-1) 
pa(ic)=id-1; 
end % if 
end % id 
ic=ic+1; 
end % while 
%_______________________________________________________ 
% Performs mating using single point crossover 
ix=1:2:keep; % index of mate #1 
xp=ceil(rand(1,M)*(Nt-1)); % crossover point 
pop(keep+ix,:)=[pop(ma,1:xp) pop(pa,xp+1:Nt)]; 
% first offspring 
pop(keep+ix+1,:)=[pop(pa,1:xp) pop(ma,xp+1:Nt)]; 
% second offspring 
%_______________________________________________________ 
% Mutate the population 
number_mutations=ceil((popsize-1)*Nt*mutation_rate); % total number of mutations 
mrow=ceil(rand(1,number_mutations)*(popsize-1))+1; % row to mutate 
mcol=ceil(rand(1,number_mutations)*Nt); % column to mutate 
for ii=1:number_mutations 
pop(mrow(ii),mcol(ii))=abs(pop(mrow(ii),mcol(ii))-1); 
end 
%_______________________________________________________ 
% The population is re-evaluated for cost decode 
cost(2:popsize)=feval(fitnessfunction,pop(2:popsize,:)); 
%_______________________________________________________ 
% Sort the costs and associated parameters 
[cost,ind]=sort(cost); 
pop=pop(ind,:); 
%_______________________________________________________ 
% Stopping criteria 
if iga>maxit | cost(1)<mincost 
break 
end 
[iga cost(1)] 
end 

代码似乎停止在该行成本= feval(fitnessfunction,流行)执行。

不知道如何继续。需要一些指导。如果没有使用工具箱实现GA的更好方法,也希望听到这一点。谢谢..

+0

这功能吗?你有没有定义ga_test? – carlosdc 2012-02-07 14:30:13

+0

这是我的五年计划。我逼债知道如何定义ga_test ... – lakesh 2012-02-07 14:33:07

+0

提示:要学会[格式和缩进代码(http://blogs.mathworks.com/desktop/2009/05/11/保持你的代码可读性与智能缩进/)正确。 – 2012-02-14 08:21:16

回答

3

会发生什么事,如果你保存这样的:到一个名为ga_test.m没有注释文件

%% function f = ga_test(x) 
%% f = 120*x1 + 120*x2 + 120*x3 + 120*x4 + 120*x5 + 120*x6 + 120*x7 + 120*x8 + 120*x9 + 120*x10 + 40*y1 + 40*y2 + 40*y3 + 40*y4 + 40*y5 + 40*y6 + 40*y7 + 40*y8 + 40*y9 + 40*y10+ 40*y11 + 40*y12 + 40*y13 + 40*y14 + 40*y15 + 40*y16 + 40*y17 + 40*y18 + 40*y19+ 40*y20; 

?我认为这是你的问题。

+0

功能是否正确?或者它是x^1 + x^2? – lakesh 2012-02-07 15:31:50

+0

x(1),x(2)等等,我想。 – carlosdc 2012-02-07 16:21:44

+0

如何导出函数f?它因不同的应用而异? – lakesh 2012-02-07 16:24:13