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

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

1.算法概述

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

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

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

1.png

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

2.png

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

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

3.png

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

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

4.png
5.png

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

6.png

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

7.png
8.png

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
相关文章
|
9天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
10天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
11天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
|
10天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。
|
10天前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
26 3
|
24天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
21天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。
|
22天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
27天前
|
存储
基于遗传算法的智能天线最佳阵列因子计算matlab仿真
本课题探讨基于遗传算法优化智能天线阵列因子,以提升无线通信系统性能,包括信号质量、干扰抑制及定位精度。通过MATLAB2022a实现的核心程序,展示了遗传算法在寻找最优阵列因子上的应用,显著改善了天线接收功率。