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

news2025/7/10 0:50:18

目录

1.算法概述

2.仿真效果预览

3.核心MATLAB程序

4.完整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

4.完整MATLAB程序

matlab源码说明_我爱C编程的博客-CSDN博客

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/6744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Paddle入门实战系列(一):基于PaddleOCR的车牌识别

✨写在前面:强烈推荐给大家一个优秀的人工智能学习网站,内容包括人工智能基础、机器学习、深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。…

MySQL十秒插入百万条数据

mysql数据库准备 private String Driver "com.mysql.cj.jdbc.Driver";private String url "jdbc:mysql://localhost:3306/mp?serverTimezoneAsia/Shanghai&rewriteBatchedStatementstrue";private String user "root";private String pa…

Pycharm 翻译插件失效(transaction) 问题解决【包括安装视频教程】

嗨害大家好鸭!我是小熊猫❤ 最近有很多朋友反应 翻译插件用不了了(不想看文章的朋友 可以直接点击文章最下方QQ群 领取视频版教程) 那么今天!!! 教大家如何快速解决这个问题 点击文件(file) —> 设置(setting) 点击工具(t…

【附源码】计算机毕业设计JAVA家庭园艺服务平台

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

【Node.js】 第四章 模块化

目录 1. 模块化的概念 1.1 模块化的概念 1.2 模块化规范 2. Node.js中的模块化 2.1 模块分类 2.2 模块加载 2.3 模块作用域 2.4 向外共享模块成员 2.5 exports对象 2.6 Node.js中的模块化规范 1. 模块化的概念 1.1 模块化的概念 按照模块指定规则,把一…

什么是智能合约?新手入门指南

智能合约,也称为数字合约,在计算机网络中使用区块链技术来履行预编程的合约当合同的条件得到满足时,智能合同就会执行,例如向合同的一方发送付款。 智能合约之所以具有吸引力有多种原因: 不信任。由于智能合约及其条…

【c++ 】 对象与类中方法的调用关系。类中常方法,普通方法,静态方法之间互相的调用关系

对象与类中方法的调用关系。类中常方法,普通方法,静态方法之间互相的调用关系1.对象与方法之间的调用1.常对象只能调用常成员方法2.普通对象既可以调用普通成员方法,也可以调用常成员方法,当两个同名的常成员方法和普通成员方法重…

你安全吗?丨秦淮到底是哪种黑客?你猜对了吗?

作者:黑蛋 大家都知道黑客,但是黑客也分很多种类,那么秦淮属于哪种黑客呢,我们先来看一看黑客的种类: 1、白帽黑客:白帽黑客是指通过实施渗透测试,识别网络安全漏洞,为政府及组织工…

蓝桥杯入门即劝退(九)罗马数字

“为什么你没有变强,因为你最近一直过得太舒服” ----------持续更新蓝桥杯入门系列算法实例------------- 如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流! 你的点赞、关注、评论、是我创作的动力! -------希望我的文章对你有…

数字孪生3d智慧核电可视化场景应用展示,包括:智能计算,智能运维

最近几年来,数字孪生技术已被应用于核电领域,并且国内已有一些公司在具体实践过程中,通过数字孪生赋能核电更加经济、灵活、高效运维。 北京智汇云舟科技有限公司成立于2012年,专注于创新性的“视频孪生(实时实景数字孪…

c++ 正则表达式

文章目录正则表达式基本语句regex_matchregex_searchregex_token_iteratorregex_replace示例匹配电话号码匹配QQ号码匹配IP地址正则表达式 什么是正则表达式? 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern)&#xff0…

GENERALIZATION THROUGH MEMORIZATION: NEAREST NEIGHBOR LANGUAGE MODELS

Abatract 我们引入了kNN-LMs,它扩展了一个预先训练的神经语言模型(LM),通过与k个最近邻(kNN)模型线性插值。最近邻是根据预先训练好的LM嵌入空间中的距离进行计算的,并可以从任何文本集合中提取…

45-命令行基础操作

45-命令行基础操作LInux命令行基础LInux命令基础知识Linux的Gul与CLI为什么使用Linux命令行Linux命令语法格式Linux命令分类LInux基础命令登录命令电源管理命令电源命令1: shutdown电源命令2: halt电源命令3: reboot文件管理命令Linux文件目录结构(1)Linux文件路径帮助命令目录…

Vue+Vite+TS

目录#、基础配置1、安装Node.js2、修改npm镜像源3、配置vscode一、创建项目二、Ref全家桶三、computed计算属性js中数组使用的高阶函数四、watch监听器#、基础配置 1、安装Node.js 下载地址:https://nodejs.org/zh-cn/download/ 安装成功,查看版本node …

vue create 创建项目的时候遇到使用nvm切换node后 提示‘vue‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

前景:我是用的是nvm切换的node版本,不是直接安装高级版本node,有nvm同样困惑的可以用以下方式解决问题,加油!!! 报错: ‘vue’ 不是内部或外部命令,也不是可运行的程序 或批处理文件 解决方法: 1.检查node和npm nod…

libvirt 使用UEFI 设置 edk2-ovmf

一、ovmf 与 edk2 关系: 英特尔EFI开发工具包II (edk2)的子项目,所以在edk2 源码中也能找到 ovmf 部分,ovmf 使UEFI支持Ia32和X64虚拟机 二、OVMF_VARS.fd 与 OVMF_CODE.fd: 1、变量存储和固件的可执行文件; 2、OVMF_…

【数据结构与算法】单链表的增删查改(代码+图解)

目录 顺序表和链表的特点: 时间复杂度: 分析: 单链表结构体和数据类型: 开辟一个节点和存储数据: 打印 尾插 尾删 头插 头删: 查找单链表中的元素 在pos后插入x 在pos前插入x 删除pos后的一个…

【详细学习SpringBoot源码之自定义监听器实战演练-6(自定义监听器、自定义监听事件、指定监听事件)】

一.知识回顾 【0.SpringBoot专栏的相关文章都在这里哟,后续更多的文章内容可以点击查看】 【1.SpringBoot初识之Spring注解发展流程以及常用的Spring和SpringBoot注解】 【2.SpringBoot自动装配之SPI机制&SPI案例实操学习&SPI机制核心源码学习】 【3.详细学…

RabbitMQ - 交换机

文章目录1. Exchanges2. 临时队列3. 绑定 bindings4. Fanout exchange4.1 Fanout 介绍4.2 Fanout 实战5. Direct exchange5.1 Direct 介绍5.2 多重绑定5.3 Direct 实战6. Topics exchange6.1 Topic 的介绍6.2 Topic 匹配案例6.3 Topic 实战1. Exchanges RabbitMQ 消息传递模型…

Techsmith Camtasia Studio2023专业电脑屏幕录制工具

Techsmith Camtasia Studio2023电脑版版下载! 从今天开始,我们开始讲解短视频制作。一提到短视频制作,很多人可能首先想到的,是PR、绘声给影。的确,PR和绘声绘影功能非常强大,毕竟它们是影视制作的专业软件&#xff0…