Haskell:抽象遗传算法
我是Haskell编程世界的新手,我正在研究一种简单的遗传算法,以找到旅行商问题的良好解决方案。我将解决方案表示为Integers上的排列,因此我有这种类型的同义词
type Genome = [Int]
算法本身是一组对解决方案进行操作的函数:
mutation :: Genome -> Genome
selectParents :: [Genome] -> [Genome] -> [Genome]
crossover :: Genome -> Genome -> (Genome, Genome)
selectSurvivors :: [Genome] -> [Genome] -> [Genome]
我不确定我的代码中有多少与我的问题相关,所以请询问是否需要更多详细信息。值得一提的一件事是上面的类型签名实际上是简化的,我实际上使用State monad来携带StdGen
所以所有这些函数实际上都返回有状态计算。
有几件事我想对此做些什么,但不能完全理解。我希望能够为解决方案选择不同的表示形式,在我看来,这将是一个使用类型类的自然场所,因此Genome
将是类型类,而[Int]
是此Genome
的特定实例。
现在,我希望能够尝试实现,并希望能够在其他项目中使用该代码。使用这样的类型类需要我创建的每个新算法都需要我创建另一个Genome
的实例,这是创建库的好方法吗?
一个额外的问题,只是困扰我的事情,是否有任何方法可以创建类似函数的类型同义词,这样如果我正在编写一个函数,它将函数作为参数,我可以编写同义词而不是整个类型函数的签名,即以下类似的东西可以工作。
type someFunc = [Int] -> [Int] -> Int
someOtherFunc :: someFunc -> [Int] -> Int
是的,希望这是对问题的一个清晰的解释,感觉我错过了非常明显的答案,但它没有跳出来对我。干杯
没有找到相关结果
已邀请:
2 个回复
眠缝
然后,无论实现如何,您都可以使用基于多组基因组的共同功能。
如果你有一个好位映射,你可以在BitArrays上定义固定函数(注意每个都必须将适应度函数作为参数)
奥李