基于matlab构造简易的欧洲五大联赛转会网络【“自然哲学”中的matlab原理_2】

摘要:欧洲五大联赛作为足球世界里最高水准的代表,而其中每一位球员的流动都或多或少的影响着足坛的格局,当然也牵动着世界各地球迷的心。而这个球员转会网络表现出一些联赛内部流动频繁,联赛之间流动较少等多局域世界网络所具有的特性。

关键词:五大联赛;球员流动;多局域世界网络

目录

0 前言

1 五大联赛主体模型的建立

2 五大联赛网络中球员的转入与转出

2.1球员加入到五大联赛

2.2球员离开五大联赛

3 五大联赛内部球员的流动

3.1单个联赛内部的球员流动

3.2五大联赛中各联赛之间的球员转会

4 五大联赛球员转会网络的构建

5 不足


0 前言

欧洲五大联赛,即西甲、意甲、英超、法甲以及德甲,除开德甲外,每一个联赛都存在20支球队,而每只球队拥有大量的球员,仅一线队就有25名球员。显而易见,这是一个庞大的网络。除了体系庞大之外,球员的转会也意味着大量资金的流动,仅以2019年的夏季转会窗口为例,有三家联赛的转会总支出都达到了10亿欧元,具体数据如下图(数据来源于德国权威转会统计网站《转会市场》):

这上面的数据代表着五大联赛2019年夏窗转会的总体数据,而除开这个图表。五大联赛还存在联赛内部人员流动频繁的特点,比如西甲方面,马德里竞技的格列兹曼以1.2亿欧元的身价转会到同在西甲的巴塞罗那。当然,除开这种巨星的内部倒戈,联赛内部也有大量年轻球员为了谋求自身发展而选择转投到联盟中的其它球队。这种网络内部存在着相当大的聚类特性,网络内部各元素之间的联系相当紧密。

当然球员的流动不仅仅存在于联赛内部,各个联赛之间,也有相当的球员转会,而且联赛之间的球员转会一般还是所谓的“大鱼”。比如英超切尔西的阿扎尔,就以1亿欧元的转会费加盟西甲的皇家马德里。这种网络之间的联系往往是比较稀疏,且通常都是由网络中的主干之间进行联系,即各个联赛中的“豪门”才具备足够的资金去完成这种转会。

除此之外,还存在着五大联赛之外的球员加入到五大联赛之中的情况,比如中国球员武磊就从上海上港加盟西甲的西班牙人(注:这笔转会没有发生在2019年夏窗);当然,有球员加盟到五大联赛,也有球员离开这个网络。这种情况,可以考虑使用向网络中增加或减少边的形式来展现。

从上面各种特征我们可以看出,五大联赛的球员流动网络同多局域世界网络存在相当大的契合度,因此本文将试图通过多局域世界网络来对其进行描述。

1 五大联赛主体模型的建立

首先我们将5大联赛分别定义为5个子函数,编写生成m0个节点,e0条边的网络邻接矩阵的Matlab函数generategraph。其中m0代表每个联赛中的俱乐部数量,e0代表每个联赛中一线队的球员数量。

模拟5大联赛主体模型邻接矩阵的子函数程序:

function a=generategraph(m0,e0); 
if e0>m0*(m0-1)/2
    fprintf('输入数据m0,e0不匹配'); return
end
a=zeros(m0); 
ra=rand(m0); 
ra=tril(ra); 
ra([1:m0+1:end])=0; 
[sra,ind]=sort(nonzeros(ra),'descend');
p=sra(e0);  
a(ra>=p)=1; 
a=a+a'; 

 其中m0代表单个网络中的节点数,即我们这个网路中的每个联赛中的俱乐部数量。而e0代表单个网络中的边,即每个联赛中的球员。

2 五大联赛网络中球员的转入与转出

2.1球员加入到五大联赛

球员从外部网络加入到五大联赛网络的每一个联赛中,也就是对单个网络进行加边处理,这里我们运用到一个叫addedge的子函数。其中a代表上文中已建立的初始网络的邻接矩阵,m代表向网络中加边的数量,即加入的球员数量alpha代表函数的一个调节因子,这里取alpha=0.5。

向五大联赛网络中增加球员的子程序:

function b=addedge(a,m,alpha); 
b=a; n=length(a); 
for i=1:m
    deg=sum(b); 
    LP=(deg+alpha)/sum(deg+alpha); 
    pp=cumsum(LP); 
    rnum=randperm(n); 
    flag=1; 
    while flag<=n & deg(rnum(flag))==n-1
        flag=flag+1;
    end
    if flag==n+1, continue, end
    ind=find(pp>=rand); 
    if rnum(flag)~=ind(1) & b(rnum(flag),ind(1))==0 
        b(rnum(flag),ind(1))=1; b(ind(1),rnum(flag))=1;
    end   
end

2.2球员离开五大联赛

人来人往,有球员加入就代表着有球员离开,这里利用删除网络中的边来描述球员的转出。在次子函数中,m代表删除边的数量,即离开球员数量,输出参数b代表操作后新网络的邻接矩阵。

球员离开五大联赛的子程序:

function b=deleteedge(a,m,alpha); 
b=a; n=length(a); 
for i=1:m
    deg=sum(b); 
    LP=(1-(deg+alpha)/sum(deg+alpha))/(n-1);
    pp=cumsum(LP);  
rnum=randperm(n); 
flag=1;
    while flag<n & deg(rnum(flag))==0
        flag=flag+1;
    end
    if flag==n & deg(rnum(flag))==0
        continue 
    end
    ind=find(pp>=rand); 
        if b(rnum(flag),ind(1))==1
        b(rnum(flag),ind(1))=0; b(ind(1),rnum(flag))=0;  
    end
end

3 五大联赛内部球员的流动

3.1单个联赛内部的球员流动

联赛内部的球员流动,即单个局域网络内部节点之间打断边然后进行重连的过程,这里我们利用到WS随机网络中断边重连的思想。即将边的一个端点保持不变,而另一个端点与其它节点进行连接,其函数算法程序为:

for i=1:N-1 
    for j=i+1:N
        if A(i,j)~=0
            plot([x(i),x(j)],[y(i),y(j)],'linewidth',1.2); 
        end
    end
end

当然,我们可以通过调整N-1的值来改变重连数量(即转会数量),因为这里并不是建立WS小世界网络,而只是利用其中的一个断边重连的思想。

3.2五大联赛中各联赛之间的球员转会

联赛间球员的转会,可描述为跨局域网络建立长程边,由各局域网络之中的重要节点(即“豪门俱乐部”)之间建立联系。这里我们利用Matlab里面的addlongedge函数,来建立长程边,在此子函数中,m代表加边的数量(即转会数量)而A代表所有局域网络的细胞数。

球员完成跨联赛转会的子程序:

function [no,uv]=addlongedge(A,m,alpha);
n=length(A); 
no=[]; 
uv=[]; 
for i=1:m
    rn=randperm(n);
    no=[no,rn(1:2)'];
    a=A{rn(1)}; b=A{rn(2)};
    p1=(sum(a)+alpha)/sum(sum(a)+alpha); 
    pp1=cumsum(p1);  
    p2=(sum(b)+alpha)/sum(sum(b)+alpha); 
    pp2=cumsum(p2); 
    ind1=find(pp1>=rand); 
    ind2=find(pp2>=rand); 
    uv=[uv,[ind1(1);ind2(1)]]; 
end

4 五大联赛球员转会网络的构建

将上述子程序已经信息进行汇总,其中的参数设定具体如下  

五大联赛

每个联赛20支球队

每支球队人数为25人

球员转入五大联赛倾向

球员转出五大联赛倾向

联赛间转会倾向

m=5

m0=20

e0=25

r=0.25

s=0.05

u=0.25

其中,为了简化计算我们将德甲也假设为20支球队(实际18支)。并且为了对转会网络中进行定量描述,我们通过对网络中节点改变的度(即球队的球员转会数量)的频率进行了求解,可以直观的看出各球队转会的一个大体情况,其程序如下:

clc, clear
m=5; m0=20; e0=25; p=0.3; q=0.2; r=0.25; s=0.05; u=0.2;
m1=0; m2=5; m3=4; m4=6; alpha=0.5;
p=[p,q,r,s,u]; n=m;
pp=cumsum(p);
for i=1:m
    A{i}=generategraph(m0,e0); 
end
num(1:m)=m0; 
Tno=[]; Tuv=[]; 
for i=1:2000
    ind=find(pp>=rand); 
    switch ind(1)
        case 1
            n=n+1; A{n}=generategraph(m0,e0);   
            num(n)=length(A{n});
        case 2
            rn=randperm(n); k=rn(1); 
            A{k}=addnode(A{k},m1,alpha); num(k)=length(A{k});
        case 3
            rn=randperm(n); k=rn(1); 
            A{k}=addedge(A{k},m2,alpha);
        case 4
            rn=randperm(n); k=rn(1); 
            A{k}=deleteedge(A{k},m3,alpha);
        otherwise
            [no,uv]=addlongedge(A,m4,alpha);
            Tno=[Tno,no]; 
            Tuv=[Tuv,uv];  
    end
end
B=blkdiag(A{:}); 
num=[0,num];  
cnum=cumsum(num); 
for i=1:length(Tno)
    u=cnum(Tno(1,i))+Tuv(1,i); 
    v=cnum(Tno(2,i))+Tuv(2,i);
    B(u,v)=1; B(v,u)=1;
end
dp=mydegree(B); 
d=dp(1,:)'; 
gd=(dp(2,:)/length(B))'; 
subplot(1,2,1), plot(d,gd,'-o')
xlabel('各球队球员转会数量'),ylabel('频率'),title('各球队球员转会')

 运行结果如下:

可以看出,大多数球队球员转会数量都在0-5之间,只有极少数的达到了10人及以上,可以看出资金充沛的“土豪”球队在五大联赛网络中也只是站少数的,很多球队还是采取量入为出的转会策略。

5 不足

所构建的网络只能对五大联赛网络进行总体描述讨论,无法准确对各个联赛内部的转会进行精确的描述;其次,该网络中并没有对每条边进行加权处理,即无法准确的体现出不同球员之间身价的区别。

(此栏目为突发奇想的小点子,不一定严谨,但我希望它有趣)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值