?? update.m
字號:
% update 量子門更新策略
for j=1:n %n個個體,依次更新
if t==1
if fit(j)>=MAX0(number);
sign=1;
else sign=0;
end
elseif fit(j)>=MAX(number,t-1)%本代的最優解比上代保持的最優解
sign=1;
else sign=0;
end
i=0;
while i<m %n位
i=i+1;
if x(j,i)==0 %新解此位狀態為‘0’,即第j個個體的第i位 為0
if BEST(number,i)==0 %上代保持的最優解此位為0
angle=0;%不旋轉
elseif sign==0 %上代保持的最優解此位為‘1’,且新解不如上代保持的最優解適應度值高
angle=0;%不旋轉
elseif q(1,i,j)*q(2,i,j)>0 %上代保持的最優解此位為‘1’,且新解比上代保持的最優解適應度
%值高,且新解的‘0’態、‘1’態系數同號,即在一、三象限
angle=-0.05*pi;%順時針旋轉,使下一代系數更靠近‘0’態
elseif q(2,i,j)==0 %上代保持的最優解此位為‘1’,且新解比上代保持的最優解適應度值高,
%且新解在實軸上,即b(i)即‘0’態,不旋轉
angle=0;
else
angle=0.05*pi;%新解比上代保持的最優解適應度高,還包括兩種情況,
%一是新解在虛軸上,即a(i)處于‘1’態,此時無論順時針還是逆時針旋轉
%都可以,使下個狀態更靠近‘0’態,本程序使用順指針逆時針旋轉,
%第二種情況是 在二四象限 ,此時必須逆時針旋轉
end
elseif BEST(number,i)==0 %新解狀態為1,且保持的最優解狀態為0
if sign==0 % 新解適應度值小于保持的最優解適應度值
if q(1,i,j)*q(2,i,j)>0%一三象限,所以順時針旋轉
angle=-0.01*pi;
elseif q(2,i,j)==0 %新解適應度值小于保持的最優值,且新解在實軸上,不旋轉??
angle=0;
else %兩種情況。一是新解在虛軸上,即在‘1’態,順時針逆時針
%旋轉都可,本程序使用逆時針旋轉,二是在三四象限,逆時針旋轉
angle=0.01*pi;
end
elseif q(1,i,j)*q(2,i,j)>0 %新解為1,保持的最優解為0,且新解適應度值比保持的最優解高,
%且在一三象限,所以逆時針旋轉
angle=0.025*pi;
elseif q(1,i,j)==0 %新解為1,保持的最優解為0,且新解適應度值比保持的最優解高,新解在虛軸上,不旋轉
angle=0;
else %新解為1,保持的最優解為0,且新解適應度值比保持的最優解高,兩種情況
%一是新解在虛軸上,順時針逆時針旋轉都可,本程序使用順時針旋轉,二是在三四象限,順時針旋轉
angle=-0.025*pi;
end
elseif sign==0%新解和保持的最優解都是1,且新解適應度值小于保持最優解
if q(1,i,j)*q(2,i,j)>0 %一三象限,逆時針旋轉?
angle=0.005*pi;
elseif q(1,i,j)==0 %新解在虛軸上
angle=0;
else %兩種情況。一是新解在實軸上,逆時針順時針旋轉都可,本程序采用順時針,二是三四象限,順時針旋轉
angle=-0.005*pi;
end
elseif q(1,i,j)*q(2,i,j)>0 %新解和保持的最優解都是1,且新解適應度值高于保持最優解,逆時針旋轉
angle=0.025*pi;
elseif q(1,i,j)==0 %新解和保持的最優解都是1,且新解適應度值高于保持最優解,且新解在虛軸上,不旋轉
angle=0;
else %新解和保持的最優解都是1,且新解適應度值高于保持最優解。包括兩種情況
%一是新解在實軸上,逆時針旋轉順時針旋轉都可以。本程序采用順時針旋轉
%二是在二四象限,順時針旋轉
angle=-0.025*pi;
end
z=[cos(angle),-sin(angle);sin(angle),cos(angle)]*[q(1,i,j),q(2,i,j)]';%采用量子門更新
q(1,i,j)=z(1);q(2,i,j)=z(2);%新的‘0’態、‘1’態系數
end
end
q;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -