可在Python中通过import geatpy as ea; 然后help(ea.模块名)查看各重组算子模块的用法。
模块名 | 功能 |
recdis | 离散重组 |
recint | 中间重组 |
reclin | 线性重组 |
recndx | 正态分布交叉 |
recsbx | 模拟二进制交叉 |
xovbd | 二项式分布交叉 |
xovdp | 两点交叉 |
xovexp | 指数交叉 |
xovox | 顺序交叉 |
xovpmx | 部分匹配交叉 |
xovsec | 洗牌指数交叉 |
xovsh | 洗牌交叉 |
xovsp | 单点交叉 |
xovud | 均匀分布交叉 |
注意:不同于变异算子的是,所有重组算子都不会检查重组结果是否满足所设边界范围。因此如果在进化算法中要让重组结果满足所设的染色体元素范围,则需要调用“ea.boundfix”函数进行边界修复,详见help(ea.boundfix)。
2.2.2版之后,Geatpy新增面向对象的重组算子类来进行重组。重组算子类见下表:
模块名 | 功能 |
Recdis | 离散重组算子类 |
Recint | 中间重组算子类 |
Reclin | 线性重组算子类 |
Recndx | 正态分布交叉算子类 |
Recsbx | 模拟二进制交叉算子类 |
Xovbd | 二项式分布交叉算子类 |
Xovdp | 两点交叉算子类 |
Xovexp | 指数交叉算子类 |
Xovmp | 多点交叉算子类 |
Xovox | 顺序交叉算子类 |
Xovpmx | 部分匹配交叉算子类 |
Xovsec | 洗牌指数交叉算子类 |
Xovsh | 洗牌交叉算子类 |
Xovsp | 单点交叉算子类 |
Xovud | 均匀分布交叉算子类 |
所有上述的重组算子类的文件均在“operators/recombination”文件夹中,每个重组算子类都直接继承“Recombination”重组算子类,有以下三个成员函数:
__init__() | 构造函数 |
do() | 执行函数,用于调用内核中同名(首字母小写)的重组函数执行重组 |
getHelp() | 查看对应内核中的重组算子的API文档 |
以“Recdis”离散重组算子类为例,其源码如下:
# -*- coding: utf-8 -*-
from operators.recombination.Recombination import Recombination
from recdis import recdis
class Recdis(Recombination):
"""
Recdis - class : 一个用于调用内核中的函数recdis(离散重组)的类,
该类的各成员属性与内核中的对应函数的同名参数含义一致,
可利用help(recdis)查看各参数的详细含义及用法。
"""
def __init__(self, RecOpt = 0.7, Half = False, GeneID = None):
self.RecOpt = RecOpt # 发生重组的概率
self.Half = Half # 表示是否只保留一半重组结果
self.GeneID = GeneID # 基因ID,是一个行向量,若设置了该参数,则该函数会对具有相同基因ID的染色体片段进行整体离散重组。
def do(self, OldChrom): # 执行内核函数
return recdis(OldChrom, self.RecOpt, self.Half, self.GeneID)
def getHelp(self): # 查看内核中的重组算子的API文档
help(recdis)
from operators.recombination.Recombination import Recombination
from recdis import recdis
class Recdis(Recombination):
"""
Recdis - class : 一个用于调用内核中的函数recdis(离散重组)的类,
该类的各成员属性与内核中的对应函数的同名参数含义一致,
可利用help(recdis)查看各参数的详细含义及用法。
"""
def __init__(self, RecOpt = 0.7, Half = False, GeneID = None):
self.RecOpt = RecOpt # 发生重组的概率
self.Half = Half # 表示是否只保留一半重组结果
self.GeneID = GeneID # 基因ID,是一个行向量,若设置了该参数,则该函数会对具有相同基因ID的染色体片段进行整体离散重组。
def do(self, OldChrom): # 执行内核函数
return recdis(OldChrom, self.RecOpt, self.Half, self.GeneID)
def getHelp(self): # 查看内核中的重组算子的API文档
help(recdis)
在进行进化算法的过程中,如果需要调用离散重组算子,那么可以实例化一个离散重组算子类的对象,然后调用该对象的“do()”函数执行重组。例如:
import geatpy as ea
recOper = ea.Xovdp(XOVR = 1)
xxx = recOper.do(...)
recOper = ea.Xovdp(XOVR = 1)
xxx = recOper.do(...)
具体调用方法可详见各算法模板的源码。
如果在进化过程中需要动态修改该重组算子的相关参数,可直接对其进行修改。