m基于GA遗传优化的三维工程施工设施布局算法matlab仿真,显示二维和三维布局优化效果

简介: m基于GA遗传优化的三维工程施工设施布局算法matlab仿真,显示二维和三维布局优化效果

1.算法描述

   GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。

(1)编码:将问题的候选解用染色体表示,实现解空间向编码空间的映射过程。遗传算法不直接处理解空间的决策变量,而是将其转换成由基因按一定结构组成的染色体。编码方式有很多,如二进制编码、实数向量编码、整数排列编码、通用数据结构编码等等。本文将采用二进制编码的方式,将十进制的变量转换成二进制,用0和1组成的数字串模拟染色体,可以很方便地实现基因交叉、变异等操作。

(2)种群初始化:产生代表问题可能潜在解集的一个初始群体(编码集合)。种群规模设定主要有以下方面的考虑:从群体多样性方面考虑,群体越大越好,避免陷入局部最优;从计算效率方面考虑,群体规模越大将导致计算量的增加。应该根据实际问题确定种群的规模。产生初始化种群的方法通常有两种:一是完全随机的方法产生;二是根据先验知识设定一组必须满足的条件,然后根据这些条件生成初始样本。

(3)计算个体适应度:利用适应度函数计算各个个体的适应度大小。适应度函数(Fitness Function)的选取直接影响到遗传算法的收敛速度以及能否找到最优解,因为在进化搜索中基本不利用外部信息,仅以适应度函数为依据,利用种群每个个体的适应程度来指导搜索。

(4)进化计算:通过选择、交叉、变异,产生出代表新的解集的群体。选择(selection):根据个体适应度大小,按照优胜劣汰的原则,淘汰不合理的个体;交叉(crossover):编码的交叉重组,类似于染色体的交叉重组;变异(mutation):编码按小概率扰动产生的变化,类似于基因突变。

(5)解码:末代种群中的最优个体经过解码实现从编码空间向解空间的映射,可以作为问题的近似最优解。这是整个遗传算法的最后一步,经过若干次的进化过程,种群中适应度最高的个体代表问题的最优解,但这个最优解还是一个由0和1组成的数字串,要将它转换成十进制才能供我们理解和使用。

   通过对一个施工场地的设施进行布局建模仿真(一种二次分配问题),得到最优化的布置结果,要求对施工场地的设施、道路和车辆这三类主体分别编写子程序,做一个具体工程施工设施布局的模拟仿真。 设施均假设为长方体,其属性为设施面积、设施高度以及设施位置,设施用字母F表示。设施面积的表示需要分为两类,第一类设施面积表示为AS=C×R×T(C、R、T均为提前设定的常数),这一类设施在此项目中共有7个(分为F1至F7,对应7组C、R、T的值);第二类设施面积AP=K×R(K和R均为提前设定的常数),这一类设施在此项目中共有3个(分为F8至F10,对应3组K、R的值);

   要求每条道路路线不得横穿运输路线上所经设施以外的其他设施或固定建筑,故需用A*算法确定路线(若有更好的算法也可替代),又因为道路有最小宽度的要求,R1宽度为5m,R2至R7宽度为3m,可以通过为A*算法划分不同大小的网格(3×3或5×5)来实现宽度的考虑(有别的更好地想法也可提出)

  车辆具备的属性为车辆尺寸、车辆高度、单位运输费用,车辆用字母C表示,此项目中车辆种类分为两类,小型运输车C1,长宽高为2×1×2(需要的道路宽度为3m)和大型运输车C2,长宽高为9.6×2.4×4(需要的道路宽度为5m),车辆的行为是从设施i将相应的材料运输至设施j,在案例工程中,7条道路运输材料所对应的车辆使用情况为:R1→C2、R2至R7→C1

综上所述:整个步骤如下:

步骤一:为10个设施在场地中随机分配初始位置和变化速度

步骤二:通过α值的变化,调整各个设施的长度和宽度,验证各设施不会重叠、不会与已有的建筑物重叠、且不会布置于场地范围之外,否则重新分配各设施位置

步骤三:确定道路的走向和宽度,从而确定各个运输路线的长度d

系属性,计算各个设施位置的适应值,根据函数适应值调整设施位置和速度的变化

步骤四:进入下一步迭代,重复步骤二至六,直至满足适应值最小值或最大迭代次数为止

步骤五:输出迭代过程曲线图、最终10个设施的形心位置、长和宽、道路中心线的方程、以及最终场地布置的三维图(包括场地范围、道路、固定建筑以及设施,固定建筑与设施用不同颜色表示)

2.仿真效果预览
matlab2022a仿真结果如下:

1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png

3.MATLAB核心程序

% R1:F1→F8→T1/T2
% R2:F2→F9→T1/T2
% R3:F4→F9→T1/T2
% R4:F3→F9→T1/T2
% R5:F5→F9→T1/T2
% R6:F6→F10→T1/T2
% R7:F7→F8→T1/T2
% T1坐标(81.3, 41.4),T2坐标(81.3, 14.6)
global T1;
global T2;
global R;
T1=[95.3, 45.4];
T2=[95.3, 18.6];
%宽度
R =[5,3,3,3,3,3,3];
 
global C1;
global Wreq1;
global C2;
global Wreq2;
%3车辆
C1   = [2,1,2];
Wreq1= [3];
C2   = [9.6,2.4,4];
Wreq2= [5];
 
%定义关系值c
self = -1;
c1j  =[self,1,1,1,1,0,0,3.5,0,0];
c2j  =[1,self,2,2,2,0,0,0,3.5,0];
c3j  =[1,2,self,2,2,0,0,0,3.5,0];
c4j  =[1,2,2,self,2,0,0,0,3.5,0];
c5j  =[1,2,2,2,self,0,0,0,3.5,0];
c6j  =[0,0,0,0,0,self,2,0,0,3.5];
c7j  =[0,0,0,0,0,0,self,3,0,0];
c8j  =[3.5,0,0,0,0,0,0,self,1,1];
c9j  =[0,3.5,0,0,3.5,0,0,1,self,1];
c10j =[0,0,0,0,0,3.5,0,1,1,self];
global cij;
cij  =[c1j;c2j;c3j;c4j;c5j;c6j;c7j;c8j;c9j;c10j];
for i = 1:length(cij);
    for j = 1:length(cij); 
        if i>j
           cij(i,j)=cij(j,i);
        end
    end
end
 
global Money;
global WL;
%E_ij指设施i到设施j材料运输单位距离消耗的费用,对应7条道路的取值如下:
Money = [500,200,200,200,200,200,200];
%E物流量
WL    = [16,13.3,26.6,4.8,72,8,8];
 
%两个目标F1和F2的归一化分母值
global NML1;
global NML2;
NML1  = 100;
NML2  = 1e8;
 
 
global step;
global x;
global y;
global X0;
global Y0;
global RR;
global CC;
global MAP1;
global MAP2;
%4环境
step = 0.1;
x    = [0:step:152.1];
y    = [0:step:60.1];
X0   = [];
Y0   = [];
X1   = [];
Y1   = [];
idx1 = 0;
idx2 = 0;
%定义一个图片用来映射当前的场地
RR   = round(max(y)/step);
CC   = round(max(x)/step);
MAP1 = 0.1*ones(RR,CC);
MAP2 = 2*ones(RR,CC);
 
for i =1:length(x)
    for j =1:length(y)
        if (y(j)>0.29*x(i)&x(i)<17.5000|...
           y(j)>0.03*x(i)+4.55&x(i)<128.5833&x(i)>=17.5000|...
           y(j)>0.51*x(i)-57.17&x(i)<151.1589&x(i)>=128.5833|...
           y(j)>25.56*x(i)-3843.7&x(i)<152.1&x(i)>=151.1589)&...
           (y(j)<-0.03*x(i)+48.2&x(i)<152.1&x(i)>=22.7077|...
           y(j)<-0.68*x(i)+62.96&x(i)<22.7077&x(i)>=4.2003|...
           y(j)<5.06*x(i)+38.85&x(i)<4.2003&x(i)>=0.7999|...
           y(j)<53.63*x(i)&x(i)<0.7999)
           idx1= idx1+1;
           X0(idx1)= [x(i)];
           Y0(idx1)= [y(j)];
           %F2
           if (x(i)<75.6 | x(i)>87.1) | (y(j)<34.2 | y(j)>41.4)
                %F3
                if (x(i)<75.6 | x(i)>87.1) | (y(j)<14.7 | y(j)>21.9)
                %F1
                    if (x(i)<33.9 | x(i)>50.6)|(y(j)<20.8 | y(j)>34.2) 
                        if (x(i)<24.9 | x(i)>58.1)|(y(j)<14.8 | y(j)>20.8)
                            if(x(i)<24.9 | x(i)>58.1)|(y(j)<34.2 | y(j)>40.2)
                                idx2= idx2+1;
                                X1(idx2)= [x(i)];
                                Y1(idx2)= [y(j)];
                            end
                       end
                    end
                end
           end
        end
    end
end
%第二个MAP用于三维显示使用,第二个MAP用于路径搜索使用
for i = 1:length(X0)
    MAP1(RR-round(Y0(i)/step)+1,round(X0(i)/step))=0; 
end
for i = 1:length(X1)
    MAP2(RR-round(Y1(i)/step)+1,round(X1(i)/step))=0; 
end
MAP = MAP2;
 
 
load step22.mat 
%%
%下面开始使用遗传优化算法
%根据遗传算法进行参数的拟合
MAXGEN = 40;
NIND   = 25;
Nums   = 1;
Sm     = 0;
Areas  = [];
for i = 1:Nums
    Areas =[Areas,[50;100]];
end
% for i = 1:Nums
%     Areas =[Areas,[1;5000]];
% end
Chrom  = crtbp(NIND,Nums*10);
FieldD = [rep([10],[1,Nums]);Areas;rep([0;0;0;0],[1,Nums])];
for a=1:NIND 
    epls       = 10;
    E          = epls;
    Js(a,1)    = E;
end
Objv  = (Js+eps);
gen   = 0; 
 
Pe0 = 0.9;
pe1 = 0.1; 
JJ2 = [];
idx_final=[];
FIT2= [];
while gen <= MAXGEN
      gen = gen+1;
      FitnV=ranking(Objv);    
      Selch=select('sus',Chrom,FitnV);    
      Selch=recombin('xovsp', Selch,Pe0);   
      Selch=mut( Selch,pe1);  
      phen1  = bs2rv(Selch,FieldD);
 
      for a=1:1:NIND
          [a,gen]
          idx     = floor(phen1(a));
          if idx > length(infor)
             idx = length(infor);
          end
 
          xij     = infor{idx}(end,:);
          %计算对应的目标值
          epls    = func_objtive2(xij,MAP);
          E       = epls;
          JJ(a,1) = E;
      end  
      Objvsel      = [JJ];  
      [Chrom,Objv] = reins(Chrom,Selch,1,1,Objv,Objvsel);       
      
      JJ_         = JJ;
      index2      = find(JJ == 100);
      JJ_(index2) = [];
      
      FIT(gen)    = mean(JJ_);
      
      if gen<=32
         FIT2(gen)= mean(FIT(1:gen));
      else
         FIT2(gen)= mean(FIT(gen-32:gen));
      end   
end
02_071m
相关文章
|
5月前
|
算法
基于MPPT算法的光伏并网发电系统simulink建模与仿真
本课题基于MATLAB/Simulink搭建光伏并网发电系统模型,集成PV模块、MPPT算法、PWM控制与并网电路,实现最大功率跟踪与电能高效并网。通过仿真验证系统在不同环境下的动态响应与稳定性,采用SVPWM与电流闭环控制,确保输出电流与电网同频同相,满足并网电能质量要求。
|
5月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
5月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
6月前
|
机器学习/深度学习 边缘计算 算法
【无人机】无人机群在三维环境中的碰撞和静态避障仿真(Matlab代码实现)
【无人机】无人机群在三维环境中的碰撞和静态避障仿真(Matlab代码实现)
292 0
|
6月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
154 0
|
6月前
|
算法 数据建模 调度
【INC-MPPT】增量导纳算法追踪光伏的最大功率点用于光伏的并网接入研究(Simulink仿真实现)
【INC-MPPT】增量导纳算法追踪光伏的最大功率点用于光伏的并网接入研究(Simulink仿真实现)
175 0
|
5月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
514 0
|
5月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
341 2
|
6月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
313 3
|
6月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
222 6

热门文章

最新文章