From 11b09c9be04fc32b874909c41826447c7d810499 Mon Sep 17 00:00:00 2001 From: Ryan Boldi Date: Sun, 3 Apr 2022 23:08:49 -0400 Subject: [PATCH] Update complex_regression.cljc --- .../problems/complex_regression.cljc | 70 ++++++++++--------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/src/propeller/problems/complex_regression.cljc b/src/propeller/problems/complex_regression.cljc index 0245be3..4982594 100644 --- a/src/propeller/problems/complex_regression.cljc +++ b/src/propeller/problems/complex_regression.cljc @@ -9,21 +9,22 @@ (defn- target-function "Target function: f(x) = (x^3 + 1)^3 + 1" [x] - (* (+ (* x x x) 1) (+ (* x x x) 1) (+ (* x x x) 1) + 1)) + (let [x-new (+ (* x x x) 1)] + (+ (* x-new x-new x-new) 1))) (def train-and-test-data - (let [train-inputs (range -10 11) - test-inputs (concat (range -20 -10) (range 11 21))] + (let [train-inputs (range -5.0 5.0 0.5) + test-inputs (range -5.25 5.75 0.5)] {:train (map (fn [x] {:input1 (vector x) :output1 (vector (target-function x))}) train-inputs) :test (map (fn [x] {:input1 (vector x) :output1 (vector (target-function x))}) test-inputs)})) (def instructions (list :in1 - :integer_add - :integer_subtract - :integer_mult - :integer_quot - :integer_eq + :float_add + :float_subtract + :float_mult + :float_quot + :float_eq :exec_dup :exec_if 'close @@ -34,18 +35,18 @@ "Finds the behaviors and errors of an individual. The error is the absolute deviation between the target output value and the program's selected behavior, or 1000000 if no behavior is produced. The behavior is here defined as the - final top item on the INTEGER stack." + final top item on the FLOAT stack." ([argmap data individual] (let [program (genome/plushy->push (:plushy individual) argmap) inputs (map (fn [x] (first (:input1 x))) data) correct-outputs (map (fn [x] (first (:output1 x))) data) outputs (map (fn [input] (state/peek-stack - (interpreter/interpret-program - program - (assoc state/empty-state :input {:in1 input}) - (:step-limit argmap)) - :integer)) + (interpreter/interpret-program + program + (assoc state/empty-state :input {:in1 input}) + (:step-limit argmap)) + :float)) inputs) errors (map (fn [correct-output output] (if (= output :no-stack-item) @@ -54,28 +55,31 @@ correct-outputs outputs)] (assoc individual - :behaviors outputs - :errors errors - :total-error #?(:clj (apply +' errors) - :cljs (apply + errors)))))) + :behaviors outputs + :errors errors + :total-error #?(:clj (apply +' errors) + :cljs (apply + errors)))))) (defn -main "Runs propel-gp, giving it a map of arguments." [& args] (gp/gp - (merge - {:instructions instructions - :error-function error-function - :training-data (:train train-and-test-data) - :testing-data (:test train-and-test-data) - :max-generations 500 - :population-size 500 - :max-initial-plushy-size 100 - :step-limit 200 - :parent-selection :lexicase - :tournament-size 5 - :umad-rate 0.1 - :variation {:umad 1.0 :crossover 0.0} - :elitism false} - (apply hash-map (map #(if (string? %) (read-string %) %) args)))) + (merge + {:instructions instructions + :error-function error-function + :training-data (:train train-and-test-data) + :testing-data (:test train-and-test-data) + :max-generations 5000 + :population-size 500 + :max-initial-plushy-size 100 + :step-limit 200 + :parent-selection :ds-lexicase + :ds-function :case-maxmin + :downsample-rate 0.1 + :case-t-size 20 + :tournament-size 5 + :umad-rate 0.1 + :variation {:umad 1.0 :crossover 0.0} + :elitism false} + (apply hash-map (map #(if (string? %) (read-string %) %) args)))) (#?(:clj shutdown-agents)))