m基于遗传算法的城市生活垃圾回收网络优化matlab仿真

1.算法描述

目前,城市生活垃圾成为困扰我国大多数城市健康发展的痼疾.与国外相关国家相比,我国垃圾回收处理模式存在资源化程度低,处理方式单一等弊端,很多城市在积极探索新的垃圾回收模式.鉴于中国与巴西国情比较接近,巴西的塞普利模式具有较高参考意义.从文献阅读来看,将垃圾回收问题视为单独的选址-运输问题或垃圾收集车辆路径问题(VRP),很少将两者结合起来考虑,也很少考虑垃圾的回收利用.基于此背景下,本文提出如何在混合回收,集中分拣的回收模式下构建城市生活垃圾回收网络的决策问题。在阐明城市生活垃圾的基础上,分析城市生活垃圾回收物流和回收网络构建的原则,内容,构成要素,并介绍典型的垃圾回收网络构建模型和垃圾收集车辆路径模型,为本文的数学建模奠定理论基础. 文章借鉴巴西塞普利回收模式,提出构建具有分拣中心的城市生活垃圾回收网络,通过分拣中心实现垃圾的分类回收.由于城市生活垃圾回收网络问题涉及到设施选址和收集车辆路径优化问题,


遗传算法的原理


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


其主要步骤如下:


1.初始化


选择一个群体,即选择一个串或个体的集合bi,i=1,2,...n。这个初始的群体也就是问题假设解的集合。一般取n=30-160。


通常以随机方法产生串或个体的集合bi,i=1,2,...n。问题的最优解将通过这些初始假设解进化而求出。


2.选择


根据适者生存原则选择下一代的个体。在选择时,以适应度为选择原则。适应度准则体现了适者生存,不适应者淘汰的自然法则。


给出目标函数f,则f(bi)称为个体bi的适应度。以


为选中bi为下一代个体的次数。


显然.从式(3—86)可知:


(1)适应度较高的个体,繁殖下一代的数目较多。


(2)适应度较小的个体,繁殖下一代的数目较少;甚至被淘汰。


这样,就产生了对环境适应能力较强的后代。对于问题求解角度来讲,就是选择出和最优解较接近的中间解。


3.交叉


对于选中用于繁殖下一代的个体,随机地选择两个个体的相同位置,按交叉概率P。在选中的位置实行交换。这个过程反映了随机信息交换;目的在于产生新的基因组合,也即产生新的个体。交叉时,可实行单点交叉或多点交叉。


2.matlab算法仿真效果

matlab2022a仿真结果如下:


3.MATLAB核心程序

global a;    %分拣中心的固定成本

global C1;   %单位收集成本  

global b;    %分拣中心的变动成本

global C2;   %单位存储成本

global Fk;   %收集车辆的固定成本

global C3;   %单位运输成本

global Qk;   %收集车辆的最大容量

global alpha;%A类垃圾比例

global Fh;   %焚烧厂的固定成本

global beta; %B类垃圾比例

global Qh;   %焚烧厂的日处理能力

global gamma;%C类垃圾比例

global Fl;   %填埋场的固定成本

global P;    %垃圾焚烧残留比例

%%

%垃圾产生点的坐标及日垃圾产生量

X1=[76,148,57,19,51,101,27,135,18,50,106,89,54,45,104,79,76,86,83,-6,72,90,82,73,92,36,84,64,76,30,21,55,134,42,92,31,55,50,87,30,5,92,117,20,100,134,35,-15];

Y1=[15,40,114,23,69,88,109,128,52,104,72,111,61,133,73,20,5,146,58,83,70,39,61,84,98,63,115,98,143,141,67,52,124,102,138,29,126,133,96,124,61,96,117,68,76,55,41,108];

M1=[1.99,6.14,6.37,6.46,4.91,4.84,2.04,7.17,5.28,2.23,4.65,4.06,2.99,4.68,1.57,7.28,8.25,3.99,5.41,5.78,4.94,3.39,0.570,7.10,7.17,4.18,5.73,1.93,4.96,1.92,5.84,4.56,7.25,6.54,7.39,4.48,7.06,5.40,3.23,7.08,3.67,1.74,4.98,2.07,5.62,6.09,1.40,7.15];


%分拣中心

X2 = [51,53,79,92];

Y2 = [88,72,68,111];


%焚烧厂

X3 = [45,115,82,115];

Y3 = [148,148,18,68];


%填埋场

X4 = [127,146,76];

Y4 = [11,99,166];

%回收工厂   

X5 = [156];

Y5 = [158];


figure;

plot(X1,Y1,'bo');

axis([-20,180,-20,180]);

for i = 1:length(X1)

text(X1(i)+2,Y1(i)+2,num2str(i));

end

hold on

plot(X2,Y2,'rs');

hold on

plot(X3,Y3,'g^');

hold on

plot(X4,Y4,'k.');

hold on

plot(X5,Y5,'m*');

legend('垃圾产生点','分拣中心','焚烧厂','填埋场','回收工厂');



%分拣中心的固定成本

a = 1335;

%单位收集成本  

C1= 0.056;

%分拣中心的变动成本

b = 2;

%单位存储成本

C2= 0.028;

%收集车辆的固定成本

Fk= 120;

%单位运输成本

C3= 0.015;

%收集车辆的最大容量

Qk= 12;

%A类垃圾比例

alpha = 0.35;

%焚烧厂的固定成本

Fh= 4500;

%B类垃圾比例

beta  = 0.45;

%焚烧厂的日处理能力  

Qh= 250;

%C类垃圾比例

gamma = 0.45;

%填埋场的固定成本

Fl= 9500;

%垃圾焚烧残留比例

P = 0.26;


%%

%根据遗传算法进行参数的拟合

MAXGEN = 200;

NIND   = 20;

Ns     = 2+length(X1);


Chrom  = crtbp(NIND,Ns*10);

Areas  = [1         ,1                 

length(X2),length(X2)];

for i = 1:length(X1);     

Areas = [Areas,[0;1]];  

end


FieldD = [rep([10],[1,Ns]);Areas;rep([0;0;0;0],[1,Ns])];


Data1 = zeros(NIND,Ns);

Data2 = zeros(MAXGEN,Ns);


gen  = 0;

for a=1:1:NIND

a

%保证每个数值不一样,

tmps       = [1,2,rand(1,length(X1))>0.5];

Data1(a,:) = tmps(1:Ns);      


%计算对应的目标值

[epls,lines2,Position1,best_route1,best_length1,Avg_Length1,Position2,best_route2,best_length2,Avg_Length2] = func_obj(Data1(a,1),Data1(a,2),Data1(a,3:end));

E          = epls;

J(a,1)     = E;

end


Objv  = (J+eps);

gen   = 0;


while gen < MAXGEN;   

gen


FitnV = ranking(Objv);    

Selch = select('sus',Chrom,FitnV);    

Selch = recombin('xovsp', Selch,0.9);   

Selch = mut( Selch,0.1);   

phen1 = bs2rv(Selch,FieldD);   


for a=1:1:NIND    

%计算对应的目标值

if abs(floor(phen1(a,1))+1 - floor(phen1(a,2))-1) > 0

[epls,lines2,Position1,best_route1,best_length1,Avg_Length1,Position2,best_route2,best_length2,Avg_Length2] = func_obj(floor(phen1(a,1))+1,floor(phen1(a,2))+1,round(phen1(a,3:end)));

else

epls   = 1e10;    

end

E       = epls;

JJ(a,1) = E;

end


Objvsel=(JJ);    

[Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel);   

gen=gen+1;


Error1(gen) = mean(JJ);

if gen <= 128

Error2(gen) = mean(Error1(1:gen));

else

Error2(gen) = mean(Error1(gen-128:gen));

end

end

%根据优化结果计算成本收敛曲线

y = func_cost();

02_040m

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容