%------交叉变异的粒子群优化算法(Particle Swarm Optimization)-----------
%------作用:求解货物配装问题
%------作者:廖文志(mrlwz@163.com)
%------单位:华南理工大学计算数学硕2006
%------------------------------------------------------------------
%------初始格式化--------------------------------------------------
%clear all;
tic
clc;
%format long;
%------给定初始化条件----------------------------------------------
c1=2; %学习因子1
c2=2; %学习因子2
w=0.7; %惯性权重
MaxDT=20; %最大迭代次数
HX=10;
D=8; %搜索空间维数(未知数个数)
N=40; %初始化群体个体数目
%K=10^6; %设置精度(在已知最小值时候用)
M=110;%货车载重
V=250;%货车容积
weight=[64,52,50,41,22,20,14,2];%物体重量
volume=[110,108,96,80,49,50,40,7];%物体体积
%load('psodata.mat');
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
x=round(rand([N D])); %随机初始化位置
v=rand([N D]); %随机初始化速度
%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------
for i=1:N
plbest=fitness(x(i,:),D,M,V,weight,volume);%plbest表示个体最优值
pxbest=x(i,:);%pxbest表示个体最优位置
end
gxbest=x(1,:); %gxbest为全局最优位置
for i=2:N
if fitness(x(i,:),D,M,V,weight,volume)>fitness(gxbest,D,M,V,weight,volume)
gxbest=x(i,:);
end
end
%fitness(gxbest,D,M,V,weight,volume)
%%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
sumv=0;
summ=0;
for H=1:HX
Sum=0;
SUM=0;
for t=1:MaxDT
for i=1:N
v(i,:)=w*v(i,:)+c1*rand()*(pxbest-floor(x(i,:)))+c2*rand()*(gxbest-floor(x(i,:)));
x(i,:)=x(i,:)+v(i,:);
%%用于把每个分量取为0和1
for j=1:D
if rand()<=1/(1+exp(-v(i,j))) %Sigmoid函数
x(i,j)=0;
else
x(i,j)=1;
end
end
%x(i,:)
x1=crossover(x(i,:),gxbest,D);%把当前粒子与全局最优粒子的位置进行交叉
%x2=crossover(x1,y,D);
x3=mutation(x1);%把当前粒子的位置进行变异
if fitness(x3,D,M,V,weight,volume)>plbest
plbest=fitness(x3,D,M,V,weight,volume);
pxbest=x3;
end
end
if plbest>fitness(gxbest,D,M,V,weight,volume)
gxbest=pxbest;
end
glbest=fitness(gxbest,D,M,V,weight,volume);%glbest表示全局最优值
Sum=Sum+glbest(1);
aveg1=Sum/t;%体积平均
SUM=SUM+glbest(2);
aveg2=SUM/t;%载重平均
Z1(t)=aveg1;
Z2(t)=aveg2;
% X(t)=Pbest(1);
%Y(t)=Pbest(2);
%Q(t)=Pbest(3);
end
%%----------------最后给出计算结果-----------------------------
disp('*************************************************************')
disp('函数的全局最优位置为:')
Solution=gxbest
disp('最后得到的优化极值为:')
Result=fitness(gxbest,D,M,V,weight,volume)
WV=Result(1)
WM=Result(2)
Z1(H)=WV;
Z2(H)=WM;
%disp('箱子的体积利用率:')
sumv=sumv+WV;
%disp('货车的载重利用率:')
summ=summ+WM;
end
disp('重复10次所得到的体积平均数:')
avegv=sumv/HX
disp('重复10次所得到的重量平均数:')
avegm=summ/HX
disp('重复10次所得到的体积方差:')
fangchav=sqrt(sum((WV-avegv)^2))
disp('重复10次所得到的载重方差:')
fangcham=sqrt(sum((WM-avegm)^2))
%Z=sqrt(SUM);
%m=1:MaxDT;
%plot(m,X(m),'*',m,Y(m));
%xlabel('进化代数');
%ylabel('总代价');
%legend('装入箱子中的最大体积','装入箱子中物体重量');
%title('装入货车中的物体体积与进化代数的关系曲线');
%SUM=0;
%for m=1:MaxDT
% SUM=SUM+(X(m)-Y(m))^2;
%end
%disp('方差为:');
%SUM
save('PSOdata.mat','Z1','Z2');
figure;
m=1:MaxDT;
plot(m,Z1(m)/V,'*',m,Z2(m)/M);
xlabel('进化代数');
ylabel('利用率');
legend('体积平均利用率','质量平均利用率');
title('PSO解货物配装问题');
toc
disp('*************************************************************')
%----------------算法结束--------------------------------------
PSO_Solving_Multi_Aims.rar_MATLAB装箱问题_pso 背包_装箱问题最大_货物运输_货物配送 MA
版权申诉
75 浏览量
2022-07-14
20:54:57
上传
评论 1
收藏 6KB RAR 举报
weixin_42653672
- 粉丝: 93
- 资源: 1万+
最新资源
- 基于matlab实现图像处理,本程序使用背景差分法对来往车辆进行检测和跟踪.rar
- 基于matlab实现视频监控中车型识别代码,自己写的,希望和大家多多交流.rar
- sdk.config
- 基于matlab实现配电网三相潮流计算方法,对几种常用的配电网潮流计算方法进行了对比分析.rar
- 基于matlab实现配电网潮流 经典33节点 前推回代法潮流计算 回代电流 前推电压 带注释.rar
- 基于matlab实现模拟退火遗传算法的车辆调度问题研究,用MATLAB语言加以实现.rar
- 基于matlab实现蒙特卡洛的的移动传感器节点定位算法仿真代码.rar
- 华中数控系统818用户说明书
- 基于matlab实现卡尔曼滤波器完成多传感器数据融合 对多个机器人的不同传感器数据进行融合估计足球精确位置.rar
- 基于matlab实现进行简单车辆识别-车辆检测.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0