粒子群算法tsp java_粒子群算法解决TSP问题

1. 粒子群算法简介

粒子群算法(particle swarm optimization,PSO)由Kennedy和Eberhart在1995年提出,属于进化算法的一种,是通过对模拟鸟群扑食行为设计的。

基本思想:

从随机解出发,通过迭代寻找最优解,通过适应度来评价解的品质。

场景设定 :

一群鸟在随机搜索食物。在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻目前离食物最近的鸟的周围区域。

粒子群算法的几个概念

粒子:场景中的一只鸟;

种群:场景中的一群鸟;

位置:粒子(鸟)所在的位置;

速度:鸟的飞行速度,粒子的移动速度;

适应度:鸟距离食物远近,粒子距离目标的评价。

2. 算法分析

算法流程

958afd16b27d

粒子群算法流程.png

流程描述

1.首先随机生成粒子,并组成种群;其中粒子的数量及种群的大小可以控制;

2. 计算每个粒子的适应度值;

3. 通过当前适应度值是pBest(当前粒子的历代最佳值)和gBest(种群的历代最佳值)进行对比,来更新当前粒子的速度和位置;

4. 判断是否满足退出条件(达到迭代次数或者最优解的误差满足设定的阈值),若不满足则转向 2.

速度与位置的更新

粒子群算法的核心就是每个粒子位置和速度的更新

速度更新

958afd16b27d

速度更新公式

v:粒子当前的速度; w是惯性因子; position是粒子当前的位置; pBest是当前粒子历代最好的位置;gBest是种群中当前最好的位置; c1和c2 是学习因子,分别是向pBest和gBest学习。

速度更新的三部分解读

w*v : 惯性保持部分,粒子沿着当前的速度和方向惯性飞行,不会偏移。假如没有惯性部分,粒子会很快向pBest和gBest移动,很容易陷入局部最优。有了惯性,粒子就会有在空间中自由飞行的趋势,能够在整个空间寻找最优解。

c1*rand()*(pBest-position):自我认知部分,粒子有回到自身历代最好位置的意愿。假如没有自我认知部分,粒子将很快向gBest移动,很容易陷入局部最优。

c2*rand()*(gBest-postion):社会认知部分,粒子有向种群中最好位置学习的意愿。假如没有社会认知部分,所有的粒子都向各自的pBest移动,各自陷入自身的最优解,从而导致整个过程不收敛。

位置更新

958afd16b27d

位置更新公式

3. TSP问题

TSP问题(Travelling Salesman Problem)即旅行商问题: 又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。

TSP问题是一个组合优化问题, 是一个NPC问题,分为两类: 一类是对称TSP问题(Symmetric TSP),另一类是非对称问题(Asymmetric TSP)。

4. 粒子群算法解决TSP问题

算法的实现

粒子的表示:TSP问题的一个解为一个序列,可以表示为一个粒子;

速度的表示:用一个序列的交换序列表示粒子的速度。

适应度函数的定义: 当前序列的路径长度即为适应度值,通过经纬度坐标计算。

惯性因子的定义:自身的交换序列即惯性因子

Java代码实现

速度和位置的更新

更新公式:Vii=wVi+ra(Pid-Xid)+rb(Pgd-Xid)

private void evolution() {

for (int t = 0; t < MAX_GEN; t++) {

for (int k = 0; k < scale; k++) {

ArrayList vii = new ArrayList<>();

//第一部分:惯性保持部分,自身交换对

int len = (int) (w * listV.get(k).size());

for (int i = 0; i < len; i++) {

vii.add(listV.get(k).get(i));

}

//第二部分:自我认知部分,和当前粒子中出现最好的结果比较,得出交换序列

//ra(Pid-Xid)

ArrayList a = minus(mUnits.get(k).getPath(), Pd.get(k).getPath());

float ra = random.nextFloat();

len = (int) (ra * a.size());

for (int i = 0; i < len; i++) {

vii.add(a.get(i));

}

//第三部分:社会认知部分,和全局最优的结果比较,得出交换序列

//rb(Pgd-Xid)

ArrayList b = minus(mUnits.get(k).getPath(), Pgd.getPath());

float rb = random.nextFloat();

len = (int) (rb * b.size());

for (int i = 0; i < len; i++) {

vii.add(b.get(i));

}

listV.remove(0);

listV.add(vii);

//执行交换,生成下一个粒子

exchange(mUnits.get(k).getPath(), vii);

}

//更新适应度的值

for (int i = 0; i < scale; i++) {

mUnits.get(i).upDateFitness();

if (Pd.get(i).getFitness() > mUnits.get(i).getFitness()) {

Pd.put(i, mUnits.get(i));

}

if (Pgd.getFitness() > Pd.get(i).getFitness()) {

Pgd = Pd.get(i);

bestT = t;

}

}

}

}

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

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

相关文章

hive mysql性能_Hive数据库安全审计功能

【Hive数据库安全审计简介】Hive数据库安全审计是一款基于数据库通讯协议准确分析和SQL完全解析技术的数据库安全审计系统。实现了对数据库操作、访问用户及外部应用用户的审计&#xff0c;可以用于安全合规、用户行为分析、运维监控、风控审计、事件追溯等与数据库安全相关的管…

linux安装sz rz_超级好用的文件传输命令rz与sz

做生物信息经常需要在本地客户端与服务器之间进行文件的传输&#xff0c;例如将要分析的数据传到Linux服务器上&#xff0c;进行分析&#xff0c;分析结束之后将结果下载到本地windows系统进行查看。以前我们都推荐大家使用比较稳定&#xff0c;并且支持断点续传的Filezilla或者…

visual studio 按钮判断管理员和用户_用户管理的设计原则

后台的使用者通常是企业的各类权限的管理员&#xff0c;通过对用户管理的合理设计&#xff0c;让管理员准确、高效地完成既定任务&#xff0c;来实现用户管理的价值。后台产品的使命是为企业提升效率&#xff0c;降低成本&#xff0c;而用户管理是后台的核心部分&#xff0c;用…

windows。forms.timer设置第一次不等待_面试官:换人!他连 TCP 这几个参数都不懂(一)...

前言TCP 性能的提升不仅考察 TCP 的理论知识&#xff0c;还考察了对于操作系统提供的内核参数的理解与应用。TCP 协议是由操作系统实现&#xff0c;所以操作系统提供了不少调节 TCP 的参数。如何正确有效的使用这些参数&#xff0c;来提高 TCP 性能是一个不那么简单事情。我们需…

微信网页开发教程 php,PHP实现微信网页授权开发教程,php授权教程_PHP教程

PHP实现微信网页授权开发教程&#xff0c;php授权教程微信网页授权是服务号才有的高级功能&#xff0c;开发者可以通过授权后获取用户的基本信息&#xff1b;在此之前&#xff0c;想要获取消息信息只能在用户和公众号交互时根据openid获取用户信息&#xff1b;而微信网页授权可…

lstm原文_LSTM模型与水文模型在径流模拟中的比较

学术简报题目:Comparison of Long Short Term Memory Networks and the Hydrological Model in Runoff Simulation作者:Hailin You1,Hongxiang Fan2,Ligang Xu2,Yongmi Wu1,*,Lizhen Liu2 and Zhong Yao1作者单位:1 Poyang Lake Research Center, Jiangxi Academy of Sciences,…

php 安装 bzip2,php如何安装bzip2

php安装bzip2的方法&#xff1a;首先安装扩展依赖的系统bzip2开发库&#xff1b;然后编译安装php源码包目录下的“ext/bz2”扩展&#xff1b;最后修改“php.ini”配置文件即可。php安装bzip2安装扩展依赖的系统bzip2开发库sudo yum install bzip2-devel编译安装php源码包目录下…

mysql 触发器不能同时 insert or update or delete_MySQL6:触发器

什么是触发器MySQL的触发器(trigger)和存储过程一样&#xff0c;都是嵌入到MySQL中的一段程序。触发器是由事件来触发某个操作&#xff0c;这些事件包括INSERT、UPDATE和DELETE语句。如果定义了触发程序&#xff0c;当数据库执行这些语句的时候就会激发触发器执行相应的操作&am…

mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引

冗余索引和未使用索引的危害随着上线的业务越来越多&#xff0c;在MySQL数据库中建的表也会越来越多&#xff0c;为提高查询访问速度&#xff0c;会创建相应的索引。但是由于技术人员的水平参差不齐&#xff0c;业务下线&#xff0c;代码逻辑变更等原因&#xff0c;导致线上数据…

java第一次课必修实验答案,Java第一次实验报告

北京电子科技学院(BESTI)实验报告课程&#xff1a;Java实验 班级&#xff1a;201352 姓名&#xff1a;池彬宁 学号&#xff1a;20135212成绩&#xff1a; 指导教师&#xff1a;娄佳鹏 实验日期&#xff1a;15.04.14实验密级&#xff1a; 预习程度…

在matlab中求协方差,matlab里面的求协方差函数

一&#xff1a;matlab里面关于方差和协方差的几点需要注意的求均值的函数&#xff1a;mean求方差的函数&#xff1a;var标准差&#xff1a;方差&#xff1a;求协方差的函数&#xff1a;cov1 如果a,b是向量&#xff0c;则&#xff1a;cov(a,b)相当于是[D(a),cov(a,b);cov(b,a),D…

手机浏览器网址_「效率集」自定义网址导航高级功能介绍

「效率集」是国内仅有的几家提供了个性自定义导航的网站&#xff0c;功能比hao123强&#xff0c;用户体验优于百度导航首页&#xff0c;且支持聚合搜索&#xff0c;方便用户从不同渠道&#xff08;网页&#xff0c;微博&#xff0c;微信公众号&#xff0c;知乎&#xff0c;维基…

属于服务器端运行的程序_生信分析云平台产品开发 - 5 生信分析pipeline服务器端运行...

在上文 [生信分析云平台产品开发 - 4 生信分析pipeline的图形化] 讨论了生信分析pipeline的图形化&#xff0c;如何用图形的方式显示生信pipeline&#xff0c;但是pipeline脚本按照变量的形式保存之后&#xff0c;如何运行&#xff0c;在什么环境下运行&#xff1f;是本文要解决…

TF卡里删掉文件后内存没变大_原来三星手机是这样清理内存的,难怪用好几年也不卡...

三星手机的耐用性一直都很高&#xff0c;而除了手机本身系统性能做的很好之外&#xff0c;手机的设置也是很人性化的。在三星手机使用了一段时间过后&#xff0c;手机里的内存会越来越大&#xff0c;手机里的垃圾也会越存越多&#xff0c;那么我们应该怎么清理手机中的内存呢&a…

拓扑排序排课系统_视频结构化人脸布控系统

一、平台背景在国家智慧城市的建设中的公共安全&#xff0c;对维稳防控、全城布控、预测预警、综合管理等提出了更高需求&#xff0c;针对这些需求我们作为识别领域的领先者&#xff0c;结合我们的识别技术&#xff0c;更全面、更智能提出了我们视频结构化黑名单布控系统解决方…

win10去掉快捷方式小箭头_简单几步,教你怎么去掉win10电脑图标小箭头

Windows通过在桌面图标上增加“小箭头”&#xff0c;来区分它是属于正经的应用程序、文件还是快捷方式。好处能够一目了然的区分桌面显示的内容都是什么。坏处就是对有强迫症、要求统一的用户来说&#xff0c;这个小箭头实在是太碍眼了&#xff01;如果你属于后者&#xff0c;注…

CIF进口货物流程图_上海关区对外承包工程货物进口报关公司【清关代理吧】

进口清关&#xff1a;退运/返修/一般贸易/对外承包工程专业、专心、专注提供服务上海港/上海海关&#xff1a;对外承包工程进口清关报关有需要看左边&#xff1a;←←←←←←←进口清关报关要注意哪些问题&#xff1a;(同行禁止抄袭及转载)首先&#xff1a;要找一家靠谱、值得…

月均数据_程序员月均薪多少,2019全国互联网行业程序员就业大数据报告

《2019全国互联网行业程序员就业大数据报告》&#xff0c;该报告针对程序员画像、专业背景、职能供需分布、城市分布特征和薪资优势等方面进行分析。作者&#xff1a;子瑜说IT下面&#xff0c;一起来看看&#xff0c;2019年1月-9月程序员的就业现状。01、程序员基础画像“程序媛…

单分支 两路分支和多分支的if结构_JavaScript学习笔记(二)-- 分支结构

分支结构我们的 js 代码都是顺序执行的&#xff08;从上到下&#xff09;逻辑分支就是根据我们设定好的条件来决定要不要执行某些代码IF 条件分支结构if 语句通过一个 if 语句来决定代码执行与否a语法&#xff1a; if (条件) { 要执行的代码 }通过 () 里面的条件是否成立来决定…

php 时间格式化_3分钟短文 | PHP获取函数的代码片段,唯有反射最高效

引言为了演示上一篇我们所说的PHP中反射的应用&#xff0c;本篇接着讲反射的应用。因为其特性&#xff0c;是操作函数和方法的&#xff0c;是函数的操作者&#xff0c;类的操作者&#xff0c;所以显得格外重要。我们从一个小需求出发&#xff0c;假如有一段这样的代码&#xff…