热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

一、最有价值球员算法最有价值球员算法(MostValuablePlayerAlgorithm,MVPA)由Bouchekara等人于20




一、最有价值球员算法

最有价值球员算法(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即可运行。

在这里插入图片描述






























推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
author-avatar
涛之圣首到
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有