                atom-generators]
         :as argmap}]
   (let [uniform-mutation-rate 
-        (number uniform-mutation-rate)
+        (random-element-or-thing uniform-mutation-rate)
         
         uniform-mutation-constant-tweak-rate 
-        (number uniform-mutation-constant-tweak-rate)
+        (random-element-or-thing uniform-mutation-constant-tweak-rate)
         
         uniform-mutation-float-gaussian-standard-deviation 
-        (number uniform-mutation-float-gaussian-standard-deviation)
+        (random-element-or-thing uniform-mutation-float-gaussian-standard-deviation)
         
         uniform-mutation-int-gaussian-standard-deviation 
-        (number uniform-mutation-int-gaussian-standard-deviation)
+        (random-element-or-thing uniform-mutation-int-gaussian-standard-deviation)
         
         uniform-mutation-tag-gaussian-standard-deviation 
-        (number uniform-mutation-tag-gaussian-standard-deviation)
+        (random-element-or-thing uniform-mutation-tag-gaussian-standard-deviation)
         
         uniform-mutation-string-char-change-rate 
-        (number uniform-mutation-string-char-change-rate)
+        (random-element-or-thing uniform-mutation-string-char-change-rate)
     
         string-tweak (fn [st]
                        (apply str (map (fn [c]

   mutated it will be replaced with a random instruction."
  [ind {:keys [uniform-mutation-rate maintain-ancestors atom-generators]
        :as argmap}]
  (let [uniform-mutation-rate (number uniform-mutation-rate)
        instruction-mutator (fn [token]
                              (assoc token
                                :instruction

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; local utilities

(defn random-element-or-thing
  "If given a number, returns it. If given a collection, returns a member of the collection.
  Intended for allowing arguments to genetic operators, such as mutation rates, to take
  collections in addition to single values"
  [thing-or-collection]
  (if (coll? thing-or-collection)
    (lrand-nth thing-or-collection)
    thing-or-collection))

(declare produce-child-genome-by-autoconstruction) ;; forward declaration for grain size calculations

