基于PSO粒子群优化的带时间窗VRPTW问题matlab仿真

news2024/10/6 14:26:17

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

       粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。
        粒子群算法,也称粒子群优化算法或鸟群觅食算法(Particle Swarm Optimization),缩写为 PSO, 是近年来由J. Kennedy和R. C. Eberhart等开发的一种新的进化算法(Evolutionary Algorithm - EA)。PSO 算法属于进化算法的一种,和模拟退火算法相似,它也是从随机解出发,通过迭代寻找最优解,它也是通过适应度来评价解的品质,但它比遗传算法规则更为简单,它没有遗传算法的“交叉”(Crossover) 和“变异”(Mutation) 操作,它通过追随当前搜索到的最优值来寻找全局最优。这种算法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性。粒子群算法是一种并行算法。
       PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

1)初始化一群微粒(群体规模为N),包括随机位置和速度;

2)评价每个微粒的适应度;

3)对每个微粒,将其适应值与其经过的最好位置pbest作比较,如果较好,则将其作为当前的最好位置pbest;

4)对每个微粒,将其适应值与其经过的最好位置gbest作比较,如果较好,则将其作为当前的最好位置gbest;

5)根据公式(2)、(3)调整微粒速度和位置;

6)未达到结束条件则转第2)步。

迭代终止条件根据具体问题一般选为最大迭代次数Gk或(和)微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。

        带时间窗的车辆路径选择问题模型描述: 有一个中心仓库,拥有车辆K辆, 容量都为q,现有L个发货点运输任务需要完成,以1,2,…,L表示,第i个发货点的货运量为gi,max(g)i≤max(qi),完成发货点i任务需要的时间(装货或卸货)表示Ti,且任务i必须再时间窗口[ETi,LTi]完成,其中ETi为任务i的允许最早开始的时间,LTi为任务i允许最迟开始的时间,如果车辆到达发货点i的时间早于开始时间,则车辆需要在i处等待;如果车辆到达时间晚于LTi,任务i将被延迟进行。

VRPTW模型[23]路径优化的数学模型如下:
 

2.仿真效果预览

matlab2022a仿真结果如下:

3.MATLAB核心程序

.........................................
MI=100;     %最大迭代次数
IsStop=0; 
INUM=0;     %当适应值不变的时候,INUM+1计数,到20时就结束迭代
c1=0.1;
c2=5;
w=0.96;
load 'node.txt';
xy=node(2:NUM+1,2:3);
 
x0=ones(N,NUM); 
for i=1:N   %随机给每个粒子分配路径
      x0(i,:)=randperm(NUM);
end
 
v0=zeros(N,NUM);
for i=1:N       %在VRP中粒子的速度代表交换序
      v0(i,:)=round(rand(1,NUM)*NUM);
end
 
distance_center=zeros(1,NUM);%每个粒子离配送中心的距离
for i=1:NUM    
    distance_center(i)=sqrt((node(i+1,2)-node(1,2))^2+(node(i+1,3)-node(1,3))^2);
end
 
distance_two=zeros(NUM,NUM); %每两个用户之间的距离
for i=1:NUM-1
    for j=i+1:NUM
        dis=sqrt((xy(i,1)-xy(j,1))^2+(xy(i,2)-xy(j,2))^2);
        distance_two(i,j)=dis;
        distance_two(j,i)=dis;
    end
end
 
 
for i=1:N  %每个粒子路径的总距离
   EachPathDis(i)=PathDistance(x0(i,:),distance_two,distance_center);
end
 
IBest=x0;   %粒子个体的历史最优路径
IBestFitness=EachPathDis;%粒子个体的历史最优适应值
[GBestFitness,index]=min(EachPathDis);  %粒子全局最优路径
g1=GBestFitness;    %粒子全局最优适应值
 
figure;
subplot(2,2,1);
PathPlot(node,NUM,index,IBest);
title('随机解');
 
while(IsStop==0)&&(Iteration<MI) 
Iteration=Iteration+1; 
%g2(Iteration)=GBestFitness;  
for i=1:N
      GBest(i,:)=x0(index,:); %全局最优路径
end
 
pi_x=GenerateChangeNums(x0,IBest); %(Pi-Xi)就是使xi向个体最优解靠近,而非远离,这也是一个交换用户序号的过程,得到交换的序
pi_x=HoldByOdds(pi_x,c1);      %这是c1*(Pi-Xi)的过程,以c1保留交换序
pg_x=GenerateChangeNums(x0,GBest);  %(Pg-Xi)就是使Xi向全局最优解靠近,得到路径中要交换的用户序号
pg_x=HoldByOdds(pg_x,c2);  %这是c2*(Pg-Xi)的过程,以c2保留交换序
 
v0=HoldByOdds(v0,w);  %这是w*Vi的过程,以概率w得到交换序
 
x0=PathExchange(x0,v0);   %通过交换序来改变每个粒子的路径,也就是优化的过程
x0=PathExchange(x0,pi_x);
x0=PathExchange(x0,pg_x);
for i=1:N  %计算每条路径的距离
      EachPathDis(i)=PathDistance(x0(i,:),distance_two,distance_center);
end
 
IsChange=EachPathDis<IBestFitness;   %更新后的距离优于更新前的,记录序号
IBest(find(IsChange),:)=x0(find(IsChange),:); %更新个体最佳路径
IBestFitness=IBestFitness.*(~IsChange)+EachPathDis.*IsChange;  %更新个体最佳路径距离
[GBestFitness,index]=min(EachPathDis);   %更新全局最佳路径,记录相应的序号
if GBestFitness==OldpgFitness %比较更新前和更新后的适应度值;
      INUM=INUM+1;
else
      OldpgFitness=GBestFitness;  %不相等时更新适应度值,并记录清零
      INUM=0;
end
....................................................
A146 

4.完整MATLAB

V

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

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

相关文章

数据结构初阶:树与二叉树(1)——堆

许久没发博客&#xff0c;在这里跟各位看客道声久等了~ 冬至已至&#xff0c;各位有没有吃上热乎的饺子呢 下面给各位奉上承载着满满干货的饺子吧&#xff1a; 目录 一、树 1. 树的结构定义 2. 树的相关概念 3. 树的表示 孩子兄弟表示法 二、二叉树 1. 二叉树的结构定义 2. 特…

自己整理的vue实现生成分享海报(含二维码),看着网上的没实现

大家好&#xff0c;我是雄雄。 前言 相信大家在许多的场景下&#xff0c;看到过这样的案例。 当我们在某购物app上看好一件商品&#xff0c;想分享给别人时&#xff0c;app会给我们生成一张海报&#xff0c;我们将其保存在手机里面转发给其他人达到分享。当我们逛CSDN的时候&…

【Android弹窗】Dialog Bottom Translate Animation

文章目录1. 系统Dialog2. 自定义Dialog3. 其余1. 系统Dialog 首先先来使用回顾一下系统的Dialog弹窗&#xff0c;这里使用比较简单的AlertDialog为例&#xff1a; AlertDialog.Builder builder new AlertDialog.Builder(this).setTitle("弹窗标题").setMessage(&q…

【小程序】全局数据共享

目录 全局数据共享 1. 什么是全局数据共享 2. 小程序中的全局数据共享方案 全局数据共享 - MobX 1. 安装 MobX 相关的包 2. 创建 MobX 的 Store 实例 3. 将 Store 中的成员绑定到页面中 4. 在页面上使用 Store 中的成员 ​5. 将 Store 中的成员绑定到组件中 6. 在组件中…

【分布式技术专题】「架构实践于案例分析」盘点一下分布式模式下的服务治理和监控优化方案

什么是服务治理&#xff1f; 相信每一个软件公司&#xff08;企业&#xff09;都希望可以确保开发及项目运行流程可以顺利&#xff0c;但是如果要完美完结那么需要其中会有很多的因素存在。包括&#xff0c;最佳实践、架构原则、服务治理以及其他决定性的因素。而其中服务治理…

新冠确诊阳性的第七篇博客,Linux动态监控系统

新冠确诊阳性的第七篇博客&#xff0c;Linux动态监控系统1.动态监控进程2.动态监控网络1.动态监控进程 top命令和ps相似&#xff0c;都可以用来显示系统正在执行的进程&#xff0c;top和ps的最大不同之处就是在于top在执行一段时间可以更新正在运行的进程&#xff08;也可以理…

JavaScript:优先级队列的实现案例

优先级队列的定义&#xff1a;优先级队列&#xff08;priority_queue&#xff09;其实&#xff0c;不满足先进先出的条件&#xff0c;更像是数据类型中的“堆”。优先级队列每次出队的元素是队列中优先级最高的那个元素&#xff0c;而不是队首的元素。这个优先级可以通过元素的…

架构设计(九):估算

架构设计&#xff08;九&#xff09;&#xff1a;估算 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;架构设计&#xff08;九&#xff09;&#xff1a;估算 CSDN&#xff1a;架构设计&#xff08;九&#xff09;&#xff1a;估算 估算在系统设计中非常重…

还在用定时器吗?借助 CSS 来监听事件

平时工作中很多场合都要用到定时器,比如延迟加载、定时查询等等,但定时器的控制有时候会有些许麻烦,比如鼠标移入停止、移出再重新开始。这次介绍几个借助 CSS 来更好的控制定时器的方法,一起了解一下吧,相信可以带来不一样的体验 一、hover 延时触发 有这样一个场景,在…

C++ WebSockSet服务器解决方案

使用C实现WebSocket服务器是为了解决Web直接访问本地应用程序最佳解决方案。解决云访问硬件最经济的方案或增加了一种解决方法。方案选用开源uWebSockets库。 开发工具选择Visual C 2017,所有源码或工程都用它编译或创建。 1. 准备工作 下载以下第三方库最新版源码并且编译供…

FMOC-PEG-COOH,FMOC-PEG-acid,芴甲氧羰基-聚乙二醇-羧基试剂供应

英文名称&#xff1a;FMOC-PEG-COOH&#xff0c;FMOC-PEG-acid 中文名称&#xff1a;芴甲氧羰基-聚乙二醇-羧基 蛋白质、肽和其他材料通过氨基酸或其他酸活性化学组&#xff0c;增加溶解度和稳定性&#xff0c;降低免疫原性&#xff1b;药物修饰或缓释药物研发&#xff0c;新…

复旦MBA第二学位:畅享顶尖国际商科资源,探索全球发展新可能

自2009年以来&#xff0c;复旦MBA项目一直致力于与顶级院校开展合作&#xff0c;拓宽学生的国际视野。目前&#xff0c;复旦MBA项目与三所国际顶尖合作院校达成了第二学位项目的合作&#xff1a;美国麻省理工学院斯隆管理学院管理学硕士学位(Master of Science in Management S…

【OpenCV-Python】教程:7-7 PCA

OpenCV Python PCA 【目标】 利用 pca 来计算目标的方向 【理论】 Introduction to Principal Component Analysis (PCA) PCA&#xff08;主成分分析&#xff09;是提取最重要特征的统计过程。 假设你有一组2D点&#xff0c;如上图所示。每个维度都对应于您感兴趣的特性。…

Blender——苹果的材质绘制

效果图 前言 在进行纹材质的绘制之前&#xff0c;首先要具有苹果的三维模型和进行苹果纹理绘制。 关于苹果的建模请参考&#xff1a;Blender——“苹果”建模_行秋的博客 关于苹果的纹理绘制请参考&#xff1a;Blender——苹果纹理绘制_行秋的博客 书接上回&#xff0c;由Te…

FMOC-PEG-acid,FMOC-PEG-COOH,芴甲氧羰基PEG羧基用于探究新型材料

用于探究新型材料的化学试剂芴甲氧羰基-聚乙二醇-羧基&#xff0c; 其英文名为FMOC-PEG-acid&#xff08;FMOC-PEG-COOH&#xff09;&#xff0c;它所属分类为Boc/Fmoc protected amine PEG Carboxylic acid PEG。 芴甲氧羰基peg羧基试剂的分子量均可定制&#xff0c;有&#…

使用nginx实现自定义大小预览缩略图,http_image_filter模块的安装使用

使用nginx实现自定义大小预览缩略图&#xff0c;http_image_filter模块的安装使用注意事项服务器配置方法安装模块备份http_image_filter模块用以调用配置文件调整引入模块修改配置文件设置访问入口随后重启nginx服务访问请求测试注意事项 本预览图功能使用的是nginx的http_im…

哦,原来事务传播是这样

引言 ​ 在介绍正文之前&#xff0c;让我们先一起来看下这段代码&#xff1a; Transactionalpublic void createProduct(Long skuId, Integer number, Long operatorUcid) {// 插入商品信息recordProduct(skuId, number);// 插入商品操作记录日志recordProductOperateLogClass…

关于操作数组元素的实际应用

sort()升序、降序排序方法应用 sort()排序方式原理&#xff1a;当sort()传入函数中的第一个参数a位于第二个参数b之前&#xff0c;则返回一个负数&#xff0c;相等则返回0&#xff0c;a位于b之后则返回正数。 比如&#xff0c;当要做升序排序时&#xff0c;我们需要想到前面的…

【SpringMVC】常用注解

1.RequestParam 1.1 使用说明 作用: 把请求中指定名称的参数给控制器中的形参赋值 属性&#xff1a; ​ **value&#xff1a;**请求参数中的名称 ​ **required&#xff1a;**请求参数是否必须提供此参数。默认值&#xff1a;true&#xff0c;表示必须提供&#xff0c;如果…

Linux下tree命令C/C++实现(以树状格式列出目录的内容)

在UNIX/LINUX系统中&#xff0c;tree是一个递归目录列表程序&#xff0c;它生成文件的深度缩进列表。在没有参数的情况下&#xff0c;树将列出当前目录中的文件。当给定目录参数时&#xff0c;树依次列出在给定目录中找到的所有文件或目录。列出找到的所有文件和目录后&#xf…