 
 ; Atom generators
 (def luhn-atom-generators
-  (concat (list
-            2
-            9
-            10
-            ;;; end constants
-            ;;; end ERCs
-            (tag-instruction-erc [:integer :boolean :exec :vector_integer] 1000)
-            (tagged-instruction-erc 1000)
-            ;;; end tag ERCs
-            'in1
-            ;;; end input instructions
-            )
-          (registered-for-stacks [:integer :boolean :exec :vector_integer])))
+  (make-proportional-atom-generators
+   (concat
+    (registered-for-stacks [:integer :boolean :exec :vector_integer])
+    (list (tag-instruction-erc [:integer :boolean :exec :vector_integer] 1000) ; tags
+          (tagged-instruction-erc 1000)))
+   (list 'in1) ; inputs
+   (list 0
+         2
+         9
+         10
+         (fn [] (- (lrand-int 21) 10)) ; integer ERC [-10, 10]
+         ) ; constants
+   {:proportion-inputs 0.15
+    :proportion-constants 0.05}))
 
 
 ;; A list of data domains for the problem. Each domain is a vector containing

     [0 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3]
     [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9]
     [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
     [5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5]) 4 0]
   [(fn [] (vec (repeatedly 16 #(rand-int 10)))) 196 2000]
   ])

;;Can make Luhn test data like this:

; Define the argmap
(def argmap
  {:error-function (make-luhn-error-function-from-cases (first luhn-train-and-test-cases)
                                                        (second luhn-train-and-test-cases))
   :atom-generators luhn-atom-generators
   :max-points 2000
   :max-genome-size-in-initial-program 250
