可在Python中通过import geatpy as ea; 然后help(ea.模块名)查看各变异算子模块的用法。
模块名 | 功能 |
mutbga | Breeder GA算法突变算子 |
mutbin | Mutation for Binary Chromosomes,二进制变异算子 |
mutde | Mutation for Differential Evolution,差分变异算子 |
mutgau | Gaussian Mutation,高斯突变算子 |
mutinv | Invertion Mutation,染色体片段逆转变异算子 |
mutmove | Mutation by Moving,染色体片段移位变异算子 |
mutpolyn | Polynomial Mutation,多项式变异 |
mutpp | Mutation of Permutation Chromosomes,排列编码变异算子 |
mutswap | Two Point Swapping Mutation,染色体两点互换变异算子 |
mutuni | Uniform Mutation,均匀变异算子 |
注意:对于mutbga、mutde、mutgau、mutpolyn、mutuni,变异是先按实数值来变异,然后对于标记了是离散型变量进行四舍五入。因此结果往往会是浮点“float”类型的,此时如果要把这些离散值用作其他变量的索引,需要对其进行强制类型转换。
2.2.2版之后,Geatpy新增面向对象的变异算子类来进行变异。变异算子类见下表:
模块名 | 功能 |
Mutbga | Breeder GA算法突变算子类 |
Mutbin | Mutation for Binary Chromosomes,二进制变异算子类 |
Mutde | Mutation for Differential Evolution,差分变异算子类 |
Mutgau | Gaussian Mutation,高斯突变算子类 |
Mutinv | Invertion Mutation,染色体片段逆转变异算子类 |
Mutmove | Mutation by Moving,染色体片段移位变异算子类 |
Mutpolyn | Polynomial Mutation,多项式变异类 |
Mutpp | Mutation of Permutation Chromosomes,排列编码变异算子类 |
Mutswap | Two Point Swapping Mutation,染色体两点互换变异算子类 |
Mutuni | Uniform Mutation,均匀变异算子类 |
所有上述的变异算子类的文件均在“operators/mutation”文件夹中,每个变异算子类都直接继承“Mutation”变异算子类,有以下三个成员函数:
__init__() | 构造函数 |
do() | 执行函数,用于调用内核中同名(首字母小写)的变异函数执行变异 |
getHelp() | 查看对应内核中的变异算子的API文档 |
以“Mutpolyn”多项式变异算子类为例,其源码如下:
# -*- coding: utf-8 -*-
from operators.mutation.Mutation import Mutation
from mutpolyn import mutpolyn
class Mutpolyn(Mutation):
"""
Mutpolyn - class : 一个用于调用内核中的变异函数mutpolyn(多项式变异)的变异算子类,
该类的各成员属性与内核中的对应函数的同名参数含义一致,
可利用help(mutpolyn)查看各参数的详细含义及用法。
"""
def __init__(self, Pm = None, DisI = 20, FixType = 1, Parallel = False):
self.Pm = Pm # 表示染色体上变异算子所发生作用的最小片段发生变异的概率
self.DisI = DisI # 多项式变异中的分布指数
self.FixType = FixType # 表示采用哪种方式来修复超出边界的染色体元素,可取值1,2,3,4,详细含义见help()帮助文档
self.Parallel = Parallel # 表示是否采用并行计算,缺省时默认为False
def do(self, Encoding, OldChrom, FieldDR, *args): # 执行变异
return mutpolyn(Encoding, OldChrom, FieldDR, self.Pm, self.DisI, self.FixType, self.Parallel)
def getHelp(self): # 查看内核中的变异算子的API文档
help(mutpolyn)
from operators.mutation.Mutation import Mutation
from mutpolyn import mutpolyn
class Mutpolyn(Mutation):
"""
Mutpolyn - class : 一个用于调用内核中的变异函数mutpolyn(多项式变异)的变异算子类,
该类的各成员属性与内核中的对应函数的同名参数含义一致,
可利用help(mutpolyn)查看各参数的详细含义及用法。
"""
def __init__(self, Pm = None, DisI = 20, FixType = 1, Parallel = False):
self.Pm = Pm # 表示染色体上变异算子所发生作用的最小片段发生变异的概率
self.DisI = DisI # 多项式变异中的分布指数
self.FixType = FixType # 表示采用哪种方式来修复超出边界的染色体元素,可取值1,2,3,4,详细含义见help()帮助文档
self.Parallel = Parallel # 表示是否采用并行计算,缺省时默认为False
def do(self, Encoding, OldChrom, FieldDR, *args): # 执行变异
return mutpolyn(Encoding, OldChrom, FieldDR, self.Pm, self.DisI, self.FixType, self.Parallel)
def getHelp(self): # 查看内核中的变异算子的API文档
help(mutpolyn)
在进行进化算法的过程中,如果需要调用多项式变异算子,那么可以实例化一个多项式变异算子类的对象,然后调用该对象的“do()”函数执行变异。例如:
import geatpy as ea
mutOper = ea.Mutpolyn(Pm = 0.01, DisI = 20)
xxx = mutOper.do(...)
mutOper = ea.Mutpolyn(Pm = 0.01, DisI = 20)
xxx = mutOper.do(...)
具体调用方法可详见各算法模板的源码。
如果在进化过程中需要动态修改该变异算子的相关参数,如变异概率等,可直接对其进行修改。