📄 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -