📄 gate.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 + -