?? quantum.asv
字號:
function quantum
% This is quantum genetic algorithm(QGA)
% In this function ,it fulfils quantum genetic algorithm
clc;
clear;
global sizepop lenchrom
global judge
global maxgen gen
%----------------These can be modified as you like-----------------------
maxgen=500; % maximum generation
sizepop=10; % size of population
lenchrom=[8 8]; % length of bit of every varible
pcross=1;
pmutation=0.01;
judge=0; % disaster counter
%--------------------------------------------------------------------------
% xx=[]; % 用于存放運行100次的結果
% for internumber=1:50 % 運行10次
tic;
individuals=struct('fitness',zeros(1,sizepop),...
'chrom',[]); % structure of population
binary=[];
best=struct('fitness',0,'binary',[],'chrom',[]); % best individual
avgfitness=[]; % average fitness of population
% inivitialization
for i=1:sizepop*2
for j=1:sum(lenchrom)
individuals.chrom(i,j)=1/sqrt(2);
end
end
% 量子坍塌
binary=collapse(individuals.chrom,sizepop,lenchrom);
% 求適應度
for i=1:sizepop
x=binary(i,:);
individuals.fitness(i)=Aim1(x); % AimFunc(x) is the function for calculating fitness
end
[best.fitness bestindex]=max(individuals.fitness); % find maximum value which is best
% record the best individual to "best"
best.binary=binary(bestindex,:);
best.chrom(1,:)=individuals.chrom(2*bestindex-1,:);
best.chrom(2,:)=individuals.chrom(2*bestindex,:);
avgfitness=sum(individuals.fitness)/sizepop;
bestfitness=best.fitness;
% evolution begin
for gen=1:maxgen-1
% disaster
if judge>0.2*maxgen
individuals.chrom=disaster(best,sizepop,lenchrom);
end
% 量子坍塌
binary=collapse(individuals.chrom,sizepop,lenchrom);
% calculate fitness
for i=1:sizepop
x=binary(i,:);
individuals.fitness(i)=Aim1(x); % AimFunc(x) is the function for calculating fitness
end
% quantum cross
% individuals.chrom=Qcross(pcross,individuals.chrom,sizepop,lenchrom);
% quantum mutation
%individuals.chrom=Qmutation(pmutation,individuals.chrom,sizepop,lenchrom);
% quantum gate
individuals.chrom=Qgate1(individuals,best,binary,sizepop,lenchrom);
[newbestfitness,newbestindex]=max(individuals.fitness); % find maximum value which is best
% record the best individual to "best"
if best.fitness<newbestfitness
best.fitness=newbestfitness;
best.binary=binary(newbestindex,:);
best.chrom(1,:)=individuals.chrom(2*bestindex-1,:);
best.chrom(2,:)=individuals.chrom(2*bestindex,:);
judge=0;
else judge=judge+1; % increase the disaster counter
end
avgfitness=[avgfitness;sum(individuals.fitness)/sizepop];
bestfitness=[bestfitness;best.fitness];
end
% draw fitness of every generation
plot([1:maxgen]',bestfitness,'r-*',[1:maxgen]',avgfitness,'b-o');
title(['適應度曲線 ' '終止代數=' num2str(maxgen)]);
xlabel('進化代數');ylabel('適應度');
legend('最佳適應度','平均適應度');
disp('適用度 ');
disp([best.fitness]);
toc;
% xx=[xx;best.fitness toc]; % 用于存放運行100次的結果
%end % 運行100次循環結束
% save xx xx % 保存運行100次的結果
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -