⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quantum.m

📁 一种带量子门的改进的遗传算法matlab源程序。
💻 M
字号:
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=300;                         % 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>maxgen*2/3
       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*newbestindex-1,:);
       best.chrom(2,:)=individuals.chrom(2*newbestindex,:);
       judge=0;
   else judge=judge+1;     % increase the disaster counter
   end
    avgfitness=[avgfitness;sum(individuals.fitness)/sizepop];
    bestfitness=[bestfitness;best.fitness];
end


%toc;

 xx=[xx;best.fitness toc];    % 用于存放运行100次的结果
end        % 运行100次循环结束
 save xx xx     % 保存运行100次的结果

% 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]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -