From 86f84db19acd1475e76a965d3af9df57c1d5d628 Mon Sep 17 00:00:00 2001 From: mehbark Date: Wed, 11 Jan 2023 22:12:18 -0500 Subject: [PATCH] add get-brain-less-than to get a brain of a specific quality --- src/nn/core.clj | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/nn/core.clj b/src/nn/core.clj index f938e3c..a0c5e1e 100644 --- a/src/nn/core.clj +++ b/src/nn/core.clj @@ -1,3 +1,5 @@ +;;TODO: actually interesting brains, refactor, better children handling + (defmacro r [] '(use 'nn.core :reload) @@ -33,7 +35,9 @@ (defn min-key-seq "The minimum of a seq by key" [k seq] - (apply min-key k seq)) + (if (empty? seq) + nil + (apply min-key k seq))) (defn nn "Create a \"neural network\" from a brain, an activation function, and a variation function (that takes a number)" @@ -247,6 +251,12 @@ (map (partial score-with-evolver evolver)) min-seq)) +(defn best-brain + "Get the best brain of an evolver" + [evolver] + (min-key-seq (partial score-with-evolver evolver) + (:brains evolver))) + (defn worst-score "Get the best score of an evolver" [evolver] @@ -265,3 +275,13 @@ (map (comp str best-score) (take 1000 (evolution (n-multiplier-evolver n))))) "]")) + +(defn get-brain-less-than + "Evolve an evolver until it's best brain's score is less than the given value, + then return the best brain" + [n evolver] + (->> evolver + evolution + (take-while #(> (best-score %) n)) + last + best-brain))