多种群遗传算法的函数优化算法(MPGA) 多种群遗传算法(MPGA)概述 MPGA在GA的基础上主要引入了一下几个概念:
- 突破GA仅靠单个群体进行遗传进化的框架,引入多个种群问题同时进行优化搜索;不同的种群赋以不用的控制参数,实现不同的搜索的目的。
- 各个种群之间通过移民算子进行联系,实现多种群的协同进化;最优解的获取是多个种群协同进化的综合结果。
- 通过人工选择算子保存各种群每个进化代中的最优个体,并作为判断算法收敛的依据。
MPGA的算法结构示意图 这里的SGA就是标准GA,由上图可以看出每个种群还是遵循GA中的算法准则,只不过是通过移民算子以及人工选择将最优的解结合到了一起。 各种群取不同的控制参数。交叉概率Pc和变异概率Pm的取值决定了算法全局搜索和拒不搜索能力的均衡。在GA中,交叉算子是产生新个体的主要算子,它决定了遗传算法全局搜索的能力;而变异算子只是产生新个体的辅助算子,它决定了遗传算法的局部搜索能力。大多数认为Pc在0.70.9最为合适,Pm在0.0010.05之间最为合适。但是他们的取值方式还是有无数种的,对于不同的取值方式,优化结果差异也是很大的。MPGA弥补了GA的这一不足,通过多个设有不同控制参数的种群协同进化,同时兼顾了算法的全局搜索和局部搜索。 各种群是相对独立的,相互之间通过移民算子联系。移民算子将各种群在进化过程中出现的最优个体定期地(每隔一定的进化代数)引入其他的种群中,实现种群之间的信息交换。具体的操作规则是,将目标种群中的最差个体用源种群的最优个体替代。移民算子在MPGA中至关重要,如果没有银民算子,各种群之间失去联系,MPGA将等同于用不同的控制参数进行多次GA计算,从而是去了MPGA的特色。 精华种群和其他种群有很大不同。在金华的每一代,通过人工选择算子选出其他种群的 最优个体放入精华种群加以保存。精华种群不进行选择、交叉、变异等遗传操作,保证进化过程中各种群产生的最优个体不被破坏和丢失。同时,精华种群也是判断算法终止的依据。这里采用最优个体最少保持代数作为最终判断依据。这种判断充分利用了遗传算法在进化过程中的知识积累,较最大遗传代数判据更为合理。 问题描述 复杂二元函数求最值: max f(x,y) = 21.5 + xsin(4πx) + ysin(20πy) 图像生成代码:
clear;
[X,Y] = meshgrid(-10:0.355:10);
Z = 21.5 + X.*sin(4*pi.*X) + Y.*sin(20*pi.*Y);
surf(X,Y,Z);
图像: 由上图可以看出该函数在区间内分布着多个局部极值,这样如果使用普通的遗传算法很容易出现早熟的现象,因此多种群遗传算法比较适合。 该问题所使用到的遗传算法工具箱的函数列表:
算子
函数
功能
创建种群
Crtbp
创建基向量
适应度计算
Ranking
常用的基于秩的适应度计算
选择函数
Select
高级选择函数
Sus
随机变异采样
Reins
一致随机和基于适应度的重插入
交叉算子
Recombin
高级重组算子
Xovsp
单点交叉
变异算子
Mut
离散变异
移民算子 函数名为immigrant,函数的输入、输出参数如下:
变量名
类型
意义
输入参数
Chrom
Cell
每个元细胞单元为一个种群的编码(移民前)
ObjV
Cell
每个元细胞为一个种群所有个体的目标值(移民前)
输出参数
Chrom
Cell
每个元细胞单元为一个种群的编码(移民后)
ObjV
Cell
每个元细胞为一个种群所有个体的目标值(移民后)
代码:
1 | function \[Chrom,ObjV\]=immigrant(Chrom,ObjV) |
人工选择算子 函数名为EliteInduvidual,函数的输入、输出参数如下:
变量名
意义
输入参数
Chrom
每个元细胞单元为一个种群的编码(移民前)
ObjV
每个元细胞为一个种群所有个体的目标值(移民前)
MaxObjV
各个种群当前最优个体的目标值(选择前)
MaxChrom
各个种群当前最优个体的编码(选择前)
输出参数
MaxObjV
各个种群当前最优个体的目标值(选择后)
MaxChrom
各个种群当前最优的编码(选择后)
代码:
1 | function \[MaxObjV,MaxChrom\]=EliteInduvidual(Chrom,ObjV,MaxObjV,MaxChrom) |
目标函数 针对提出问题写出来的目标函数 代码:
1 | function obj=ObjectFunction(X) |
结果: 最优值为:38.8503 对应的自变量取值:11.6255 5.72504