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
- это не более чем массив Individual
с.Каждый Individual
состоит из массива Gene
s, которые являются не более чем псевдонимом для целых чисел.genNum
просто сгенерирует для нас случайное целое число.
Я не особенно доволен своей реализацией genPop
.Хотя он работает нормально и, как и ожидалось, я хотел бы попробовать реализацию, в которой вместо этих подфункций использовался оператор прямой трубы |>
.
Любые советы о том, как продолжитьэтот?В идеале я бы сказал, что можно начать с popSize
, который будет преобразован в население, в состав которого войдут люди, состоящие из генов.Проблема в том, что нам, как правило, нужно делать все наоборот.Сначала нам нужно создать гены, а затем отдельных людей, и только тогда у нас будет популяция!
Как бы вы это реализовали (кроме того, как я это сделал)?Может быть, есть другие способы, которые в настоящее время не очевидны для меня?