本发明涉及一种并行化萤火虫算法,特别涉及一种基于spark的并行化萤火虫算法。
背景技术:
萤火虫算法是由一种基于群体搜索的元启发式算法,该算法通过萤火虫个体之间的相互吸引达到寻优的目的。对于任意两只萤火虫,亮度小的萤火虫会被亮度大的萤火虫吸引而向其移动。随着萤火虫之间距离的增加,吸引力和亮度都会逐渐减小。亮度最大的萤火虫随机移动。萤火虫的亮度由待优化的目标函数的值决定。当萤火虫种群规模变大时,传统的萤火虫算法通常需要较长的计算时间才能完成寻优过程。
spark是一种快速、通用的并行计算框架,它的核心是一种称为弹性分布式数据集rdd。spark通过对rdd进行并行切片,然后分发到集群中的多个节点上完成相应的变换操作,最后由行动操作触发所有的运算。spark的这种运算方式非常适合并行化萤火虫算法的实现。
技术实现要素:
针对大规模种群时传统萤火虫算法中存在的计算性能问题,本发明提供一种在spark集群的多个节点上并行执行的萤火虫算法。
本发明为解决上述技术问题采用以下技术方案:
本发明提供一种基于spark的并行化萤火虫算法,具体步骤如下:
步骤1:随机生成初始萤火虫种群,初始化萤火虫位置和亮度,设置算法参数;
步骤2:从初始萤火虫种群创建spark的rdd,并将rdd划分为多个分区分布到spark集群的多个节点中,每个分区对应一个萤火虫子种群;
步骤3:各个萤火虫子种群在各自的节点上进行目标函数值的计算和萤火虫位置的更新,每个萤火虫子种群通过萤火虫位置的更新,寻找到局部最优解;
步骤4:将萤火虫子种群合并为完整的萤火虫种群,找出当前的最优解。
作为本发明的进一步技术方案,步骤1中初始萤火虫种群包括n只萤火虫
作为本发明的进一步技术方案,步骤2通过spark的parallelize函数转换将初始萤火虫种群为种群rdd,并将种群rdd划分为多个分区分布到集群的多个节点中,rdd包含的分区的数量,以及每个分区包含的个体的数量,可以由spark自动分配。
作为本发明的进一步技术方案,步骤3通过spark的mappartitions函数将种群rdd转换为亮度rdd,并分布到集群中不同的节点上并行计算目标函数值和进行位置更新。
作为本发明的进一步技术方案,步骤4通过spark的collect函数触发spark的运算流程,完成前面一系列的转换,并将完成位置更新的萤火虫收回到主节点上。
本发明采用以上技术方案与现有技术相比,具有以下技术效果:本发明利用spark的基于内存的计算模型,将萤火虫算法的目标函数值计算和位置更新操作进行并行化,提高了萤火虫算法的性能。
附图说明
图1为本发明实施例的算法流程图;
图2为本发明实施例的并行化过程流程图。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于
本技术:
所附权利要求所限定的范围。
如图1所示,本发明一种基于spark的并行化萤火虫算法,包括如下步骤:
步骤1:随机生成初始萤火虫种群,初始化萤火虫位置和亮度,设置算法参数;
步骤2:从初始萤火虫种群创建spark的rdd,并将rdd划分为多个分区分布到spark集群的多个节点中,每个分区对应一个萤火虫子种群;
步骤3:各个萤火虫子种群在各自的节点上进行目标函数值的计算和萤火虫位置的更新,每个萤火虫子种群通过萤火虫位置的更新,寻找到局部最优解;
步骤4:将萤火虫子种群合并为完整的萤火虫种群,找出当前的最优解。
步骤1中初始萤火虫种群包括8000只萤火虫
步骤2中通过spark的parallelize函数转换将初始萤火虫种群为种群rdd。初始种群规模为8000个萤火虫,spark集群有16个计算节点,种群rdd被划分为16个分区,每个分区中有500个萤火虫。
步骤3中目标函数计算并行化过程如图2所示,通过spark的mappartitions函数将种群rdd转换为亮度rdd,并分布到集群的16个节点上并行计算目标函数值和进行位置更新。
步骤4:通过spark的collect函数触发spark的运算流程,完成前面一系列的转换,并将完成位置更新的萤火虫收回到主节点上,将萤火虫子种群合并为完整的萤火虫种群,找出当前的最优解。
以上所述,仅为本发明中的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可理解想到的变换或替换,都应涵盖在本发明的包含范围之内,因此,本发明的保护范围应该以权利要求书的保护范围为准。