m基于PSO粒子群优化的第四方物流的作业整合算法matlab仿真,对比有代理人和无代理人两种模式下最低运输费用、代理人转换费用、运输方式转化费用和时间惩罚费用

1.算法概述

粒子群优化(PSO)算法是通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局随机搜索算法。PSO是将群体(swarm)中的个体看作是在D维搜索空间中没有质量和体积的粒子(particle),每个粒子以一定的速度在解空间运动,并向自身历史最佳位置pbest和邻域历史最佳位置pbest聚集,实现对候选解的进化。


PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为粒子。所有的粒子都有一个由被优化的函数决定的适值( fitness value),每个粒子还有一个速度决定它们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。


PSO初始化为一群随机粒子,然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己;第一个就是粒子本身所找到的最优解,这个解称为个体极值;另一个极值是整个种群目前找到的最优解,这个极值是全局极值。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。



在找到这两个最优值时,粒子根据如下的公式(5)和(6)来更新自己的速度和位置:  




式(5)右边由三部分组成,第一部分为“惯性”或“动量”部分,反映了粒子的运动”习惯”,代表粒子有维持自己先前速度的趋势;第二部分为”认知”部分,反映了粒子对自身历史经验的记忆或回忆,代表粒子有向自身历史最佳位置逼近的趋势;第三部分为”社会”部分,反映了粒子间协同合作与知识共享的群体历史经验,代表粒子有向群体或邻域历史最佳位置逼近的趋势。


其中,定义的适应度函数表达式如下:



即成本函数分为四个部分:运输费用、代理人转换费用、运输方式转化费用和时间惩罚费用。


2.仿真效果预览

matlab2022a仿真结果如下:







对于代理人,结果原来应该给出了,运行完,查看MATLAB的指令窗口,如下所示:





对比两种方式,仿真对比结果如下所示(VIEW2):









3.核心MATLAB程序

.....................................................................

%d(i,j)表示节点i到节点j之间的运输距离,0表示两点不可达到

F        = 0;

d        = func_dis(F);%调用距离函数

%q(m)表示作业m的运量;

q = 1e3*[4  7  6  3  5  7  4  7];


%不同代理人不同的运输方式的单位费用

w1   = 2;

w2   = 4;

w3   = 3;

w4   = 2;

cost = func_kcost1(w1,w1,w3,w4,g,G);%初始化价格,实际在公式中,通过输入运输量来确定具体的价格


%C(s,k,i,j)表示节点i到节点j由代理人s选择k种运输方式的单位运输费用,因为存在折扣问题,所以此变量为单调递减;

for i = 1:n

for j = 1:n

for s = 1:g

for k = 1:G

C(s,k,i,j) = cost(s,k);

end

end   

end  

end

%x(s,k,m,i,j) = 1 表示作业m在节点i和节点j之间由代理人s采用k种运输方式代理;否则x(s,k,m,i,j)=0;

x    = zeros(g,G,M,n,n);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%p(s,l,i)表示在节点i由代理人s转换到代理人l的转换费用;

for i = 1:n

tmp      = func_kcost2(i);

p(:,:,i) = tmp;

end



%r(s,l,m,i)   = 1 表示作业m在节点i由代理人s转换成代理人l;否则r(s,l,m,i)=0;

r    = zeros(g,g,M,n);



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%R(k,v,m,i)   = 1 表示作业m在节点i由k种运输方式转换为v种运输方式,否则R(k,v,m,i)=0;

R    = zeros(G,G,M,n);

%Z(k,v,i)表示在节点i由k种运输方式转换为v种运输方式的单位中转费用;

for i = 1:n

tmp      = func_kcost3(i);

Z(:,:,i) = tmp;

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%T(m)表示作业m的时间期限;

%H(m)表示作业m的惩罚值;

%f(Tm,qm)为惩罚函数;

ET = [30.39   34   27     38.24   40.1    47.06   33.83   33.82];

LT = [31.50   40   28.5   39      43.5    48      34.5    35.00];

for m = 1:M

T(m) = LT(m) - ET(m);

end




%% 222222222222222222222222222222222222222222222222222222222222222

%% 222222222222222222222222222222222222222222222222222222222222222

%% 222222222222222222222222222222222222222222222222222222222222222

%PSO

%x(s,k,m,i,j) = 1 表示作业m在节点i和节点j之间由代理人s采用k种运输方式代理;否则x(s,k,m,i,j)=0;

%r(s,l,m,i)   = 1 表示作业m在节点i由代理人s转换成代理人l;否则r(s,l,m,i)=0;

%R(k,v,m,i)   = 1 表示作业m在节点i由k种运输方式转换为v种运输方式,否则R(k,v,m,i)=0;

%由于算法较为复杂,这里无法直接将所有因素考虑,这里采用分级优化,即对性能影响最大的因素进行优化,再给予优化结果进行次级因素优化


%确定路线

%确定路线

%确定路线

%初始化x,r,R,初始化的值是随便设置的

for i = 1:n

for j = 1:n

if d(i,j) ~= 0 & d(i,j) ~= F

x(:,:,:,i,j) = 1;

r(:,:,:,i)   = 1;

R(:,:,:,i)   = 1;

else

x(:,:,:,i,j) = 0;

r(:,:,:,i)   = 0;

R(:,:,:,i)   = 0;

end

end

end


All_cost = fitness(M,n,g,G,C,q,d,p,Z,T,LT,ET,R,r,x);



%下面开始PSO优化

itmax               = 300;%进化代数,就是预设的迭代次数。

W(1)                = 0.729;% 粒子先前速度保持。惯性权重

a(1)                = 0.316;% 用于计算W。

c1                  = 2; %认知部分 加速系数

c2                  = 2; %社会部分 加速系数

xmax                = 1;

xmin                = 0;

ii                  = 1;

num_particle        = 100;

D                   = size(d,1);

particle            = zeros(2*num_particle,D,D,M,itmax);


particle(:,:,:,:,1) = xmin+(xmax-xmin)*rand(2*num_particle,D,D,M);

V(:,:,:,:,1)        = round((xmin-xmax)+2*(xmax-xmin)*rand(2*num_particle,D,D,M));


fit                 = zeros(num_particle,itmax);% 用于存储粒子的适应值

pbest               = zeros(2*num_particle,D,D,M,itmax); % 用于存储粒子的位置


x2                  = zeros(g,G,M,n,n,2*num_particle);


for m = 1:M

for i = 1:n

for j = 1:n

for nn = 1 : 2*num_particle

x2(:,:,m,i,j,nn) = particle(nn,i,j,m,1);

end

end  

end   

end


x_tmp = zeros(g,G,M,n,n);

for nn = 1 : num_particle

x_tmp     = x2(:,:,:,:,:,nn);

fit(nn,1) = fitness(M,n,g,G,C,q,d,p,Z,T,LT,ET,R,r,x_tmp);

end


%*********************************************************

pbest(:,:,:,:,1)   = particle(:,:,:,:,1);

pbest_value(:,1) = fit(:,1);  %个体最优值

[Cs,I]           = min(pbest_value(:,1));

gbest_value(1)   = Cs; % 群最优值


for i=1:num_particle

gbest(2*i-1:2*i,:,:,:,1)=particle(2*I-1:2*I,:,:,:,1);  %群最优粒子位置

end


tmps = 0;

route = zeros(n,n,M,2*num_particle);

for ii=2:itmax


ii


V(:,:,:,:,ii)        = 0.729*V(:,:,:,:,ii-1)+c1*rand*(pbest(:,:,:,:,ii-1)-particle(:,:,:,:,ii-1))+...

c2*rand*(gbest(:,:,:,:,ii-1)-particle(:,:,:,:,ii-1));


V(:,:,:,:,ii)        = min(V(:,:,:,:,ii),xmax-xmin);

V(:,:,:,:,ii)        = max(V(:,:,:,:,ii),xmin-xmax);

particle(:,:,:,:,ii) = particle(:,:,:,:,ii-1)+V(:,:,:,:,ii);

particle(:,:,:,:,ii) = min(particle(:,:,:,:,ii),xmax);  

particle(:,:,:,:,ii) = max(particle(:,:,:,:,ii),xmin);

for m = 1:M

for i = 1:n

for j = 1:n

for nn = 1 : 2*num_particle

if d(i,j) > 0

x2(:,:,m,i,j,nn) = double(particle(nn,i,j,m,ii)>0.5);%对于优化结果,只取0或者1

else

x2(:,:,m,i,j,nn) = 0;%对于优化结果,只取0或者1

end

end

end  

end  

end

for m = 1:M

for i = 1:n

for j = 1:n

for nn = 1 : 2*num_particle

if d(i,j) > 0

route(i,j,m,nn)    = particle(nn,i,j,m,ii);

else

route(i,j,m,nn)    = 0;

end

end

end  

end    

end



for nn = 1 : num_particle

x_tmp      = x2(:,:,:,:,:,nn);

fit(:,ii)  = fitness(M,n,g,G,C,q,d,p,Z,T,LT,ET,R,r,x_tmp);

end    


%下面更新 pbest and pbest_value

pbest_value(:,ii)=min(pbest_value(:,ii-1),fit(:,ii));


for i=1:num_particle

if pbest_value(i,ii) == fit(i,ii)   

pbest(2*i-1:2*i,:,:,:,ii) = particle(2*i-1:2*i,:,:,:,ii);

else

pbest(2*i-1:2*i,:,:,:,ii) = pbest(2*i-1:2*i,:,:,:,ii-1);

end

end


%*************************

%下面计算惯性权重

pmin   = min(fit(:,ii));

a(ii)  = mean(sum(abs(fit(:,ii)-pmin)));


%下面更新gbest and gbest_value

[Cs,I]  = min(pbest_value(:,ii));


gbest_value(ii)=min(Cs,gbest_value(ii-1));


for i=1:num_particle

if gbest_value(ii) == Cs

gbest(2*i-1:2*i,:,:,:,ii)=pbest(2*I-1:2*I,:,:,:,ii);  

else

gbest(2*i-1:2*i,:,:,:,ii)=gbest(2*I-1:2*I,:,:,:,ii-1);

end

end

end  

%x2                  = zeros(g,G,M,n,n,2*num_particle);

finals_cost = gbest_value(end);

% save Simulation_Results\result.mat gbest_value itmax

02_009m

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

推荐阅读更多精彩内容