热门标签 | 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即可运行。

在这里插入图片描述






























推荐阅读
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社区 版权所有