     [clojure.contrib.math :as math]
     [clojure.contrib.seq-utils :as seq-utils]
     [clojure.walk :as walk]
-    [clojure.contrib.string :as string]))
+    [clojure.contrib.string :as string]
+    [local-file]))
 
 (import java.lang.Math)
 

    (reset! global-pop-when-tagging pop-when-tagging)
    (reset! global-reuse-errors reuse-errors)
    (printf "\nStarting PushGP run.\n\n") (flush)
    (print-params 
     (error-function error-threshold population-size max-points atom-generators max-generations 
                     mutation-probability mutation-max-points crossover-probability
                     simplification-probability gaussian-mutation-probability 
                     gaussian-mutation-per-number-mutation-probability gaussian-mutation-standard-deviation
                     tournament-size report-simplifications final-report-simplifications
                     trivial-geography-radius decimation-ratio decimation-tournament-size evalpush-limit
                     evalpush-time-limit node-selection-method node-selection-tournament-size
                     node-selection-leaf-probability pop-when-tagging reuse-errors
                     use-single-thread random-seed
                     ))
    (printf "\nGenerating initial population...\n") (flush)
    (let [pop-agents (vec (doall (for [_ (range population-size)] 
                                   ((if use-single-thread atom agent)
                                    (make-individual 
                                     :program (random-code max-points atom-generators))
                                    :error-handler (fn [agnt except] (println except))))))
          child-agents (vec (doall (for [_ (range population-size)]
                                     ((if use-single-thread atom agent)
                                      (make-individual)
                                      :error-handler (fn [agnt except] (println except))))))
          rand-gens (vec (doall (for [k (range population-size)]
                                  (java.util.Random. (+ random-seed (inc k))))))]
      (loop [generation 0]

           gaussian-mutation-probability 0.0
           gaussian-mutation-per-number-mutation-probability 0.5
           gaussian-mutation-standard-deviation 0.1
           	   reuse-errors true
           	   problem-specific-report default-problem-specific-report
           use-single-thread false
           random-seed (System/nanoTime)           
           }}]
