7遗传算法与并行处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7遗传算法与并行处理
第七章遗传算法与并行处理
7.1 遗传算法固有的并行性及其并行化的困难
自然界的进化过程本身就是一个并行过程。
遗传算法来源于自然进化,是对自然进化过程的机器模拟,很自然地也就继承了自然进化过程所固有的并行性。
Holland在最早提出遗传算法的理论和模型时就阐述了它所包含的固有的并行性。
遗传算法在并行实现上的因难:标准遗传算法在并行化的过程中会遇到通信量过大的困难。
必须对标准遗传算法进行改造,尽量减少巨量通信从而获得高效率。但是,任何对标准遗传算法的改造都必须以尽可能少地影响其进化效果为前提。
7.2 遗传算法的并行化途径
7.2.1 主从式(master-slave)并行化方法
当施行适应度评估时我们可以相互独立地评估群体内的每个个体的适应度,从通信量的角度来讲,这意味着在评估进程之间无需通信。
如单纯从减少通信量入手,也很自然地首先想到可将适应度评估等局部操作交给从处理器网络(slave)并行执行,而将选择、交叉等全局操作留给主处理器(master)串行执行、这就是所谓主从式并行化方法。
因为无论当哪个处理器运行主算法时都要有同步机制,所以像这样来开发存在于遗传算法中的并发性效率还是不高的。这是由于主进程忙而子进程空闲以及子进程忙而主进程空闲等情况(即负载不均衡)所造成的。
在上述算法的并行实现中,选择操作应该对整个群体的适应度有个全局的了解,这部分地决定了通信要求。主处理器必须知道每个个体的适应度值,所以必须支持多到一的通信。
放牧式(farming):放牧式的思想或结构适用于有一组相互独立的工作可以并发完成的问题。控制进程,即运行在根节点上的牧场主(farmer)进程将任务划分为工作包,然后将它们“放牧”到一组相同的工人进程上。
用放牧式的思想来实现并行遗传算法是,让牧场主进程保存有整个群体的适应度值,它负责执行遗传操作,而适应度评估工作则交由工人网(workers)完成。接收到任务的第一个空闲的工人把它承担下来,完成它并将结果送回给牧场主。
通常,每个处理器上有一个工人进程,必须以一个合适的拓朴(如流水线)结构来连接处理器,并增加选路进程负责给空闲的工人进程送去工作包,给控制进程回送结果。
因为集中存储群体易造成瓶颈,所以任何基于放牧式的并行遗传算法的可扩放性都不好。
可能采用放牧式的理由如下:
(1)放牧式很通用且容易实现。
(2)如果个体评估需时相同,则放牧式效率很高且负载均衡
(3)可以用放牧式来模拟迁杉式和扩散式,
(4)放牧式将评估交给工人网络来完成,降低了对主处理器的内存要
求。
实现时,体系结构可以采用树而不是流水线,控制进程放在根节点上。
但是,这种方式也只有在交叉和评估比选择和传送费时很多的情况下才有效。因为它不是将进化过程并行化的“自然”方式,所以无法得到令人满意的结果。即使只用少量个处理器,放牧式的加速比也很小。
总的来说,主从式比较直观且容易实现,它并没有对标准遗传算法的框架结构作任何改动,所以不会影响其解决具体问题的效果。但是它不可避免地存在有负载不均衡的问题,而且通信量仍然很大,这使得它的效率不高,从而限制了它的实用性。
7.2.2 粗粒度模型
在自然界中,物种的群体是由一些个体组成。在处理器个数较少的情况下,我们可以将群体分为若干个子群体,每个子群体包含一些个体,每个子群体分配一个处理器,让它们互相独立地并行执行进化,每经过一定的间隔(即若干进化代)就把它们的最佳个体迁移到相邻的子群体中去。这种租粒度的并行遗传算法被称作迁移式(migration)或孤岛(islands)模型,可以描述如下:
begin
(1)产生一个初始群体并将它划分成p个子群体
(2)for i=l to p par-do
(2.1)初始化
(2.2)评估第一代子群体的适应度
(2.3)while running do
(2.3.1)for j = 1 to n(generations) do
(a)select parents
(b)crossover
(c)mutation
(d)evaluate sub-population
endfor
(2.3.2) select emigrants /* 选择要迁移出去的个体 */
(2.3.3) do step (a) and (b) in parallel
(a)send emigrants /* 发送要迁移出
去的个体 */
(b)receive immigrants /* 接收迁入的个
体 */
endwhile
endfor
end
7.2.3 细粒度模型
如果并行系统中有足够多的处理器,则我们可以将每个个体分配一个处理器,让它们互相独立地并行执行进化,这样就能获得并行遗传算法的最大可能的并发性,相应地称这种模型为细粒度模型,它可以描述如下:
begin
(1)产生一个初始群体并将它分配到P=N个处理器上
(2)for i = 1 to N par-do
while running do
(2.1)do step(a)and(b)in parallel
(a)receive immigrants /* 接收迁入个体 */
(b)send self /* 发送本个体 */
(2.2)evaluate immigrants /* 对迁入N个体进行适应度评估
*/
(2.3)select mate from immigrants /* 从迁入的个体中选择对象 */
(2.4)reproduce /* 交叉 */
(2.5)mutate child /* 变异 */
(2.6)evaluate self and child /* 评估本个体及其后代 */
(2.7)replace self /* 用后代取代本个体*/
endwhile
endfor
end
在细粒度模型中,通常处理器被连接成平面网格(grid),每个处理器上仅分配一个个体,选择和交叉只在网格中相邻个体之间进行(根据一个预先定义的邻域结构来判定个体之间是否相邻)。这种细粒度的并行遗传算法被称作扩散式(diffusion)或邻域模型。