【发布时间】:2011-09-09 10:32:36
【问题描述】:
type Range = int * int
type Domain = Range array
type Gene = int
type Individual = Gene array
type Population = Individual array
let genPop (domain:Domain) popSize =
let genInd (domain:Domain) : Individual =
let genGene (range:Range) = genNum (fst range) (snd range)
Array.map genGene domain
Array.init popSize (fun _ -> genInd domain)
所以,Population 只不过是 Individuals 的数组。每个Individual 都包含一个Genes 数组,它们只不过是整数的别名。 genNum 只会为我们生成一个随机整数。
我对我的genPop 实施不是特别满意。虽然它工作正常并且符合预期,但我想尝试一个使用正向管道运算符 |> 的实现,而不是那些子函数。
关于如何进行此操作的任何提示?理想情况下,我会说可以从popSize 开始,这将被转换为一个人口,其成员将由基因组成的个人。问题是我们通常需要以相反的方式做事。我们首先需要创建基因,然后是个体,然后我们才能拥有种群!
您将如何实现这一点(除了我这样做的方式)?也许还有其他我目前不明白的方式?
【问题讨论】:
标签: .net f# functional-programming