单目标应用:最有价值球员算法(Most Valuable Player Algorithm,MVPA)求解旅行商问题TSP

news2025/7/20 13:00:22

一、最有价值球员算法

最有价值球员算法Most Valuable Player Algorithm,MVPA)由Bouchekara 等人于2017年提出,该算法受到体育比赛的启发,球员们为了赢得冠军而组成队伍进行队伍竞争,他们也为了赢得最有价值球员( most valuable player,MVP) 奖杯进行独立竞争。在最有价值球员算法中,每个球员代表一个潜在的解,通过球员竞争和队伍竞争来不断提高球员的能力,最终产生一个 MVP,而 MVP 对应问题的最优解。
在这里插入图片描述

最有价值球员算法中的每个球员都代表了一个潜在的解。球员通过所在球队中的个人竞争以及联盟中队伍与队伍之间的竞争不断提高球员的能力,相应解的质量也在不断提高,从而产生联盟中能力最强的球员,即 MVP,同时算法找到问题的最优解。最有价值球员算法的实现过程如下:

1.1初始化

在搜索空间内,首先随机生成 PlayersSize 个球员,然后将这些球员随机分成 TeamsSize 个队伍。球队的生成方法如下:
n P 1 =  ceil  (  PlayersSize  /  TeamsSize  ) n P 2 = n P 1 − 1 n T 1 =  PlayersSize  − n P 2 ⋅  TeamsSize  ) n T 2 =  TeamsSize  − n T 1 \begin{array}{c} n P 1=\text { ceil }(\text { PlayersSize } / \text { TeamsSize }) \\ n P 2=n P 1-1 \\ n T 1=\text { PlayersSize }-n P 2 \cdot \text { TeamsSize }) \\ n T 2=\text { TeamsSize }-n T 1 \end{array} nP1= ceil ( PlayersSize / TeamsSize )nP2=nP11nT1= PlayersSize nP2 TeamsSize )nT2= TeamsSize nT1

其中,ceil 为向上取整函数,nT1 表示第一部分的队伍数量,nP1 表示第一部分每个队伍的队员数量; nT2 表示第二部分的队伍数量,nP2 表示第二部分每个队伍的队员数量。

1.2竞争阶段

在完成初始化之后,算法进入竞争阶段。在该阶段中,球员通过队内竞争来提高自身能力,同时球队为了提升其实力与其它队伍进行队间竞争。下文给出球员之间的个体竞争以及球队之间的队伍竞争的具体方法。
在这里插入图片描述

1.2.1个体竞争

在个体竞争阶段,每个球员都致力于成为所在队伍中的最佳球员( Franchise Player) 和联盟最有价值球员( MVP) 。为此,球员努力去提高自身能力,并与所在队伍中最佳球员和联盟最有价值球员做比较。因此,每个球员按照如下式更新:

T E A M i = T E A M i + r a n d ⋅ ( F r a n c h i s e P l a y e r s − T E A M i ) + 2 ⋅ rand ⁡ ⋅ ( M V P − T E A M i ) TEAMi = TEAMi + rand \cdot( FranchisePlayers-T E A M i)+2 \cdot \operatorname{rand} \cdot(M V P-T E A M i) TEAMi=TEAMi+rand(FranchisePlayersTEAMi)+2rand(MVPTEAMi)
其中,TEAMi表示第 i 个队伍中队员; rand 是[0,1]之间服从均匀分布的常数; FranchisePlayeri表示第 i 个队伍中的最佳球员; MVP 表示联盟最有价值球员。

1.2.2队伍竞争

在球员完成个体竞争之后,球队之间进行队伍竞争。在这个阶段,TEAMi和 TEAMj两个队伍相互比赛。按以下机制选取获胜队伍:

以最小化问题为例,首先按照下式标准化队伍的适应度。
 fitness  N (  TEAMi  ) =  fitness  (  TEAMi  ) − min ⁡ (  fitness  (  ALLTeams  ) ) \begin{array}{c} \text { fitness } N(\text { TEAMi })=\text { fitness }(\text { TEAMi })- \min (\text { fitness }(\text { ALLTeams })) \end{array}  fitness N( TEAMi )= fitness ( TEAMi )min( fitness ( ALLTeams ))

其中,fitness( TEAMi) 是第 i 个队伍未标准化的适应度值; min( fitness( ALL Teams) 是全联盟中最小的适应度值。TEAMi打败 TEAMj的概率如下式所示:
Pr ⁡ {  TEAMibeatTEAMj  ) = 1 − (  fitness  N (  TEAMi  ) ) k (  fitness  N (  TEAMi  ) ) k + (  fitness  N (  TEAMj  ) ) k \begin{array}{l} \operatorname{Pr}\{\text { TEAMibeatTEAMj })=1- \frac{(\text { fitness } N(\text { TEAMi }))^{k}}{(\text { fitness } N(\text { TEAMi }))^{k}+(\text { fitness } N(\text { TEAMj }))^{k}} \\ \end{array} Pr{ TEAMibeatTEAMj )=1( fitness N( TEAMi ))k+( fitness N( TEAMj ))k( fitness N( TEAMi ))k

其中,其中: k = 1; fitness N( TEAMi) 为第 i 个队伍的适应度值,Pr 表示获胜概率。

根据上两个式字 ,获胜概率分为不同和相同两种情况:

(1)如果两个队伍的获胜概率不同,则会生成一个[0,1]之间的随机数,如果这个随机数大于较高的获胜概率,则获胜概率较低的队伍获胜,反之,则获胜概率较高的队伍获胜。

(2)如果两个队伍的适应度相同,则会得到相同的获胜概率。因此,还需要再生成一个[0,1]之间的随机数,若这个随机数高于 0. 5,第一个队伍获胜,否则,第二个队伍获胜。

当球队 TEAMi获胜时,则 TEAMi中队员按如下公式更新
 TEAM  i =  TEAM  i +  rand  ⋅ (  TEAMi  −  FranchisePlayers  j ) \text { TEAM } i=\text { TEAM } i+\text { rand } \cdot\left(\text { TEAMi }-\text { FranchisePlayers }_{j}\right)  TEAM i= TEAM i+ rand ( TEAMi  FranchisePlayers j)
其中,TEAMi表示第 i 个队伍中队员; rand 表示[0,1]之间均匀分布的随机数; FranchisePlayerj表示第 j 个队伍中的最佳球员。当球队 TEAMj获胜时,该队伍中队员按如下公式更新

 TEAM  i =  TEAM  +  rand  ⋅ (  FranchisePlayers  j −  TEAM  ) \text { TEAM } i=\text { TEAM }+\text { rand } \cdot\left(\text { FranchisePlayers }_{j}-\text { TEAM }\right)  TEAM i= TEAM + rand ( FranchisePlayers j TEAM )

1.3MVPA伪代码

在这里插入图片描述
参考文献:
[1]王宁,刘勇.求解最优化问题的新型最有价值球员算法[J].计算机仿真,2020,37(06):273-282+327.
[2]缪炳荣,彭齐明,杨树旺,雒耀祥,裘杨喆.基于最有价值球员算法的结构损伤识别方法[J].重庆交通大学学报(自然科学版),2022,41(01):67-75.
[3]王宁,刘勇.考虑多种训练方式的自适应最有价值球员算法[J].计算机应用,2020,40(06):1722-1730.
[4]刘鑫. 最有价值球员算法及应用研究[D].广西民族大学,2019.DOI:10.27035/d.cnki.ggxmc.2019.000513.
[5]Bouchekara, Reh H . Most Valuable Player Algorithm: a novel optimization algorithm inspired from sport[J]. Operational Research, 2017.

二、旅行商问题

旅行商问题Traveling salesman problem, TSP)是一个经典的组合优化问题,它可以描述为一个商品推销员去若干城市推销商品,要求遍历所有城市后回到出发地,目的是选择一个最短的路线。当城市数目较少时,可以使用穷举法求解。而随着城市数增多,求解空间比较复杂,无法使用穷举法求解,因此需要使用优化算法来解决TSP问题。
一般地,TSP问题可描述为:一个旅行商需要拜访n个城市,城市之间的距离是已知的,若旅行商对每个城市必须拜访且只拜访一次,求旅行商从某个城市出发并最终回到起点的一条最短路径。
记n个城市序号构成集合为N={1,2,…,n},旅行商拜访完n个城市所经过的回路记为:
P = { p 1 → p 2 → ⋯ → p n → p 1 } P=\left\{p_{1} \rightarrow p_{2} \rightarrow \cdots \rightarrow p_{n} \rightarrow p_{1}\right\} P={p1p2pnp1}
其中, p i ∈ N , p i ≠ p j ( i ≠ j ) , i = 1 , 2 , ⋯   , n p_{i} \in N, p_{i} \neq p_{j}(i \neq j), i=1,2, \cdots, n piN,pi=pj(i=j),i=1,2,,n
若城市之间的距离矩阵为 D = ∣ d i j ∣ n × n D=\left|d_{i j}\right|_{n \times n} D=dijn×n,则TSP问题的数学模型可表示为:
min ⁡ f ( P ) = ∑ i = 1 n − 1 d p i , p i + 1 + d p n , p 1 \min f(P)=\sum_{i=1}^{n-1} d_{p_{i}, p_{i+1}}+d_{p_{n}, p_{1}} minf(P)=i=1n1dpi,pi+1+dpn,p1
其中, f ( P ) f(P) f(P)表示旅行商行走路线的总路径长度。

三、求解结果

本文选取国际通用的TSP实例库TSPLIB中的测试集burma14,burma14中城市分布如下图所示:
在这里插入图片描述

本文采用最有价值球员算法求解burma14:

close all
clear
clc

代码链接:https://pan.baidu.com/s/11I6eMyMU3k-UHfUu1O_mIA 
提取码:1234

%数据集参考文献  REINELT G.TSPLIB-a traveling salesman problem[J].ORSA Journal on Computing,1991,3(4):267-384.
%最有价值球员算法(Most Valuable Player Algorithm, MVPA)
global data
Dim=size(data,1)-1;%维度
lb=-10;%下界
ub=10;%上界
fobj=@Fun;%计算总距离
SearchAgents_no=120; % 种群大小(可以修改)
Max_iteration=30; % 最大迭代次数(可以修改)
[bestX,fMin,curve]=MVPA(SearchAgents_no,Max_iteration,lb,ub,Dim,fobj);  %最有价值球员算法(Most Valuable Player Algorithm, MVPA)

其中一次结果:

最有价值球员算法的收敛曲线:
在这里插入图片描述

最有价值球员算法求得的路径:
在这里插入图片描述

最有价值球员算法求解的最短总路径:30.8785

四、参考代码

文件夹内包含所有代码及使用说明,点击main.m即可运行。

在这里插入图片描述



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

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

相关文章

使用VMware安装系统Window、Linux操作系统

使用VMware安装系统Window、Linux操作系统 下载镜像文件打开VMware 下载镜像文件地址或链接: Windows全家桶镜像文件下载网站:msdn.itellyou.cnWindows 10 种子文件 ed2k://|file|cn_windows_10_business_editions_version_1803_updated_aug_2019_x64_dv…

Js逆向教程-14反调试

Js逆向教程-14反调试 一、检测是否在调试 键盘监听(F12)检测浏览器的高度插值检测开发者人员工具变量是否为true利用console.log调用次数利用代码运行的时间差利用toString检测非浏览器 二、显性 2.1 debugger: function xx() {debugger;…

盘点re:Invent历年重磅创新:今年亚马逊云科技又将有哪些重磅发布?

“云计算春晚”re:Invent即将开幕,这一次亚马逊云科技会带来哪些重磅发布? 一年一度的亚马逊云科技re:Invent大会即将在下周开幕。作为云计算行业的顶级盛事,亚马逊云科技re:Invent大会看出云计算领域创新的风向标,也…

QQ小程序——无法正常创建项目与uniapp联动问题

目录 一、使用QQ小程序开发者工具无法创建项目 情境引入 检查原因 解决方法 总结: 二、QQ小程序开发者工具无法与uniapp联动 情境导入 问题排错 解决方法 三、QQ小程序开发者工具无法正常上传 情境导入 错误分析 解决方法 心得分享 分清工作和学习的区别…

运动耳机什么牌子的好,推荐几款排行靠前的耳机

骨传导耳机近些年在耳机界迅速燃起,其设计原理是由贝多芬含棍棒发声所启发,而佩戴骨传导耳机主要是为了防止细菌在耳道内的滋生,除此之外骨传导耳机的佩戴方式也是直接将耳机套在头骨处即可完成佩戴,不用进入耳道,能够…

【torch-sparse及pytorch-geometric 安装】

torch-sparse及pytorch-geometric 安装 pip安装完pytorch-geometric之后,报错No module named torch_sparse 然后安装pip安装torch-sparse,结果报错,百度一下怎么安装,无果,转战官方文档,成功! …

实验讲解-线程池停止执行任务 Executor.execute shutdown awaitTermination shutdownNow()

1 Executor.execute public interface Executor { 在将来的某个时间执行给定的可运行的任务。该可运行的任务可以在新线程、池线程或调用线程中执行,由Executor实现决定。 参数: command–可运行的任务 投掷: RejectedExecutionException–…

Kafka生产者之分区

一、分区好处 (1)便于合理使用存储资源,每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一块一块数据存储在多台Broker上。合理控制分区的任务,可以实现负载均衡的效果; (2&…

【畅购商城】购物车模块之查看购物车

目录 分析 接口 后端实现 前端实现:显示页面 前端实现:显示购物车信息 分析 用户如果没有登录,购物车存放在浏览器端的localStorage处,且以数组的方式进行存储。用户如果登录了,购物车存放在redis中&#xff0c…

项目实战——对战回放和排行榜

目录 一、天梯积分更新 二、实现对局列表页面 三、前端测试 四、实现查看录像功能 五、实现分页功能 六、后端实现查询排行耪 七、前端展示 八、限制Bot数量 一、天梯积分更新 可以自己定义一下规则 存之前算一下两名玩家的天梯积分 实现更新,实现后重启看一…

挂耳式蓝牙耳机性价比推荐,盘点五款性能高的耳机分享

众所周知,骨传导耳机之所以能够受到人们的喜欢,是因为其佩戴不需入耳,尤其是针对于运动爱好者来说,在户外运动的时候不但可以听见音乐,还可以听见外界的声音,进一步的将危险系数拉低,其次也是因…

音乐信息提取-1-音频表示

音频信号是声音的一种表示,它表示由振动引起的气压随时间的波动(数字信号处理-1-关于声音与波)。 1 波形与时域 音频信号在时域上的表示就是波形随时间的变化,可以将波形的幅度值理解为声压。 声音是连续的,但数字记…

Spring创建、Bean对象的存储和读取

文章目录1、创建Spring项目1.1 创建Maven项目1.2 添加 Spring 框架支持1.3 添加启动类并添加main(非必要步骤)2、存储Bean对象2.1 添加Spring配置文件(第一次添加)2.2 创建Bean对象2.3 将Bean对象注册到Spring容器中3、读取并使用…

秋招挂麻了,就差去送外卖了,10w字Java八股啃完,春招必拿下

最近看到一名前腾讯员工发的帖子,总结的近期面试结果,真的就是那三个字:挂麻了…… 一个毕业后就在腾讯的高级程序员,由于种种原因,离职出来了。趁着金九银十求职季,互联网大厂小厂面试了一圈,感…

AcWing 搜素与图论

搜索 DFS 全排列 代码 #include<iostream> using namespace std;int vis[10], a[10];void dfs(int step, int n) {if (step n 1){for (int i 1; i < n; i)printf("%d ", a[i]);printf("\n");return;}for (int i 1; i < n; i){if (!vis[i…

计算机网络笔记5 传输层

文章目录前言一、运输层概述二、运输层的端口与复用、分用的概念三、UDP协议 和 TCP协议 对比用户数据报协议 UDP&#x1f4a6;&#xff08;User Datagram Protocol&#xff09;传输控制协议 TCP&#x1f4a6;&#xff08;Transmission Control Protocol&#xff09;四、TCP协议…

作用域和作用域链

文章目录1.作用域&#xff08;Scope&#xff09;1.1 什么是作用域1.2 全局作用域1.3 函数作用域1.3 块级作用域2. 作用域链2.1 自由变量2.2 作用域链2.3 *自由变量的取值2.4 作用域与执行上下文的区别3.总结1.作用域&#xff08;Scope&#xff09; 1.1 什么是作用域 当前的执…

easy-rules规则引擎最佳落地实践

写作目的 这是一个头部互联网公司中的一个问题。因为有很多业务产品线&#xff0c;作为一个新人或者团队外的人员是很难区分不同的产品线之间的区别的&#xff0c;因此需要给某个产品线一个描述。但是随着业务的发展&#xff0c;产品线下可能又根据某个字段进一步划分&#xf…

招生CRM系统|基于Springboot实现培训机构招生CRM管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

Mongodb操作基础 分片

Mongodb分片 MongoDB分片是MongoDB支持的另一种集群形式&#xff0c;它可以满足MongoDB数据量呈爆发式增长的需求。当MongoDB存储海量的数据时&#xff0c;一台机器可能无法满足数据存储的需求&#xff0c;也可能无法提供可接受的读写吞吐量&#xff0c;这时&#xff0c;我们就…