1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y52Xkp9u
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
在PSO中,群中的每个粒子表示为向量。在投资组合优化的背景下,这是一个权重向量,表示每个资产的分配资本。矢量转换为多维搜索空间中的位置。每个粒子也会记住它最好的历史位置。对于PSO的每次迭代,找到全局最优位置。这是群体中最好的最优位置。一旦找到全局最优位置,每个粒子都会更接近其局部最优位置和全局最优位置。当在多次迭代中执行时,该过程产生一个解决该问题的良好解决方案,因为粒子会聚在近似最优解上。
4.部分源码
dim = nvar; %变量数量
Lmin = lb;
Lmax = ub;
c1 = 2.5; %学习因子1
c2 = 2.5; %学习因子2
w = 1; %惯性权重
Iters = 200; %最大迭代次数
Num = 400;
%初始化种群的个体(可以在这里限定位置和速度的范围)
for i = 1:nvar
for j = 1:Num
x(j,i) = Lmin(i) + (Lmax(i)-Lmin(i))*rand(1,1); %随机初始化位置
v(j,i) = Lmin(i) + (Lmax(i)-Lmin(i))*rand(1,1); %随机初始化速度
end
end
y = [];
%先计算各个粒子的适应度,并初始化Pi和Pg
for i=1:Num
i
[p(i),z1,z2,z3] = func_F(x(i,:));
y(i,:) = x(i,:);
end
%全局最优
pg = x(1,:);
for i=2:Num
i
[pa(i),z1,z2,z3] = func_F(x(i,:));
pb(i) = func_F(pg);
if pa(i) < pb(i)
pg=x(i,:);
end
end
for t=1:Iters
t
for i=1:Num
v(i,:) = w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
x(i,:) = x(i,:)+v(i,:);
[pa(i),z1,z2,z3] = func_F(x(i,:));
if pa(i)<p(i)
p(i) = pa(i);
y(i,:)= x(i,:);
end
[pb(i),z1,z2,z3] = func_F(pg);
if p(i)<pb(i)
pg=y(i,:);
end
[Pbest(i),z1_(i),z2_(i),z3_(i)] = func_F(pg);
end
Fs(t)=mean(Pbest);
Y1 = z1_;
Y2 = z2_;
Y3 = z3_;
tmps = pg;
end
figure;
plot(Fs);
xlabel('PSO迭代次数');
ylabel('fitness');
grid on
pg
II=15;
Total_time = Y1(II);
Total_WT = Y2(II);
max_WT = Y3(II);
X = tmps;
% Z=fitness(X)
%显示甘特图
[V,I] = sort(X(1:end));
seq1 = sort(I(1:N1));
seq2 = sort(I(N1+1:N1+N2));
seq3 = sort(I(N1+N2+1:N1+N2+N3));
seq4 = sort(I(N1+N2+N3+1:N1+N2+N3+N4));%选择了任务3的计算机器
seq5 = sort(I(N1+N2+N3+N4+1:N1+N2+N3+N4+N5));%选择了任务3的计算机器
x1 = mach(seq1);
x2 = mach(seq2);
x3 = mach(seq3);
x4 = mach(seq4);
x5 = mach(seq5);
for i = 1:N1
c1(1,i) = time1(x1(i));
end
for i = 1:N2
c2(1,i) = time2(x2(i));
end
for i = 1:N3
c3(1,i) = time3(x3(i));
end
for i = 1:N4
c4(1,i) = time4(x4(i));
end
for i = 1:N5
c5(1,i) = time5(x5(i));
end
xx = [x1,x2,x3,x4,x5]
seq = [seq1,seq2,seq3,seq4,seq5]
cc = [c1,c2,c3,c4,c5]
%[x y w h]
LEN = N1+N2+N3+N4+N5;
rec1(:,LEN)=[0,0,0,0]';
rec2(:,LEN)=[0,0,0,0]';
rec3(:,LEN)=[0,0,0,0]';
rec4(:,LEN)=[0,0,0,0]';
rec5(:,LEN)=[0,0,0,0]';
end
.........................................................
Timesave5(cnt5)=cc(idx);
end
end
02_103m