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

📄 update.m

📁 遗传量子算法求解背包问题Matlab源码
💻 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 + -