Merge edited version of Mahran-Yousef:master pull request

This commit is contained in:
Lee Spector 2020-06-20 00:15:40 -04:00
commit c6f9b58556
8 changed files with 71 additions and 62 deletions

View File

@ -5,8 +5,8 @@
<output-test url="file://$MODULE_DIR$/target/classes" /> <output-test url="file://$MODULE_DIR$/target/classes" />
<exclude-output /> <exclude-output />
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" /> <sourceFolder url="file://C:\Users\user\Documents\GitHub\propeller\dev-resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/dev-resources" isTestSource="false" /> <sourceFolder url="file://C:\Users\user\Documents\GitHub\propeller\resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" /> <excludeFolder url="file://$MODULE_DIR$/target" />

View File

@ -9,11 +9,14 @@
(gp (update-in (merge {:instructions default-instructions (gp (update-in (merge {:instructions default-instructions
:error-function regression-error-function :error-function regression-error-function
:max-generations 500 :max-generations 500
:population-size 200 :population-size 500
:max-initial-plushy-size 50 :max-initial-plushy-size 50
:step-limit 100 :step-limit 100
:parent-selection :tournament :parent-selection :lexicase
:tournament-size 5} :tournament-size 5
:UMADRate 0.1
:variation {:UMAD 0.5 :crossover 0.5}
:elitism false}
(apply hash-map (apply hash-map
(map read-string args))) (map read-string args)))
[:error-function] [:error-function]

View File

@ -38,5 +38,9 @@
(zero? (:total-error (first evaluated-pop))) (println "SUCCESS") (zero? (:total-error (first evaluated-pop))) (println "SUCCESS")
(>= generation max-generations) nil (>= generation max-generations) nil
:else (recur (inc generation) :else (recur (inc generation)
(if (:elitism argmap)
(conj (repeatedly (dec population-size)
#(new-individual evaluated-pop argmap))
(first evaluated-pop))
(repeatedly population-size (repeatedly population-size
#(new-individual evaluated-pop argmap))))))) #(new-individual evaluated-pop argmap))))))))

View File

@ -16,22 +16,19 @@
longer)))) longer))))
(defn uniform-addition (defn uniform-addition
"Randomly adds new instructions before every instruction (and at the end of "Returns plushy with new instructions possibly added before or after each existing instruction."
the plushy) with some probability." [plushy instructions UMADRate]
[plushy instructions] (apply concat
(let [rand-code (repeatedly (inc (count plushy)) (map #(if (< (rand) UMADRate)
(fn [] (shuffle [% (rand-nth instructions)])
(if (< (rand) 0.05) [%])
(rand-nth instructions) plushy)))
:mutation-padding)))]
(remove #(= % :mutation-padding)
(interleave (conj plushy :mutation-padding)
rand-code))))
(defn uniform-deletion (defn uniform-deletion
"Randomly deletes instructions from plushy at some rate." "Randomly deletes instructions from plushy at some rate."
[plushy] [plushy UMADRate]
(remove (fn [x] (< (rand) 0.05)) (remove (fn [_] (< (rand)
(/ 1 (+ 1 (/ 1 UMADRate)))))
plushy)) plushy))
(defn new-individual (defn new-individual
@ -41,8 +38,13 @@
{:plushy {:plushy
(let [prob (rand)] (let [prob (rand)]
(cond (cond
(< prob 0.5) (crossover (:plushy (select-parent pop argmap)) (< prob (:crossover (:variation argmap)))
(crossover (:plushy (select-parent pop argmap))
(:plushy (select-parent pop argmap))) (:plushy (select-parent pop argmap)))
(< prob 0.75) (uniform-addition (:plushy (select-parent pop argmap)) (< prob (+ (:crossover (:variation argmap))
(:instructions argmap)) (:UMAD (:variation argmap)) 2))
:else (uniform-deletion (:plushy (select-parent pop argmap)))))}) (uniform-deletion (uniform-addition (:plushy (select-parent pop argmap))
(:instructions argmap)
(:UMADRate argmap))
(:UMADRate argmap))
:else (:plushy (select-parent pop argmap))))})