www.pudn.com > SGAProToolboxVer.zip > MUTATION.M


function [decimal_space_mutation,binary_space_mutation]=mutation(min_confines,max_confines,decimal_space_crossover,binary_space_crossover,bits,probability_mutation) 
 
%Mutation Function Of Simple Genetic Algorithm Program (Version 1.0.0.1 ) 
%support multi-parameters 
%By chen yi ,CQU .QQ:2376635  Email:cdey@10mail.net  (April,20th,2002) 
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
% mutation of single point method 
% 
%~~ 
%min_confines is the minimum of input value in decimal-space 
%max_confines is the maximum of input value in decimal-space 
% 
%decimal_space_crossover &.binary_space_crossover is from Crossover.m 
%probability_mutation is given by yourself (about:0.001~0.01) 
%~~~ 
%e.g. 
%[binary_space,bits_sum,bits]=coding([1,2,3,4],[7,8,9,10],10,[0.01,0.01,0.01,0.01]) 
%[decimal_space]=decoding([1,2,3,4],[7,8,9,10],binary_space,bits) 
%[fitness_value]=fitness(decimal_space) 
%[max_fitness_temp_position,decimal_space_selected,binary_space_selected,maxfitness]=selection(decimal_space,binary_space,fitness_value,bits) 
%[decimal_space_crossover,binary_space_crossover]=crossover([1,2,3,4],[7,8,9,10],decimal_space_selected,binary_space_selected,bits,0.6) 
%[decimal_space_mutation,binary_space_mutation]=mutation([1,2,3,4],[7,8,9,10],decimal_space_crossover,binary_space_crossover,bits,0.01) 
% 
% See Also  DECODING,CODING ,SELECTION,CROSSOVER,FITNESS, 
%           FITNESS_FUNCTION, SGA	 
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
 
 
[population,bits_sum]=size(binary_space_crossover); 
[population,parameter_numbers]=size(decimal_space_crossover); 
 confines_deta=(max_confines-min_confines);  
 coded_step=confines_deta./(2.^bits-1); 
probability_mutation_numbers=ceil(probability_mutation*population); 
%initialize binary_space_mutation &.decimal_space_mutation 
binary_space_mutation=binary_space_crossover;    
decimal_space_mutation=decimal_space_crossover; 
%~~~~~~~~~~~~~~~~~~~~~ 
%bits_No is important 
bits_No=[0,bits]; 
% to find out which is the binary parameter 
%i=0:0.1:population; 
for i=1:1:parameter_numbers 
   %to avoid that Index exceeds matrix dimensions 
    bits_No(i+1)=bits_No(i+1)+bits_No(i); 
end 
 
%~~~~~~~~~~~~~~~~~~~~~~ 
% 
if probability_mutation_numbers >=1 
   for i=1:1:probability_mutation_numbers; 
       mutation_position(i)=randint(1,1,[1,population]); 
       for j=1:1:parameter_numbers 
           mutation_point(j)=randint(1,1,[bits_No(j)+1,bits_No(j+1)]);             
           binary_space_mutation(mutation_position(i),mutation_point(j))=1-binary_space_crossover(mutation_position(i),mutation_point(j));    
       end 
   end 
else  
   break; 
end; 
     
     
%binary_space_mutation_sparse=sparse(binary_space_mutation);  
 
%~~~~~~~~~~~~~~~~~~~~~~~~~~~`plot~~~~~~~~~~~~~~~~~~~~~ 
% SPY Visualize sparsity pattern. 
% SPY(S) plots the sparsity pattern of the matrix S. 
%figure(7) 
%spy(binary_space_mutation_sparse,'g'); 
%title('the mutation binary-space in sparsity pattern'); 
%xlabel('Non-Zero bits'); 
%ylabel('Population'); 
%hold on; 
%i=0:0.1:population; 
%for j=1:1:parameter_numbers 
%    plot(bits_No(j+1),i,'r'); 
%end 
% 
%decoding binary_space_mutation to  decimal_space_mutation 
% different from X=Decimal*coded_step+min_confines 
for i=parameter_numbers:-1:1 
    for j=population:-1:1                       
        for k=bits_No(i+1):-1:(bits_No(i)+1) 
            twos(j,k)=pow2(bits_No(i+1)-k)*binary_space_mutation(j,k); 
        end  
        twos_sum(j,i)=sum(twos(j,:),2); 
        decimal_space_mutation(j,i)=twos_sum(j,i)*coded_step(i)+min_confines(i); 
    end   
       twos=zeros(population,bits_sum);%clear twos at present i  
           % X=Decimal*coded_step+min_confines 
end    
         
%figure(8)        
%i=population:-1:1; 
%plot(decimal_space_mutation(i,:),i,'*'); 
%xlabel('mutation decimal-space'); 
%ylabel('population'); 
%title('the crosponding deciaml-space of binary-space'); 
%grid on;