我帮我老师发个求助帖
这是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分钟就出结果了,但是到我机子上就一个多小时都出不来结果,这是咋回事儿? |