哞
------------------------------------------------<穆。用Haskell培育遗传算法>------------------------------------------------\ ^__^\(oo)\_______(__)\)\/\||----w个||| ||
安装
从Hackage安装
Hackage是Haskell社区的包存档。这就是首先发布包的最新版本。要从Hackage安装Moo,请使用Cabal-install:
- 安装Haskell Platform或GHC和Cabal-install
- 运行
阴谋集团更新
- 运行
阴谋集团安装moo
带烟囱的安装
堆叠是一个稳定的包存档。堆叠建筑应该可复制。Stackage还提供长期支持版本。要使用Stackage依赖项构建Moo,请使用堆栈
工具:
- 安装
堆栈
- 如有必要,安装GHC:运行
堆栈设置
- 运行:
堆栈更新
- 在项目源目录中运行:
堆栈构建
- 要运行测试:
烟囱试验
生成状态
特征
||二进制GA |连续GA||-----------------------+----------------------+--------------------------||编码|二进制位串|实值序列|||灰色位串|||-----------------------+----------------------+--------------------------||初始化|随机统一|||约束随机均匀|||任意自定义||-----------------------+-------------------------------------------------||目标|最小化和最大化|||可选缩放|||可选排名|||可选小生境(健身共享)||-----------------------+-------------------------------------------------||选择|轮盘赌|||随机通用抽样|||锦标赛|||可选精英主义|||可选约束|||自定义非自适应^||-----------------------+-------------------------------------------------||交叉|一点|||两点|||制服|||自定义非自适应^|| +----------------------+--------------------------||BLX-α(混合物)||||SBX(模拟二进制)||||UNDX(通常为单峰||||已分发)||-----------------------+----------------------+--------------------------||突变|点|高斯|||不对称||||恒定频率||| +----------------------+--------------------------|||自定义非自适应^||-----------------------+-------------------------------------------------||精英主义取代|代|||稳态||-----------------------+-------------------------------------------------||停止|生成次数||条件|目标函数值|||目标函数暂停|||自定义或交互式(`loopIO`)|||时间限制(`loopIO`)|||复合条件(`And`,`Or`)||-----------------------+-------------------------------------------------||日志|纯周期(任何幺半群)|||周期性,带有`IO`||-----------------------+-------------------------------------------------||约束|约束初始化||优化|约束选择|||死刑||-----------------------+-------------------------------------------------||多目标|NSGA-II||优化|受约束的NSGA-II|
^
非自适应:不依赖于生成编号的任何函数
还有其他可能的编码可以表示带有链状基因组(类型基因组a=[a]
):
- 置换编码(
一
是整数,或其他枚举
类型)
- 树编码(
一
作为子树类型)
- 混合编码(
一
是总和类型)
贡献
有很多方法可以帮助开发库:
-
我不是以英语为母语的人。如果是,请校对并更正注释和文档。
-
Moo的设计具有实现自定义遗传的可能性记住操作员。如果您编写新的运算符(选择Op
,交叉操作
,突变Op
)或更换策略(StepGA公司
),考虑把它们捐给图书馆。请在评论中提及一位学者介绍或研究该方法的工作。解释何时或为什么应该使用它。如果可能,提供测试和示例。
-
实施一些方法(如自适应遗传算法)将需要更改某些库类型。请讨论您的方法第一。
-
提供示例。已知最优值已知问题的解决方案和有趣的属性。尽量避免出现同样的例子做作。
一个例子
最小化比尔函数(最佳值f(3,0.5)=0):
进口Moo。遗传算法。连续beale::[双]->双beale[x,y]=(1.5-x+x*y)**2+(2.25-x+x*y*y)**2+(2.625-x+x*y*y*y)**2popsize=101精英化=1公差=1e-6selection=锦标赛选择最小化2(popsize-精英化)交叉=unimodalCrossoverRP突变=高斯突变0.25 0.1step=nextGeneration最小化beale选择优化交叉变异stop=IfObjective(\values->(最小值)<容差)initialize=获取随机基因组popsize[(-4.5,4.5),(-4.5、4.5)]main=做填充<-runGA初始化(循环停止步骤)打印(head.bestFirst最小化$population)
有关更多示例,请参见示例/文件夹。