基于烟花算法和局部双环的社区划分方法与流程

文档序号:14120403阅读:383来源:国知局
基于烟花算法和局部双环的社区划分方法与流程

本发明属于社会网络的社区划分技术领域,更具体的说,是一种基于群体智能优化算法--烟花算法和局部双环的进行社区划分的实现方法。



背景技术:

在现实社会中,有各种各样复杂的系统,而这些系统往往都可以表示为网络的形式以方便进行分析和管理。在这个网络中,每一个节点对应着现实系统中的一个实体对象,而节点与节点之间的边则对应着现实系统中实体对象间的交互关系。例如在www网络中,每一个网页就是网络中的一个节点,而网页之间的超链接跳转关系就是网络中的边;在现实社会的社交网络中,每一个人就是网络中的一个节点,人与人之间的人际关系就可以表示为网络中的边。此外,随着科技的发展和网络技术的进步,在线社交网络也变得越来越流行,其数据量和网络规模十分庞大,这就对社区划分算法提出了一个更高要求,要求其具有较高的准确性和处理大数据的能力。

社区划分作为一个np-hard问题也在近几年成为了一个研究热点,有越来越多的学者投入到社区划分算法的研究中。传统的社区划分方法大致分为两类:图分割方法和层次聚类方法。图分割方法需要知道网络中社区的数量和规模,而层次聚类方法并不需要这个先验知识。层次聚类方法的算法性能取决于相似度度量的选择。在2003年,newman第一次提出了模块度(modularity)的概念,并且通过优化模块度q的值来获得社区划分的结果。模块度也被用来衡量一个社区划分结果的好坏,其值越接近于1表示社区划分的结果越好。标签传播算法(lpa)也是被广泛使用的社区划分算法,它由raghavan等人提出并且具有速度快和准确率高的优点。

群体智能优化算法在解决现实问题上也有着良好的表现,其也受到了众多学者的广泛关注。ga-net是一个由pizzuti提出的用于解决社区划分的方法,其通过不断优化一个单目标函数来找到紧密连接的小组,这个目标函数被称为社区值(communityscore)。cnm也是一个使用优化方法来进行社区划分的算法,它是一个通过优化模块度值的快速贪婪算法,是传统gn算法的一个扩展。infomap是一个由rosvall等人提出的基于信息论方法的进行社区划分的算法。烟花算法(fwa)是由谭营教授于2010年提出一种新型群体智能优化算法,在每次算法的迭代中,其依次利用爆炸操作、变异操作、映射规则和选择策略直至达到终止条件,该算法也被广泛运用于数据扰动和tsp等问题,并且有许多基于fwa的改进算法被不断提出。

上述三种社区划分方法有着较高的时间复杂度和较低的社区划分的准确度并且没有对原始网络进行高效的预处理操作。



技术实现要素:

为解决上述问题,本发明的目的在于提出一种有效的基于烟花算法和局部双环的社区划分方法,该方法能够对一个无权无向图进行社区划分。

具体技术方案如下:

一种基于烟花算法和局部双环的社区划分方法,包含如下步骤:

步骤1:初始化网络中的节点标签和算法参数;

步骤2:计算网络中节点的重要性;

步骤3:根据节点的重要性大小对节点进行排序;

步骤4:构造局部双环并通过局部双环初始化烟花,计算初始这代烟花或者火花所代表的社区划分结果的模块度值,基于模块度值计算爆炸产生的火花数量以及爆炸范围;

步骤5:在第一次迭代时,初始这代烟花爆炸并生成火花,并选择进入下一次迭代的烟花或者火花;在非第一次迭代时,使用上一次选择的烟花或者火花爆炸并生成火花,并选择进入下一次迭代的烟花或者火花;

步骤6:如果未达到迭代终止条件则返回步骤5;如果达到迭代终止条件,则输出模块度值最高的烟花所代表的社区划分结果。

作为一种优先方案,每个节点的参数设置包括每一代烟花和火花的总数n、用于控制每一个烟花产生的火花数量的常量m、以及用于控制每一个烟花的爆炸范围的常量。

作为一种优先方案,步骤1所述的对节点标签的初始化是将网络中每个节点的标签设置为一个独一无二的值。如,将每个节点的标签初始化为该节点的id。

作为一种优先方案,步骤2所述的节点重要性的定义如下:

对任意一个网络g={v,e},v表示网络中节点的集合,e表示网络中边的集合,对任意节点vi∈v,其节点重要性为:

其中,vi′为节点vi的邻居节点vi′集合,d(vi′)为邻居节点vi′的度。

作为一种优先方案,步骤4所述的烟花初始化算法如下:在排序后的节点中,选择一特定节点并在网络中寻找两个环,即局部双环,其中,第一个环是指网络中含有某特定节点的最小环,第二个环是指网络中含有第一个环中除该特定节点外重要性最大的节点对应的最小环;将这两个环上的节点的标签设置为特定节点的标签。在寻找这两个环时,如果有多个最小环满足条件,则随机选择一个。特定节点可以是指排序后的第0个节点、第1个节点或第2个节点。

作为一种优先方案,步骤4中,所述的爆炸产生的火花数量si的计算方法是:

式中,m为控制每一个烟花生成火花数量的常量,yworst是当前这代n个烟花或者火花中的最差的目标函数值,f(xi)是实体xi的目标函数值,ε是一个极小的正数用来避免分母为0的情况;

所述的爆炸产生的火花爆炸范围ai的计算方法是:

式中,a′为控制每一个烟花爆炸范围的常量,ybest是当前这代n个烟花或者花火中的最优的目标函数值,f(xi)是实体xi的目标函数值,ε是一个极小的正数用来避免分母为0的情况。

目标函数是模块度函数,定义如下:

式中,|e|表示网络中边的数量,aij是网络邻接矩阵中的第i行第j列的项,ki和kj分别表示节点i和节点j的度,如果节点i和节点j在同一个社区中,则δ(ci,cj)的值取1,否则,δ(ci,cj)的值取0。

作为一种优先方案,步骤5中还包括计算所有的烟花生成完火花后的下一代的烟花或者花火所代表的社区划分结果的模块度值,根据模块度值大小选择进入下一次迭代的烟花或者火花。

作为一种优先方案,步骤5所述的烟花产生火花的过程是一个伴随着变异的过程,其产生的火花数量为si,产生的每一个火花的每个节点的标签变异概率由ai决定。

表示第i个烟花的第k个节点的标签,以neig_labelk表示第k个节点的邻居中出现次数最多的标签,在生成火花的过程中,的变异方法如下:

上式中,random(0,1)是指在0到1之间产生的一个随机数,sigmoid(ai)的计算方法如下:

在所有的烟花生成完火花后,将根据当前这代每个烟花或者火花的社区划分结果的模块度值对其进行排序,并选择模块度值大的前n个烟花或者火花作为下一次迭代的烟花。

作为一种优先方案,步骤6所述的迭代终止条件是当前迭代次数达到最大迭代次数。

与现有技术相比较,本发明是一种基于烟花算法和局部双环的定义实现的进行社区划分的方法,具有以下有效果:

(1)通过局部双环的概念可以提供一种为网络进行社区划分预处理的方法,所述预处理包含了计算节点重要性、对节点按照重要性排序和构造局部双环,通过该预处理方法能降低社区划分的计算量,进一步提升社区划分的准确性及效率,以划分出更好的社区结构。

(2)通过本发明所公开的社区划分方法,将无权无向图作为输入,最终得到的具有最大模块度值的烟花所代表的社区结构就是该无权无向图的非重叠社区划分结果,从而实现了对无权无向图进行非重叠社区划分。

(3)与ga-net、infomap和cnm方法相比,本发明所公开的社区划分方法具有更高的准确率和更好的社区结构。

附图说明

图1是实施例一中待进行社区划分的网络图

图2是实施例一中图1的一种烟花初始化结果图

图3是实施例一中图1的另一种烟花初始化结果图

图4是实施例一中图1的社区划分结果图

图5是实施例二中待进行社区划分的网络图

图6是实施例二中图5的一种烟花初始化结果图

图7是实施例二中图5的另一种烟花初始化结果图

图8是实施例二中图5的再一种烟花初始化结果图

图9是实施例二中图5的社区划分结果图

图10是本方法与ga-net、infomap和cnm方法对于测试网络产生的模块度值对比图。

具体实施方式

一种基于烟花算法和局部双环的社区划分方法,共包含6个步骤,具体如下:

步骤1:初始化网络中的节点标签和算法参数。

对每个节点的标签初始化为其节点id;对各节点的参数设置包括:每一代烟花和火花的总数n设置为50,用于控制每一个烟花产生的火花数量的常量m=50,用于控制每一个烟花的爆炸范围的常量a′=40。

步骤2:计算网络中节点的重要性。

对任意一个网络g={v,e},v表示网络中节点的集合,e表示网络中边的集合。对任意节点vi∈v,其节点重要性为:

其中,vi′为节点vi的邻居节点集合,d(vi′)为节点vi′的度。

步骤3:基于节点重要性对节点进行排序。

对网络中的所有节点根据其重要性的大小进行降序排列,不限排序算法和升降序规则,排列后的节点集合记为v′,v′[i]表示v′中的第i个节点。

步骤4:构造局部双环并初始化烟花,计算当前这代烟花或者火花所代表的社区划分结果的模块度值,并将计算得到的最大或最小模块度值作为计算参数计算其爆炸产生的火花数量以及爆炸范围。

烟花初始化方法如下:

每一代n个烟花或者花火中的第i个实体记为xi,局部双环的第一个环是指网络中含有节点v′[imod3]的最小环。其中,最小环是指环中所含节点个数最少。局部双环的第二个环是指网络中含有第一个环中非节点v′[imod3]的重要性最大的节点的最小环。在选择这两个环时,如果有多个最小环满足条件,则随机选择一个。最后将这两个环上的节点的标签设置为节点v′[imod3]的标签。

其中,imod3指的是i对3取余的结果,共有3种可能(可能的结果分别为0,1,2),因此,第一个环将被初始化为含有节点v′[0]或者v′[1]或者v′[2]的最小环。

爆炸产生的火花数量si的计算方法如下:

上式中,m为控制生成火花数量的常量,yworst是这一代n个烟花或者火花中的最差的目标函数值,f(xi)是实体xi的目标函数值,ε是一个极小的正数用来避免分母为0的情况。这里的目标函数采用的是模块度函数。

爆炸产生的火花爆炸范围ai的计算方法如下:

上式中,a′为控制爆炸范围的常量,ybest是这一代n个烟花或者花火中的最优的目标函数值,f(xi)是实体xi的目标函数值,ε是一个极小的正数用来避免分母为0的情况。这里的目标函数采用的是模块度函数。

计算得到的爆炸产生的火花数量以及爆炸范围将作为迭代过程中烟花或者花火的爆炸条件,即,在迭代过程中烟花或者花火的爆炸产生的火花数量以及爆炸范围都将影响下一次迭代中其产生的火花数量和其生成的火花质量。

其中,模块度函数的定义如下:

式中,|e|表示网络中边的数量,aij是网络邻接矩阵中的第i行第j列的项,ki和kj分别表示节点i和节点j的度,如果节点i和节点j在同一个社区中,则δ(ci,cj)的值取1,否则,δ(ci,cj)的值取0;

步骤5:生成火花,并选择进入下一次迭代的烟花或者火花。

其中,生成火花的方法是:

在本方法中,烟花以及烟花产生的火花都代表着一种社区划分的结果,每个烟花或者火花都记录着每个节点的标签情况,相同标签的节点被视为在同一个社区中。烟花产生火花的过程是一个伴随着变异的过程,其产生的火花数量为si,产生的每一个火花的每个节点的标签变异概率由ai决定。

更进一步的,以表示第i个烟花的第k个节点的标签,以neig_labelk表示第k个节点的邻居中出现次数最多的标签。在生成火花的过程中,的变异方法如下:

上式中,random(0,1)是指在0到1之间产生的一个随机数,而sigmoid(ai)的计算方法如下:

在所有的烟花生成完火花后,计算每个烟花或者火花的社区划分结果的模块度值,然后将根据每个烟花或者火花的社区划分结果的模块度值对其进行排序,并选择模块度值大的前n个烟花或者火花作为下一次迭代的烟花。

步骤6:如果未达到迭代终止条件则返回步骤5;如果达到迭代终止条件,则输出模块度值最高的烟花所代表的社区划分结果。迭代终止条件是当前迭代次数是否达到最大迭代次数。

基于上述方法,给出两个具体的实施例:

实施例一

如图1所示,网络中一共有7个节点,其中节点1、2和3紧密连接,节点4、5、6和7紧密连接。

结合图2至图4所示,在步骤1阶段,它们的标签被设置为它们的id号。

在步骤2、3阶段,它们依照重要性降序的结果为:3、4、6、2、5、1、7,对应的节点重要性为:1.33、1.33、1、0.83、0.83、0.83、0.83。

在步骤4阶段,根据步骤4的烟花初始化方法,重要性较大的三个节点依次为节点3、4和6,包含它们的最小环为环{1、2、3}和环{4、5、6、7}。

需要注意的是,这种情况下的局部双环重叠,只有一个局部环。初始化的结果有两类,如图2和图3所示。图2中节点1、2和3的标签被设置为相同的,意味着它们被视为在同一个社区中;图3中节点4、5、6和7的标签被设置为相同的,意味着它们被视为在同一个社区中。

然后计算当前这代烟花或者火花所代表的社区划分结果的模块度值,并根据计算得到的最大或最小模块度值计算每个烟花的爆炸范围和产生的火花数量。

经计算所得,局部双环为{1、2、3}的烟花对应的模块度值为0.0625,局部双环为{4、5、6、7}的烟花对应的模块度值为0.03125。烟花初始化的结果中最大的模块度值为0.0625,最小值为0.03125。更详细一点的,第3k+1(k=0,1,2…16)个烟花的模块度为0.0625,其局部双环为{1、2、3},其下一代的变异概率为0.5010;第3k+2(k=0,1,2…16)、第3k+3(k=0,1,2…15)个烟花的模块度为0.03125,其局部双环为{4、5、6、7},其下一代的变异概率为0.7713。

在步骤5中,火花依据烟花的爆炸范围来计算每个节点标签发生变异的概率,如果发生了变异,那么该节点的标签将会更新为其邻居节点中出现次数最多的标签。在所有火花生成完毕后,计算烟花或者火花的模块度值,并选择模块度值较高的50个进入下一次迭代。

在步骤6判断达到迭代终止条件后,得到一种社区划分的结果如图4所示。

实施例二

如图5所示,网络中一共有14个节点。

结合图6至图9所示,在步骤1阶段,它们的标签被设置为它们的id号。

在步骤2、3阶段,它们依照重要性降序的结果为:7、13、3、10、4、5、11、12、1、6、2、14、9、8,对应的节点重要性依次为:2.75、1.83、1.58、1.17、1.08、0.83、0.83、0.83、0.75、0.75、0.75、0.33、0.25、0.25。

在步骤4阶段,根据步骤4的烟花初始化方法,重要性较大的三个节点依次为节点7、13和3。包含它们的最小环为环{3、4、5、6、7}、环{10、11、12、13}和环{1、2、3}。需要注意的是,这种情况下,针对节点7得到的局部双环为环{3、4、5、6、7}和环{1、2、3},针对节点13和节点3得到的局部双环是重叠的,只有一个局部环。初始化的结果有三类,如图6、图7和图8所示。图6中节点1、2、3、4、5、6和7的标签被设置为相同的,意味着它们被视为在同一个社区中;图7中节点10、11、12和13的标签被设置为相同的,意味着它们被视为在同一个社区中;图8中节点1、2和3的标签被设置为相同的,意味着它们被视为在同一个社区中。

计算完每个烟花的爆炸范围和产生的火花数量后,在步骤5中,火花依据烟花的爆炸范围来计算每个节点标签发生变异的概率,如果发生了变异,那么该节点的标签将会更新为其邻居节点中出现次数最多的标签。在所有火花生成完毕后,选择模块度值较高的50个进入下一次迭代。

在步骤6完成后,得到一种社区划分的结果如图9所示。

综上所述,本发明所公开的社区划分方法降低了社区划分的计算量、给出了一种高效的对网络进行预处理的方法并且进一步提升社区划分的准确性,能够划分出更好的社区结构。图10所示的是本方法与ga-net、infomap和cnm方法对于测试网络产生的模块度值对比图,其中ldrfa表示本文所述方法,可见对于不同的参数值,本方法均落得了优于其他三种方法的模块度值。因此,采用本发明所公开的社区划分方法相对于传统的ga-net、infomap和cnm方法具有更高的准确率和更好的社区结构。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1