基于微粒群算法的Steiner最优树计算方法及装置与流程

文档序号:13674870阅读:205来源:国知局

本发明涉及通信网络技术领域,特别是涉及一种基于微粒群算法的steiner最优树的计算方法及其装置。



背景技术:

随着网络技术的发展,网络多媒体业务逐渐变为互联网的主流业务,这些业务采用组播方式解决十分方便,但这些业务往往对qos(服务质量)参数有严格要求,因此能够快速建立满足qos的组播路由(即多播树)就成为互联网中的重要而急迫的研究课题。而优化多播树(即组播路由,由于其为树型结构,故成为多播树)的问题通常成为steiner树问题。

目前的steiner树算法一般是对无向图提出的,即计算steiner最优树时,树中的边没有方向的,也不区分父子节点,由于真实的网络拓扑多为有向图,目前的算法无法很好的解决有向图中的steiner最优树问题。

因此,如何提供一种能够解决有向图中的steiner最优树问题的steiner最优树的计算方法及其装置是本领域技术人员目前需要解决的问题。



技术实现要素:

本发明的目的是提供一种基于微粒群算法的steiner最优树的计算方法及其装置,解决有向图中的steiner最优树问题,且速度快,效率高。

为解决上述技术问题,本发明提供了一种基于微粒群算法的steiner最优树计算方法,包括:

步骤s1:随机初始化n个粒子,各个所述粒子内分别包含一棵根节点相同的steiner树,每棵所述steiner树均覆盖全部目标节点;

步骤s2:计算每棵所述steiner树的费用,将费用最小的粒子作为本周期最优解;并更新每个所述粒子的历史最优解;

步骤s3:依据微粒群算法关系式、所述本周期最优解以及所述历史最优解对每个所述粒子进行合并操作,得到n棵合并树;

步骤s4:分别对每棵所述合并树进行去环操作;

步骤s5:按照预设简化规则,将去环后的树中入度大于1的节点的入边进行部分删除,使该节点入度为1;

步骤s6:遍历简化后的树,将出度为0且不是目标节点的叶子节点与其父节点间的边进行删除,得到去枝后的树;

步骤s7:计算n棵所述去枝后的树的费用,将最小费用与当前的全局最优解的费用进行比较,选择两者中较小的所对应的steiner树记录为当前的全局最优解;

步骤s8:令迭代次数加1,并判断当前迭代次数是否达到预设最大值或当前的全局最优解是否已收敛,若是,将当前的全局最优解作为steiner最优树进行记录,若否,返回步骤s1。

优选地,所述步骤s1的过程具体为:

设定steiner树的根节点s,所述根节点属于树集合内;

随机选取全部节点集合中与所述树集合内的节点邻接且不在所述树集合中的节点加入所述树集合,并记录新加入的节点与所述树集合内与其邻接的节点之间的有向边,直至全部目标节点均属于所述树集合,此时得到一棵steiner原始树;

从最下层叶子节点开始遍历所述原始树,将出度为0且不是目标节点的叶子节点与其父节点间的边进行删除,得到一个所述粒子。

优选地,所述粒子中的steiner树的存储形式为n×n的矩阵x,n为所述steiner树包含的节点个数,所述矩阵中x[i][j]=0表明所述steiner树中节点i到节点j的边不存在,否则,表明节点i到节点j的边存在。

优选地,所述微粒群算法关系式具体为:

c1×rand()×(pid-xid)+c2×rand()×(pgd-xid)

其中,xid为当前待合并的粒子;pid为所述当前待合并的粒子的历史最优解;pgd为所述本周期最优解;rand()和rand()为两个相互独立的随机函数;c1和c2为学习因子;所述预设关系式中两个部分求和具体为两个部分求并集。

优选地,步骤s4的过程具体为:

从所述根节点开始遍历所述合并树上的节点;

依据深度优先算法判断当前遍历的节点是否已被遍历过且当前遍历未结束,若是,则判断所述合并树包含有向环,并计算所述合并树上各条边的平均权值;若当前遍历的节点未被遍历过,则继续遍历下一个节点;若当前遍历结束,则判断所述合并树不包含有向环;

依据预设权值分布规律、所述平均权值以及各条边的权值计算得到各条边的置信度;

依据所述置信度生成相应的随机数;

若所述置信度大于所述随机数,则删除返回所述当前遍历的节点的边;

若所述置信度不大于所述随机数,则依据深度数组查询有向环包含的全部边,并删除所述查询到的各条边中权值最大且不同时属于组成所述合并树的两棵树的边;之后重复步骤s4中的上述全部操作。

优选地,步骤s5的过程具体为:

确定所述去环后的树中入度大于1的节点的多条入边的权值;

依据预设概率关系式确定各条所述入边的概率,其中每条所述入边的概率与权值成反比;

依据所述概率选取所述入度大于1的节点中的其中一条入边进行保留,并删除所述入度大于1的节点的其余全部入边,使其入度为1。

为解决上述技术问题,本发明还提供了一种基于微粒群算法的steiner最优树计算装置,包括:

初始化模块,用于随机初始化n个粒子,各个所述粒子内分别包含一棵根节点相同的steiner树,每棵所述steiner树均覆盖全部目标节点;

更新模块,用于计算每棵所述steiner树的费用,将费用最小的粒子作为本周期最优解;并更新每个所述粒子的历史最优解;

合并模块,用于依据微粒群算法关系式、所述本周期最优解以及所述历史最优解对每个所述粒子进行合并操作,得到n棵合并树;

去环模块,用于分别对每棵所述合并树进行去环操作;

去繁模块,用于按照预设简化规则,将去环后的树中入度大于1的节点的入边进行部分删除,使该节点入度为1;

去枝模块,用于遍历简化后的树,将出度为0且不是目标节点的叶子节点与其父节点间的边进行删除,得到去枝后的树;

更新模块,用于计算n棵所述去枝后的树的费用,将最小费用与当前的全局最优解的费用进行比较,选择两者中较小的所对应的steiner树记录为当前的全局最优解;

校验模块,用于令记录的迭代次数加1,并判断当前迭代次数是否达到预设最大值或当前的全局最优解是否已收敛,若是,将当前的全局最优解作为steiner最优树进行记录,若否,重新触发所述初始化模块。

优选地,所述初始化模块具体包括:

根节点设置单元,用于设定steiner树的根节点s,所述根节点属于树集合内;

模型建立单元,用于随机选取全部节点集合中与所述树集合内的节点邻接且不在所述树集合中的节点加入所述树集合,并记录新加入的节点与所述树集合内与其邻接的节点之间的有向边,直至全部目标节点均属于所述树集合,此时得到一棵steiner原始树;

初始去枝单元,用于从最下层叶子节点开始遍历所述原始树,将出度为0且不是目标节点的叶子节点与其父节点间的边进行删除,得到一个所述粒子。

优选地,所述去环模块具体包括:

遍历单元,用于从所述根节点开始遍历所述合并树上的节点,依据深度优先算法判断当前遍历的节点是否已被遍历过且当前遍历未结束,若是,则判断所述合并树包含有向环,并触发权值计算单元;若当前遍历的节点未被遍历过,则继续遍历下一个节点;若当前遍历结束,则判断所述合并树不包含有向环;

所述权值计算单元,用于计算所述合并树上各条边的平均权值;

置信度计算单元,用于依据预设权值分布规律、所述平均权值以及各条边的权值计算得到各条边的置信度;

随机数计算单元,用于依据所述置信度生成相应的随机数;

判断单元,用于判断所述置信度是否大于所述随机数,若是,则删除返回所述当前遍历的节点的边;若否,则依据深度数组查询有向环包含的全部边,并删除所述查询到的各条边中权值最大且不同时属于组成所述合并树的两棵树的边,并重复触发所述遍历单元再次进行遍历。

优选地,所述去繁模块具体包括:

权值确定单元,用于确定所述去环后的树中入度大于1的节点的多条入边的权值;

概率计算单元,用于依据预设概率关系式确定各条所述入边的概率,其中每条所述入边的概率与权值成反比;

选择单元,用于依据所述概率选取所述入度大于1的节点中的其中一条入边进行保留,并删除所述入度大于1的节点的其余全部入边,使其入度为1。

本发明提供了一种基于微粒群算法的steiner最优树的计算方法及其装置,基于微粒群算法的思想进行周期性的迭代操作。每次迭代过程中,随机初始化n棵steiner树,之后对其进行树合并、去环、入度简化(一个节点的入度指的是该节点的父节点的个数,或者说是指向该节点的边的条数,相应的,一个节点的出度指的是该节点的子节点的个数,或者说是该节点指向其他节点的边的条数)以及去枝的操作后,得到本次迭代后的steiner最优树,若其费用小于当前的全局最优解的费用,则更新当前的全局最优解;重复上述迭代操作直至当前迭代次数达到预设最大值或当前的全局最优解已收敛,并将最终得到的全局最优解作为steiner最优树。由于微粒群算法具有良好的收敛性以及快速计算的能力,故本发明确定最优树的速度快,效率高;且本发明在进行树合并、入度简化以及去枝等操作时,是根据各个节点的入度和出度进行的,可见,本发明是在综合考虑steiner树中各条边的方向的情况下得到的steiner最优树,故本发明能够解决有向图中上的steiner树问题,实用性更高。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种基于微粒群算法的steiner最优树计算方法的过程的流程图;

图2为本发明提供的一种基于微粒群算法的steiner最优树计算装置的结构示意图。

具体实施方式

本发明的核心是提供一种基于微粒群算法的steiner最优树的计算方法及其装置,解决有向图中的steiner最优树问题,且速度快,效率高。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供了一种基于微粒群算法的steiner最优树计算方法,参见图1所示,图1为本发明提供的一种基于微粒群算法的steiner最优树计算方法的过程的流程图;该方法包括:

步骤s1:随机初始化n个粒子,各个粒子内分别包含一棵根节点相同的steiner树,每棵steiner树均覆盖全部目标节点;

其中,每个粒子中steiner树的存储形式为n×n的矩阵x,n为steiner树包含的节点个数,矩阵中x[i][j]=0表明steiner树中节点i到节点j的边不存在,否则,表明节点i到节点j的边存在。

步骤s2:计算每棵steiner树的费用,将费用最小的粒子作为本周期最优解;并更新每个粒子的历史最优解;

步骤s3:依据微粒群算法关系式、本周期最优解以及历史最优解对每个粒子进行合并操作,得到n棵合并树;

其中,上述合并时,对于每个粒子均要依据微粒群算法关系式、本周期最优解以及自身的历史最优解进行合并,故每个粒子均会得到一个合并树。进一步可知,该微粒群算法关系式为:

c1×rand()×(pid-xid)+c2×rand()×(pgd-xid)

其中,xid为当前待合并的粒子;pid为所述当前待合并的粒子的历史最优解;pgd为所述本周期最优解;rand()和rand()为两个相互独立的随机函数;c1和c2为学习因子;所述预设关系式中两个部分求和具体为两个部分求并集。c1×rand()×(pid-xid)组成一棵树,c2×rand()×(pgd-xid)组成另一棵树,然后两棵树求和(矩阵求并),即得到合并树。

另外,由于steiner树以矩阵的形式保存,因此steiner树的合并具体实现方式为矩阵求并。当然,steiner树可以采用树形图进行保存,此时树的合并即为直接在树形图上进行线条叠加。steiner树的合并方式与其存储形式有关,本发明对此不作限定。

步骤s4:分别对每棵合并树进行去环操作;

步骤s5:按照预设简化规则,将去环后的树中入度大于1的节点的入边进行部分删除,使该节点入度为1;

可以理解的是,入度大于1表明该节点有多个父节点,即指向该节点的边有多条,这样表明到达该节点有多条路径,造成路径重复,费用高,由于steiner最优树中只需要保证能够到达全部目标节点即可,因此,应该删除多余的入边(或者说入弧)。由于边的权值越小,适用度越大,而组成有向图的最大分支的适用度最高,因此,需要选择该节点中适用度较大即权值较小的入边保留。其中,可以直接保留权值较小的边,也可以依据概率进行选取,过程如下:

确定去环后的树中入度大于1的节点的多条入边的权值;

依据预设概率关系式确定各条入边的概率,其中每条入边的概率与权值成反比;

依据概率选取入度大于1的节点中的其中一条入边进行保留,并删除入度大于1的节点的其余全部入边,使其入度为1。

步骤s6:遍历简化后的树,将出度为0且不是目标节点的叶子节点与其父节点间的边进行删除,得到去枝后的树;

可以理解的是,根据上述描述可知,简化的树中不含有向环且能够通过唯一路径到达全部目标节点,因此简化的树为外向树。但是,外向树并不一定是steiner最优树,出度为0且不是目标节点表明该节点与其父节点之间的边并不是必要的边,因此,将其删除有利于减小steiner树的费用。

步骤s7:计算n棵去枝后的树的费用,将最小费用与当前的全局最优解的费用进行比较,选择两者中较小的所对应的steiner树记录为当前的全局最优解;

步骤s8:令迭代次数加1,并判断当前迭代次数是否达到预设最大值或当前的全局最优解是否已收敛,若是,将当前的全局最优解作为steiner最优树进行记录,若否,返回步骤s1。

其中,这里的预设最大值可以根据经验自行设定,本发明对此不作具体限定。

需要注意的是,对于一棵steiner树,其边的数量越少同时边的权值越低,则该steiner树的费用则越低。

可以理解的是,本发明首先随机生成steiner树,从中找到费用最低的,作为本周期最优解,之后利用本周期最优解使其余steiner树进行合并,并对合并后的树进行去环、简化入度大于1的节点的边以及去枝操作,使本周期内的steiner树向费用低的方向变换。每次迭代周期完成后会得到一个本周期能够得到的最优树,将其的费用与当前的全局最优解的费用进行比较,若该最优树费用小,则利用其更新当前的全局最优解,否则,当前的全局最优解保持不变。可见,通过多次迭代,加上每周期内初始化的steiner树的随机化保证,使得最终能够得到良好的steiner最优树。

在一种具体实施例中,上述方法的实现代码为:

具体的,步骤s1的过程具体为:

设定steiner树的根节点s,根节点属于树集合内;

随机选取全部节点集合中与树集合内的节点邻接且不在树集合中的节点加入树集合,并记录新加入的节点与树集合内与其邻接的节点之间的有向边,直至全部目标节点均属于树集合,此时得到一棵steiner原始树;

从最下层叶子节点开始遍历原始树,将出度为0且不是目标节点的叶子节点与其父节点间的边进行删除,得到一个粒子。

在一种具体实施例中,步骤s1的的实现代码为:

当然,以上算法程序仅为一种实施例,本发明并不限定实现本发明中各个步骤的算法内容。

作为优选地,步骤s4的过程具体为:

从根节点开始遍历合并树上的节点;

依据深度优先算法判断当前遍历的节点是否已被遍历过且当前遍历未结束,若是,则判断合并树包含有向环,并计算合并树上各条边的平均权值;若当前遍历的节点未被遍历过,则继续遍历下一个节点;若当前遍历结束,则判断合并树不包含有向环;

依据预设权值分布规律、平均权值以及各条边的权值计算得到各条边的置信度;

其中,这里的预设权值分布规律可以为泊松分布,当然本发明对此不作限定。

依据置信度生成相应的随机数;

若置信度大于随机数,则删除返回当前遍历的节点的边;

若置信度不大于随机数,则依据深度数组查询有向环包含的全部边,并删除查询到的各条边中权值最大且不同时属于组成合并树的两棵树的边;之后重复步骤s4中的上述全部操作。

可以理解的是,合并后的树可能出现有向环或者嵌套环,这种情况下合并后的树称为有向树。此时需要去除环并保证目标节点之间的连通。具体实现方式是:首先从源节点s开始做dfs(s,deep),deep为深度变量,并在遍历节点的过程中保存该有向树中各个节点在有向树中的深度数组、是否访问数组以及搜索完成数组。在判断存在有向环后,有两种处理方法,一种是直接删除返回当前遍历的节点的边,该种方法复杂度低,容易实现;另一种是利用深度数组查询有向环包含的全部边,并删除查询到的各条边中权值最大且不同时属于组成合并树的若干个steiner树的边,若有向树中出现的是嵌套环,直接去除内环的边可能导致处理外环是不联通的情况,因此处理完一次环后需要立即返回,再做一次深度优先算法,去除嵌套环,这种方法效果好,但复杂度高。本发明优选采用上述概率统计区间估计的方法确定采用哪种方式。

本发明提供了一种基于微粒群算法的steiner最优树的计算方法及其装置,基于微粒群算法的思想进行周期性的迭代操作。每次迭代过程中,随机初始化n棵steiner树,之后对其进行树合并、去环、入度简化(一个节点的入度指的是该节点的父节点的个数,或者说是指向该节点的边的条数,相应的,一个节点的出度指的是该节点的子节点的个数,或者说是该节点指向其他节点的边的条数)以及去枝的操作后,得到本次迭代后的steiner最优树,若其费用小于当前的全局最优解的费用,则更新当前的全局最优解;重复上述迭代操作直至当前迭代次数达到预设最大值或当前的全局最优解已收敛,并将最终得到的全局最优解作为steiner最优树。由于微粒群算法具有良好的收敛性以及快速计算的能力,故本发明确定最优树的速度快,效率高;且本发明在进行树合并、入度简化以及去枝等操作时,是根据各个节点的入度和出度进行的,可见,本发明是在综合考虑steiner树中各条边的方向的情况下得到的steiner最优树,故本发明能够解决有向图中上的steiner树问题,实用性更高。

本发明还提供了一种基于微粒群算法的steiner最优树计算装置,参见图2所示,图2为本发明提供的一种基于微粒群算法的steiner最优树计算装置的结构示意图。该装置包括:

初始化模块1,用于随机初始化n个粒子,各个所述粒子内分别包含一棵根节点相同的steiner树,每棵所述steiner树均覆盖全部目标节点;

更新模块2,用于计算每棵所述steiner树的费用,将费用最小的粒子作为本周期最优解;并更新每个所述粒子的历史最优解;

合并模块3,用于依据微粒群算法关系式、所述本周期最优解以及所述历史最优解对每个所述粒子进行合并操作,得到n棵合并树;去环模块4,用于分别对每棵所述合并树进行去环操作;

去繁模块5,用于按照预设简化规则,将去环后的树中入度大于1的节点的入边进行部分删除,使该节点入度为1;

去枝模块6,用于遍历简化后的树,将出度为0且不是目标节点的叶子节点与其父节点间的边进行删除,得到去枝后的树;

更新模块7,用于计算n棵所述去枝后的树的费用,将最小费用与当前的全局最优解的费用进行比较,选择两者中较小的所对应的steiner树记录为当前的全局最优解;

校验模块8,用于令记录的迭代次数加1,并判断当前迭代次数是否达到预设最大值或当前的全局最优解是否已收敛,若是,将当前的全局最优解作为steiner最优树进行记录,若否,重新触发初始化模块。

作为优选地,初始化模块1具体包括:

根节点设置单元,用于设定steiner树的根节点s,根节点属于树集合内;

模型建立单元,用于随机选取全部节点集合中与树集合内的节点邻接且不在树集合中的节点加入树集合,并记录新加入的节点与树集合内与其邻接的节点之间的有向边,直至全部目标节点均属于树集合,此时得到一棵steiner原始树;

初始去枝单元,用于从最下层叶子节点开始遍历原始树,将出度为0且不是目标节点的叶子节点与其父节点间的边进行删除,得到一个粒子。

作为优选地,去环模块4具体包括:

遍历单元,用于从根节点开始遍历合并树上的节点,依据深度优先算法判断当前遍历的节点是否已被遍历过且当前遍历未结束,若是,则判断合并树包含有向环,并触发权值计算单元;若当前遍历的节点未被遍历过,则继续遍历下一个节点;若当前遍历结束,则判断合并树不包含有向环;

权值计算单元,用于计算合并树上各条边的平均权值;

置信度计算单元,用于依据预设权值分布规律、平均权值以及各条边的权值计算得到各条边的置信度;

随机数计算单元,用于依据置信度生成相应的随机数;

判断单元,用于判断置信度是否大于随机数,若是,则删除返回当前遍历的节点的边;若否,则依据深度数组查询有向环包含的全部边,并删除查询到的各条边中权值最大且不同时属于组成合并树的若干个steiner树的边,并重复触发遍历单元再次进行遍历。

作为优选地,去繁模块5具体包括:

权值确定单元,用于确定去环后的树中入度大于1的节点的多条入边的权值;

概率计算单元,用于依据预设概率关系式确定各条入边的概率,其中每条入边的概率与权值成反比;

选择单元,用于依据概率选取入度大于1的节点中的其中一条入边进行保留,并删除入度大于1的节点的其余全部入边,使其入度为1。

本发明提供了一种基于微粒群算法的steiner最优树的计算方法及其装置,基于微粒群算法的思想进行周期性的迭代操作。每次迭代过程中,随机初始化n棵steiner树,之后对其进行树合并、去环、入度简化(一个节点的入度指的是该节点的父节点的个数,或者说是指向该节点的边的条数,相应的,一个节点的出度指的是该节点的子节点的个数,或者说是该节点指向其他节点的边的条数)以及去枝的操作后,得到本次迭代后的steiner最优树,若其费用小于当前的全局最优解的费用,则更新当前的全局最优解;重复上述迭代操作直至当前迭代次数达到预设最大值或当前的全局最优解已收敛,并将最终得到的全局最优解作为steiner最优树。由于微粒群算法具有良好的收敛性以及快速计算的能力,故本发明确定最优树的速度快,效率高;且本发明在进行树合并、入度简化以及去枝等操作时,是根据各个节点的入度和出度进行的,可见,本发明是在综合考虑steiner树中各条边的方向的情况下得到的steiner最优树,故本发明能够解决有向图中上的steiner树问题,实用性更高。

以上所述仅是本发明实施方式举例,本发明不限于以上实施例。相关专业技术人员在不脱离本发明精神和构思前提下推演出的其他改进和变化,均应包含在本发明的保护范围之内。

需要说明的是,在本说明书中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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