用 Haskell 原型化一个小型遗传算法库:recursion schemes 与 RWS 单子
来源: anekstein.com — 2019-11-15
概述
这是作者的第一篇博客,记录他用递归模式(recursion schemes)和若干单子计算,原型化一个遗传算法库的经历。遗传算法通过选择、制造和修改个体,来随机且渐进地演化候选解;文章从给算法搭一个运行上下文开始:用 RWS 单子同时携带配置、随机数发生器和中间日志。
核心要点
- 遗传算法是一类启发式方法:候选解被随机地、渐进地演化,靠选择、制造与修改这些遗传算子推动。
- 作者想把配置(变异与选择方法等参数)、需要更新的随机数生成器和中间日志一并带在计算里,于是选了 RWS 单子并用 newtype 包装。
- 用 newtype 包住 RWS (GAConfig indv) [Text] PureMT 之后,派生出 Functor、Applicative、Monad,以及 MonadReader / MonadWriter / MonadState 三个能力。
- 文章假定读者已了解遗传算法术语和被大致介绍过的递归模式,全部源码另附链接。
- 作者也提示:想要一个成熟灵活的 Haskell 遗传算法库,可以直接去看 moo。
金句
这篇文章记录了我在原型化一个遗传算法库的过程中,练习递归模式与一些单子计算的经验。
👍 0
👎 0
← 返回 Lobsters 首页