可在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)

在进行进化算法的过程中,如果需要调用离散重组算子,那么可以实例化一个离散重组算子类的对象,然后调用该对象的“do()”函数执行重组。例如:

import geatpy as ea
recOper = ea.Xovdp(XOVR = 1)
xxx = recOper.do(...)

具体调用方法可详见各算法模板的源码。
如果在进化过程中需要动态修改该重组算子的相关参数,可直接对其进行修改。

Geatpy2.7.0正式发布

Geatpy2交流群

采用自研高性能矩阵库,体验极速的进化之旅!