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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容