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

📄 gate.m

📁 量子遗传算法MATLAB源代码
💻 M
字号:
% 生成量子门并更新个体
%Gate
%individualP=zeros(2,n,4,k);           量子态个体
%individualR=zeros(k,4);               十进制态个体
%communityP=zeros(2,n,4,k,pop);        种群量子位数据库
%communityR=zeros(k,4,pop);            种群实数解数据库
%E=zeros(1,pop);                       种群适应度
function [individualQ,individualR]=Gate(n,k,ii,preGen,preGenC,maxGen,numLayer,bestIndQ,bestIndR,individualQ,individualR)
d1=zeros(1,n,4,k);
d2=zeros(1,n,4,k);
e1=zeros(1,n,4,k);
e2=zeros(1,n,4,k);
f=zeros(1,n,4,k);
theta=zeros(1,n,4,k);

%%%%%%%%%%%%%%%%%%%%%%%%

for i=1:4
    for j=1:k
        e1(1,:,i,j)=atan((bestIndQ(2,:,i,j)./bestIndQ(1,:,i,j)));
        e2(1,:,i,j)=atan((individualQ(2,:,i,j))./(individualQ(1,:,i,j)));
    end
end

%%%%%%%%%%%%%%%%%%%%%%%%%
%for i=1:4
%    for j=1:k
%        d1(1,:,i,j)=bestIndQ(1,:,i,j).*bestIndQ(2,:,i,j);
%        d2(1,:,i,j)=individualQ(1,:,i,j).*individualQ(2,:,i,j);
%    end
%end
%%%%%%%%%%%%%%%%%%%%%%
%for j=1:k
%    for i=1:4
%        for ii=1:n
%            if d1>0
%                if d2>0
%                    if abs(e1)>abs(e2)
%                        f(1,ii,i,j)=1;
%                    else
%                        f(1,ii,i,j)=-1;
%                    end
%                else
%                    if abs(e1)>abs(e2)
%                        f(1,ii,i,j)=-1;
%                    else
%                        f(1,ii,i,j)=1;
%                    end
%                end
%            else
%                if d2>0
%                    if abs(e1)>abs(e2)
%                        f(1,ii,i,j)=-1;
%                    else
%                        f(1,ii,i,j)=1;
%                    end
%                else
%                    if abs(e1)>abs(e2)
%                        f(1,ii,i,j)=1;
%                    else
%                        f(1,ii,i,j)=-1;
%                    end
%                end
%            end
%        end
%    end
%end
                
%%%%%%%%%%%%%%%%%%%%%%

for j=1:k
    for i=1:4
        for ii=1:n
            if e1(1,ii,i,j)>0
                if e2(1,ii,i,j)>0
                    if e1(1,ii,i,j)>=e2(1,ii,i,j)
                        f(1,ii,i,j)=1;
                    else
                        f(1,ii,i,j)=-1;
                    end
                else 
                    f(1,ii,i,j)=sign(bestIndQ(1,ii,i,j).*individualQ(1,ii,i,j));
                end
            else 
                if e2(1,ii,i,j)>0
                    f(1,ii,i,j)=-sign(bestIndQ(1,ii,i,j).*individualQ(1,ii,i,j));;
                else
                    if e1(1,ii,i,j)>=e2(1,ii,i,j)
                        f(1,ii,i,j)=sign(bestIndQ(1,ii,i,j).*individualQ(1,ii,i,j));
                    else
                        f(1,ii,i,j)=-sign(bestIndQ(1,ii,i,j).*individualQ(1,ii,i,j));
                    end
                end  
            end
        end
    end
end
%%%%%%%%%%%%%%%%%%%%%

%计算旋转角
%kk=(pi/2)*exp(-(mod(preGen,100))/10);
kk=(pi/(1+numLayer))*exp(-(mod(preGen,100))/10);
%kk=10*exp(-preGen/maxGen);
%kk=0.01*pi;
theta=kk*f;

%%%%%%%%%%%%%%%%%%%%

%个体通过量子门更新,生成新个体的量子位数据库
for j=1:k
    for i=1:4                        
        for ii=1:n                               %单条染色体通过量子门更新
            gate=[cos(theta(1,ii,i,j)),-sin(theta(1,ii,i,j));
            sin(theta(1,ii,i,j)),cos(theta(1,ii,i,j))];                                     %旋转量子门
            individualQ(:,ii,i,j)=gate*individualQ(:,ii,i,j);     
        end
    end
end

%%%%%%%%%%%%%%%%%%%%

%生成新个体的实数解数据库
for j=1:k
    for i=1:4
        [individualR(i,j)]=tranQ2R(individualQ(1,:,i,j),n,i,j,numLayer,bestIndR);
    end
end
     
     
     
     
 

⌨️ 快捷键说明

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