| 我帮我老师发个求助帖 这是main.m %% 清空环境 clc clear %% 参数初始化 %粒子群算法中的两个参数 c1 = 2; c2 = 2; maxgen=200; % 进化次数 sizepop=20; %种群规模 Vmax=[71 81 83 72 71 79 82 71 71 75 82 71 71 71 75 84 82 89 71 75 71 71 71 71 75 71 73 71 71 71 71 71 74 74 71]; %粒子速度上限 Vmin=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; popmax=[71 90 92 81 80 88 91 94 98 102 115 104 104 104 112 123 121 128 129 128 133 135 142 143 152 149 156 150 156 158 159 159 162 163 166]; %粒子位置上限 popmin=[0 9 9 9 9 9 9 23 27 27 33 33 33 33 37 39 39 39 58 53 62 64 71 77 77 78 83 79 85 87 88 88 88 89 95]; wmax=0.9; %惯性权重最大值 wmin=0.4; %惯性权重最小值 %% 产生初始粒子和速度 for i=1:sizepop pop(i,:)=ceil(rands(1,35)); %初始种群 V(i,:)=ceil(rands(1,35)); %初始化速度 %计算适应度 fitness(i)=fun(pop(i,1),pop(i,2),pop(i,3),pop(i,4),pop(i,5),pop(i,6),pop(i,7),pop(i,8),pop(i,9),pop(i,10),pop(i,11),pop(i,12),pop(i,13),pop(i,14),pop(i,15),pop(i,16),pop(i,17),pop(i,18),pop(i,19),pop(i,20),pop(i,21),pop(i,22),pop(i,23),pop(i,24),pop(i,25),pop(i,26),pop(i,27),pop(i,28),pop(i,29),pop(i,30),pop(i,31),pop(i,32),pop(i,33),pop(i,34),pop(i,35)); %染色体的适应度 end %找最好的染色体 [bestfitness bestindex]=min(fitness); zbest=pop(bestindex,:); %全局最佳 gbest=pop; %个体最佳 fitnessgbest=fitness; %个体最佳适应度值 fitnesszbest=bestfitness; %全局最佳适应度值 %% 迭代寻优 for i=1:maxgen for j=1:sizepop %速度更新 w=wmax-(wmax-wmin)/maxgen*i; V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:)); for k=1:35 if (V(j,k)>=Vmax(k)) V(j,k)=Vmax(k); end if (V(j,k)<=Vmin(k)) V(j,k)=Vmin(k); end end %种群更新 pop(j,:)=ceil(pop(j,:)+V(j,:)); for k=1:35 if (pop(j,k)>=popmax(k)) pop(j,k)=popmax(k); end if (pop(j,k)<=popmin(k)) pop(j,k)=popmin(k); end end while(pop(j,2)-pop(j,1)>=9&&pop(j,3)-pop(j,1)>=9&&pop(j,4)-pop(j,1)>=9&&pop(j,5)-pop(j,1)>=9&&pop(j,6)-pop(j,1)>=9&&pop(j,7)-pop(j,1)>=9&&pop(j,8)-pop(j,4)>=13&&pop(j,8)-pop(j,5)>=14&&pop(j,8)-pop(j,6)>=6&&pop(j,9)-pop(j,2)>=8&&pop(j,9)-pop(j,3)>=6&&pop(j,9)-pop(j,8)>=4&&pop(j,10)-pop(j,8)>=4&&pop(j,10)-pop(j,7)>=11&&pop(j,11)-pop(j,9)>=6&&pop(j,12)-pop(j,9)>=6&&pop(j,13)-pop(j,9)>=6&&pop(j,14)-pop(j,9)>=6&&pop(j,15)-pop(j,10)>=10&&pop(j,16)-pop(j,11)>=6&&pop(j,23)-pop(j,22)>=7&&pop(j,24)-pop(j,23)>=6&&pop(j,25)-pop(j,16)>=29&&pop(j,26)-pop(j,24)>=1&&pop(j,27)-pop(j,25)>=6&&pop(j,27)-pop(j,26)>=1&&pop(j,29)-pop(j,28)>=6&&pop(j,30)-pop(j,29)>=2&&pop(j,30)-pop(j,27)>=2&&pop(j,23)-pop(j,22)>=7&&pop(j,24)-pop(j,23)>=6&&pop(j,25)-pop(j,16)>=29&&pop(j,26)-pop(j,24)>=1&&pop(j,27)-pop(j,25)>=6&&pop(j,27)-pop(j,26)>=1&&pop(j,29)-pop(j,28)>=6&&pop(j,30)-pop(j,29)>=2&&pop(j,30)-pop(j,27)>=2&&pop(j,31)-pop(j,30)>=1&&pop(j,32)-pop(j,30)>=1&&pop(j,33)-pop(j,30)>=1&&pop(j,34)-pop(j,33)>=1&&pop(j,35)-pop(j,31)>=7&&pop(j,35)-pop(j,32)>=7&&pop(j,35)-pop(j,34)>=3) %适应度值 fitness(j)=fun(pop(j,1),pop(j,2),pop(j,3),pop(j,4),pop(j,5),pop(j,6),pop(j,7),pop(j,8),pop(j,9),pop(j,10),pop(j,11),pop(j,12),pop(j,13),pop(j,14),pop(j,15),pop(j,16),pop(j,17),pop(j,18),pop(j,19),pop(j,20),pop(j,21),pop(j,22),pop(j,23),pop(j,24),pop(j,25),pop(j,26),pop(j,27),pop(j,28),pop(j,29),pop(j,30),pop(j,31),pop(j,32),pop(j,33),pop(j,34),pop(j,35)); end % 个体最优更新 if fitness(j) < fitnessgbest(j) gbest(j,:) = pop(j,:); fitnessgbest(j) = fitness(j); end %群体最优更新 if fitness(j) < fitnesszbest zbest = pop(j,:); fitnesszbest = fitness(j); end end yy(i)=fitnesszbest; end %% 结果分析 zbest %% 结果分析 disp('*************************************************************') disp('函数的全局最优值为:') Solution=yy(i)' disp('*************************************************************') 这是fun.m function y =fun(pop1,pop2,pop3,pop4,pop5,pop6,pop7,pop8,pop9,pop10,pop11,pop12,pop13,pop14,pop15,pop16,pop17,pop18,pop19,pop20,pop21,pop22,pop23,pop24,pop25,pop26,pop27,pop28,pop29,pop30,pop31,pop32,pop33,pop34,pop35) pop(1)=pop1,pop(2)=pop2,pop(3)=pop3,pop(4)=pop4,pop(5)=pop5,pop(6)=pop6,pop(7)=pop7,pop(8)=pop8,pop(9)=pop9,pop(10)=pop10,pop(11)=pop11,pop(12)=pop12,pop(13)=pop13,pop(14)=pop14,pop(15)=pop15,pop(16)=pop16,pop(17)=pop17,pop(18)=pop18,pop(19)=pop19,pop(20)=pop20,pop(21)=pop21,pop(22)=pop22,pop(23)=pop23,pop(24)=pop24,pop(25)=pop25,pop(26)=pop26,pop(27)=pop27,pop(28)=pop28,pop(29)=pop29,pop(30)=pop30,pop(31)=pop31,pop(32)=pop32,pop(33)=pop33,pop(34)=pop34,pop(35)=pop35; sum=0; for i=1:35 sum=sum+pop(i); end y=sum; 请大神帮忙看看出啥问题了?而且这个程序在不同的电脑上运行的结果也不一样,运行速度也不一样,在实验室的机子上最多5分钟就出结果了,但是到我机子上就一个多小时都出不来结果,这是咋回事儿? |




雷达卡



京公网安备 11010802022788号







