Use diploid operators when called for; fix bug in diploid-uniform-addition

This commit is contained in:
Lee Spector 2020-11-22 21:27:07 -05:00
parent 67fcdb13b5
commit 4df6ea7fdd

View File

@ -47,9 +47,10 @@
existing instruction." existing instruction."
[plushy instructions umad-rate] [plushy instructions umad-rate]
(flatten (flatten
(map #(if (< (rand) umad-rate) (map (fn [pair]
(shuffle [% (repeatedly 2 #(utils/random-instruction instructions))]) (if (< (rand) umad-rate)
[%]) (shuffle [pair (repeatedly 2 #(utils/random-instruction instructions))])
[pair]))
(partition 2 plushy)))) (partition 2 plushy))))
(defn uniform-deletion (defn uniform-deletion
@ -71,14 +72,17 @@
individuals in the population." individuals in the population."
[pop argmap] [pop argmap]
{:plushy {:plushy
(let [prob (rand)] (let [prob (rand)
[xover add del] (if (:diploid argmap)
[diploid-crossover diploid-uniform-addition diploid-uniform-deletion]
[crossover uniform-addition uniform-deletion])]
(cond (cond
(< prob (:crossover (:variation argmap))) (< prob (:crossover (:variation argmap)))
(crossover (:plushy (selection/select-parent pop argmap)) (xover (:plushy (selection/select-parent pop argmap))
(:plushy (selection/select-parent pop argmap))) (:plushy (selection/select-parent pop argmap)))
(< prob (+ (:crossover (:variation argmap)) (< prob (+ (:crossover (:variation argmap))
(:umad (:variation argmap)))) (:umad (:variation argmap))))
(uniform-deletion (uniform-addition (:plushy (selection/select-parent pop argmap)) (del (add (:plushy (selection/select-parent pop argmap))
(:instructions argmap) (:instructions argmap)
(:umad-rate argmap)) (:umad-rate argmap))
(:umad-rate argmap)) (:umad-rate argmap))