我是 Haskell 编程世界的新手,我正在尝试一种简单的遗传算法来寻找旅行商问题的良好解决方案。我将解决方案表示为整数的排列,所以我有这种类型的同义词
type Genome = [Int]
算法本身是一组对解进行操作的函数:
mutation :: Genome -> Genome
selectParents :: [Genome] -> [Genome] -> [Genome]
crossover :: Genome -> Genome -> (Genome, Genome)
selectSurvivors :: [Genome] -> [Genome] -> [Genome]
我不确定我的代码有多少与我的问题相关,所以请询问是否需要更多详细信息。可能值得一提的是,上面的类型签名实际上是简化的,我实际上是在使用 State monad 来携带,StdGen
所以所有这些函数实际上都返回有状态的计算。
有几件事我想用这个做,但不能完全理解。我想让为解决方案选择不同的表示形式成为可能,在我看来,这将是使用类型类的自然场所,因此这Genome
将是类型类和[Int]
this 的特定实例Genome
。
现在,我希望能够对实现进行试验,并且希望能够在其他项目中使用该代码。使用这样的类型类需要我创建的每个新算法都需要我创建另一个实例Genome
,这是创建库的好方法吗?
一个额外的问题,只是一直困扰我的一件事,有没有办法为函数创建类似类型同义词的东西,这样如果我正在编写一个以函数作为参数的函数,我可以编写同义词而不是整个类型函数的签名,即这样的东西可以工作。
type someFunc = [Int] -> [Int] -> Int
someOtherFunc :: someFunc -> [Int] -> Int
是的,希望这是对问题的足够清晰的解释,感觉就像我错过了真正明显的答案,但它并没有跳出来。干杯