所谓重尾变异算子的实现
fastga的Python项目详细描述
此存储库保存支持提交给GECCO 2017会议的文章的代码库。由于这篇文章仍在评论中,作者的身份目前是cannot be disclosed。审查程序一结束,他们就来。同时,该存储库将由作者主动维护,但使用匿名帐户。
fastga是一个非常小的模块,它使用我们所谓的fast-generation operator(或heavy-tailed-generation operator)来执行位变异,该操作使用幂律分布的变异率。这使得在一步中以高概率翻转大量比特(例如,与经典的(1+1)ea相比),这在需要这种长距离“跳跃”以避开局部最优时尤其可取。
要求
- Python3+
- 努比
安装
管道(推荐)
(可选)创建一个python虚拟环境并激活它。在控制台中,键入:
$ virtualenv ~/some_convenient_location/fastga $ cd ~/some_convenient_location/fastga $ source bin/activate
在控制台中(如果使用VirtualEnv,则激活它),键入:
$ pip install fastga
git方式
只需将此存储库克隆到一个方便的位置:
$ mkdir some_convenient_location && cd some_convenient_location $ git clone https://github.com/FastGA/fast-genetic-algorithms.git
然后将其添加到pythonpath中:
$ export PYTHONPATH=some_convenient_location:$PYTHONPATH
(您也可以将此命令放入.bashrc文件中,使其永久化)。
用法
我们的变异运算符是在类^{t t 1}$中实现的,还有抽象类BaseMutationOperator(如果需要的话,不应该直接使用它,而应该使用自己类的子类)和类OnePlusOneMutationOperator(顾名思义,它是(1+1)ea的实现)。在python shell中,键入
from fastga import FastMutationOperator
创建实例需要两个参数:
- 一个整数n,它是可以由运算符进行变异的位字符串的大小;
- 一个floatbeta>;1,它是变异率幂律中使用的指数。
给定这两个参数,运算符的突变率r是这样的,对于{1中的每个i。n//2},r是i/n的概率与i^{-beta}(具有适当的标准化因子)成正比。因此,较低的beta值倾向于在一个突变步骤中翻转更多的比特。
现在可以实例化运算符:
operator = FastMutationOperator(n=100, beta=1.5)
并使用其mutate方法对n长度的位字符串进行变异:
bit_string = [0] * 100 for i in range(10): operator.mutate(bit_string, inplace=True) print(bit_string)