【优化车间布局】遗传算法GA求解车间布局优化问题【含Matlab源码 3212期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、 二维装箱简介

1 引言
二维装箱问题是随着计算机技术的产生而出现的,大量出现 在 机 械 制 造、皮革服装加 工、汽车、造船、货物装载以及大规模集成电路板的设计等领域。排样布局的优劣直接与材料的成本及经济效益相关。目前主要存在的问题是材料的利用率偏低,造成巨大的浪费。对于规模较大的生产厂家来说,即使是材料利用率有很小的提升,也会带来巨大的经济效益。
根据目标的不同,二维装箱问题可以分为以下几类:箱柜装载问题(binpackingproblem):给定一些不同类型的矩形箱子和一些规格一致的矩形容器,问题是要把所有箱子装入最少数量的容器中。
容 器 装 载 问 题 (containerpackingprob-lem):所有箱子要装入一个宽度为有限数值的矩形容器,它的高度不限,要求将所有物品放入容器中,
并取得最小的放置高度,使容器利用率最高。 · 背包装载 问 题(knapsackloadingprob-lem):每个箱子有一定的价值,背包装载是选择箱子的一部分装入容器中,使得装入容器中的箱子总价值最大。
本文主要研究第二类装箱问题。目前提出的基于遗传算法的装箱算法主要有BL(bottomleft)算法、下台阶算法、最低水平线算法和基于最低水平线的搜索算法。其中下台阶算法是在 BL算法的基础上的改进,最低水平线算法又在此基础上改进,基于最低水平线的搜索算法则是在最低水平线算法基础上又提出的改进。本文提出一种新的排列方法,通过对多组实验结果进行测试比较,证明了本文算法的有效性。

2 问题描述
对于所要研究的二维装箱问题,可作如下抽象:给定一个矩形容器A,其宽度和高度分别为 W 和H。另有n 个 矩 形 物 块,其宽度和高度分别为wi,hi(i=1,2,…,n)。确定排列方案,将所有物块放入矩形箱子,并使其所占用的空间最小。
排列过程中须满足以下要求: 1)放入的任意物块的任意部分均不超出箱子边界。2)任意两个物块的任意部分互不重叠。

3 装箱算法
在人工排列的过程中,为了使物块占用的空间最小,我们总是试图将物块放置在尽可能 低,且尽可能靠左的位置。在将物块放得尽可能低的过程中,物块最终会受到之前放入的物块的上边缘或是箱子底面边界的阻 挡。在将物块放得尽可能靠左的过程中,物块最终也会受到之前放入的物块的右侧边缘或是箱子左侧边界的阻挡。作为物块的左侧边与下侧边的交点,其左下角点在放置过程中会同时受到之前放入的物块的上边缘或是箱子底面边界和之前放入的物块的右边缘或是箱子左侧边界的阻挡。所以在放置物块的过程中,会以其左下角点作为参考点(referencepoint)。

3.1 可放置点
以箱子的左下角点为原点,以箱子的底边为x轴,以箱子左侧边为y 轴。在放入第一个物块时,坐标原点为坐标系中唯一的可放置点 (availablepoint)。在放入第一个物块之后,位于坐标原点的可放置点被占用,同时在物块的右下角点和左上角点产生两个新的可 放 置 点。第一个放入的物块的宽度和高度分别为 w1和h1,则产生的两个可放置点坐标为(w1,0)、(0,h1)。假设第二个箱子占用了点(w1,0),则删除(w1,0)点,同时增加因物块的右侧面而产生的可放置点(w1+w2,0)。至于物块的上侧面产生的可放置点,应当有以下几种情况: 1)如果h2>h1,则产生可放置点(0,h2);
2)如果h2 =h1,则产生的可放置点与第一个物块产生的可放置点(0,h1)重合; 3)如果h2<h1,则产生可放置点(w1,h2)。
从放置过程中可以看出,在放入一个物块的过程中,占用了一个可放置点,同时最多增加二个可放置点。因此,考虑第i个箱子时,最多有i个可放置点。而在实际操作过程中我们发现,由于重叠等情况的出现,可放置点通常会少于i个。
在这里插入图片描述
3.2 可放置空间
为了将物块放入某个可放置点,需要该点在x轴方向和y轴方向有足够的空间,至少能够容纳物块的宽度和高度。 将x轴方向的可放置空 间(availablespace)称为x空间,将y轴方向的可放置空间称为y 空间。一般情况下x空间为从可放置点的横坐标开始,一直向右延伸直到接触到已放入物块的侧面或是箱子的壁为止的这段距离。同样,y空间为从可放置点的纵坐标开始,一 直向上延伸直到接触到已放入物块的底面或是箱子的壁为止的这段距离。
在得到了可放置空间之后,物块的放置过程就变成了简单的排序与比较过程,不需要将物块放入某个可放置点,就能检验其是否合适放入该点。极大地简化了计算过程,提高了计算速度。
在这里插入图片描述
3.3 可放置点的刷新
在放入一个新的物块之后,会产生新的可放置点,这就需要对可放置点的集合进行刷新。同时在放入物块的过程中,有些可放置点虽然没有被占用,但会被物块覆盖,这种情况下就需要对可放置点的坐标进行调整。对可放置点进行调整的过程中,也需要对可放置 空 间进行调整,这个过程称为可放置点的刷新(renovationofavailablepoints)。尤其需要说明的是,可放置点不会因为被覆盖或是被阻挡而删除,只是其x坐标或是y坐标以及x空间或是y空间会受到影响。可放置点只会因为以下几种原因被删除: 1)被放入的物块占用; 2)因放入物块的影响使得可放置点的x 空间小于尚未放入的物块中最小的宽度值,或是可放置点的y空间小于尚未放入的物块中最小的高度值; 3)后放入的物块产生的可放置点与现有的可放置点出现重叠,则删除其中的一个。这样就使一些没有被当前放入的物块利用就被封闭在了一个小空间里,但依然有希望被后续放入的物块利用的可放置点得以保留。这样做可以有效地提高空间的利用率,同时降低对放 置 顺 序 的 敏 感 性,可以更快地接近最优的排列方案。这也是本算法的重要特点。
在这里插入图片描述
3.4 装箱算法
综上,我 们可以得到2D-packing 算 法。算法以物块集合B={b1,b2,…,bn}为输入,返回此次排列得到的空间 利 用 率,用use 表示可放置点的集
合,矩形容器的宽度和高度分别为W和H。算法:2D-packing(B)初始可放置点use=[0,0,W,H];
Fori=1:n
待放置物块的宽度为 wi,高度为hi;
  use按x坐标和y 坐标由小到大顺序排列;
   use中有m 个可放置点;
Forj=1:m
  If第j个可放置点的x 空间wi且y 空间hi
   返回j
  End
End
占用第j个可放置点;
  计算右侧边产生的可放置点;
   计算该点的可放置空间;
    计算上侧面产生的可放置点;
     计算该点的可放置空间;
      将新产生的可放置点放入 use集合的末尾;
  Fork=r:-1:1
   分别计算对各可放置点及可放置空间的影响;
  End
End
   计算所有物块的面积和;
    返回所有物块中最大的y坐标;
    计算空间利用率。
在该算法中,初始可放置点为坐标原点,可放置空间为箱子的宽度和高度,按顺序放置每个物块。将所有可放置点分别按x坐标和y坐标由小到大排列,依次检测每个可放置点的x空间和y空间能否容纳将要放入的物块,选择占用第一个满足要求的可放置点。然后计算物块产生的新的可放置点,向可放置点集合中加入新产生的点并删除已经占用的点。计算新放入的物块对其他可放置点及其可放置空间的影响。算法结束时,返回该排列方案对应的空间利用率,即装箱物块的总面积对箱子面积的比率。

4 遗传算法求解过程
遗传算法的主要运算过程如下:
1)编码:解空间中的解数据x,作为遗传算法的表现型形式。从表现型到基因型的映射称为编码。遗传算法在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合就构成了不同的点。在本算法中,将每一种排列方案编码成一个二进制字符串。
2)初始群体的生成:随机产生 N 个初始串结构数据,每个串结构数据称为一个个体,N个个体构成了一个群体。遗传算法以这N个串结构作为初始点开始迭代。设置进化代数计数器t←0;设置最大进化代数 T;随 机 生 成 M 个个体作为初始群体P(0)。
3)适应度值评价检测:适应度函数表明个体或解的优劣性。对于不同的问题,适应度函数的定义方式不同。根据具体问题,计算群体 P(t)中各个个体的适应度。在本算法中,空间利用率是最重要的适应度评价标准。
4)选择:将选择算子作用于群体。
5)变异:将交叉算子作用于群体。
6)变异:将变异算子作用于群体。
群体P(t)经过选择、交叉、变异运算后得到下一代群体P(t+1)。
7)终止条件判断:若tT,则t←t+1,转到步骤2);若t>T,则以进化过程中所得到的具有最大适应度的个体作为最优解输出,终止运算[8~10]。
遗传算法有三个基本操作:选 择(selection)、交叉(crossover)和变异(mutation)。
1)选择。选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。根据各个个体的适应度值,按照一定的规则或方法从上一代群体中选择出一些优良的个体遗传到下一代群体 中。遗传算法通过选择运算体现这一思想,进行选择的原则是适应性强的个体为下一代贡献一个或多个后代的概率大。这 就 体 现了达尔文的适者生存原则。
2)交叉。交叉操作是遗传算法中最主要的遗传操作。通过交叉操作可以得到新一代个体,新个体组合了父辈个体的特性。将群体内的各个个体随机搭配成对,对每一个个体,以某个概率交换它们之间的部分染色 体。交叉体现了信息交换的思想。
3)变异。变异操作首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机改变串结构数据汇总某个串的值,即对群体中的每一个个体,以某一概率改变某一个或某一些基因座上的基因值为其他的等位基因。同生物界一样,遗传算法中变异发生的概率 很 低。变异为新个体的产生提供了机会。

⛄二、部分源代码

clear
clc
close all
%% 车间参数
L = 150; % 场所长度
W = 60; % 场所宽度
LW0 = xlsread(‘数据.xlsx’,1,‘C2:D15’); % 设施的长宽
T = xlsread(‘数据.xlsx’,2,‘B2:O15’); % 功能关系
A = xlsread(‘数据.xlsx’,3,‘B2:O15’); % 物流量
C = xlsread(‘数据.xlsx’,4,‘B2:O15’); % 物流成本
Gnum = size(LW0,1); % 设施数量
dim = 2 * Gnum;
%% 遗传算法参数
NP = 100; % 种群大小
maxgen = 500; % 迭代数
Pc = 0.8; %
Pm = 0.4; % 变异概率
Gap = 0.9; % 代沟(Generation gap)
minbound = zeros(1,dim); %
maxbound = L * ones(1,dim); % 边界
big = 1000000;
%% 初始化种群:在满足最小间距的条件下,依次放置,保证初始种群满足约束
X = zeros(NP,dim); % 矩形中心坐标编码
Y = zeros(NP,Gnum); % 矩形长宽方向编码
trysteps = 10000;
for i = 1 : NP
disp([‘初始化进程’ num2str(i) ‘/’ num2str(NP)])
trying = 1;
while trying % 如果多次尝试摆放仍不能满足约束,则重新开始摆放
trying = 0;
y = round(rand(1,Gnum));
y(1) = 0;
y(end) = 0;
LW = LW0;
for j = 1 : Gnum
if y(j) == 1
LW(j,1:2) = LW0(j,2👎1);
end
end
% 放入第一个矩形,直至满足约束
flag = 0;
while ~flag
p = [L * rand,W * rand];
flag = isInRange(p,LW(1,:),L,W);
end
P = p;
% 依次放入其他矩形
for k = 2 : Gnum
dtn = 1;
step = 0; % 试探次数,如果经过很多次试探无法成功,说明第一个摆放有问题
while dtn > 0
flag = 0;
while ~flag % 保证放置的位置满足边界限制
p = [L * rand,W * rand];
flag = isInRange(p,LW(k,:),L,W);
end
Pt = [P ;p];
LWt = LW(1:k,:);
d = CalDistance(Pt,LWt,big); % 计算已放置的设施之间的距离及是否满足间隔
dtag = (d == big);
dtn = sum(sum(dtag)); % 不满足间隔要求的数量
step = step + 1;
if step > trysteps
trying = 1;
break
end
end
P = [P; p];
end
end
X(i,:) = P(😃‘;
end
Pg = P;
cla
for j = 1 : Gnum
rectangle(‘Position’,[Pg(j,1)-LW(j,1)/2,Pg(j,2)-LW(j,2)/2,LW(j,1),LW(j,2)],‘EdgeColor’,‘r’)
text(Pg(j,1),Pg(j,2),num2str(j))
hold on
end
axis equal
axis([0 L 0 W])
box on
%% 进化
gen = 1;
Fx = zeros(NP,1);
while gen <= maxgen
gen
% 计算路线长度
for i = 1 : NP
p = [X(i,1:Gnum); X(i,Gnum+1:end)]’;
y = Y(i,:);
y(1) = 0;
y(end) = 0;
LW = LW0;
for j = 1 : Gnum
if y(j) == 1
LW(j,1:2) = LW0(j,2👎1);
end
end
D = CalDistance(p,LW,big);
Fx(i,1) = Fitness(p,LW,D,A,C,T,L,W,big); % 计算目标函数值
end
% 记录各代最优值
fgbest = min(Fx);
FG(gen) = fgbest; % 各代最短路径
% 计算适应度
fit = 1 ./ (Fx+1); % 将求最小路径转为最大值fit
% 选择
XSel = Select(X,fit,Gap);
YSel = Select(Y,fit,Gap);
% 交叉操作
XSel = XCross(XSel,Pc);
YSel = YCross(YSel,Pc);
% 粒子冲撞
XSel = XMutate(XSel,Pm,minbound,maxbound);
YSel = YMutate(YSel,Pm);
% 重插入子代的新种群
X=Reins(X,XSel,fit);
Y=Reins(Y,YSel,fit);
% 更新迭代次数
gen=gen+1 ;
end
%% 画出最优解的路线图
clc
[fgbest,minInd] = min(Fx);
xgbest = X(minInd(1)😅;
ygbest = Y(minInd(1)😅;
figure
plot(FG)
xlabel(‘迭代次数’)
ylabel(‘最优目标函数值’)
title(‘种群迭代曲线’)
figure
Pg = [xgbest(1:Gnum); xgbest(Gnum+1:end)]';
ygbest(1) = 0;
ygbest(end) = 0;
LW = LW0;
for j = 1 : Gnum
if ygbest(j) == 1
LW(j,1:2) = LW0(j,2👎1);
end
end
D = CalDistance(Pg,LW,big);
[ff,T1,T2] = Fitness(Pg,LW,D,A,C,T,L,W,big); %
fprintf(‘目标函数1的最优值为 %f \n’, T1)
fprintf(‘目标函数2的最优值为 %f \n’, T2)
disp(‘各区域中心对应坐标值为’)
disp(Pg)
for i = 1 : Gnum
rectangle(‘Position’,[Pg(i,1)-LW(i,1)/2,Pg(i,2)-LW(i,2)/2,LW(i,1),LW(i,2)],‘EdgeColor’,‘r’)
text(Pg(i,1),Pg(i,2),num2str(i))
hold on
end
axis equal
axis([0 L 0 W])
box on
title(‘优化后设施布局位置’)

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]田大肥,申喜,周巍.二维装箱问题的遗传算法求解[J].舰船电子工程. 2014,34(01)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值