anchor.diff:  	     collect (receive-result channel)))))
   
   ;;;; genetic operations
  -(defun initialize-population (population-size max-coordinate-value straight-line-probability)
  +(defun initialize-population (population-size min-coordinate-value max-coordinate-value straight-line-probability)
     (loop repeat population-size
  -     collect (make-chromosome max-coordinate-value straight-line-probability)))
  +     collect (make-chromosome min-coordinate-value max-coordinate-value straight-line-probability)))
   
   (defun evaluate (candidate start control end)
     ;;TODO do not hard code max-value
  
positive.code: 	(max-generations 400)
  	(mutation-probability 0.1)
  	(max-coordinate-value (get-max-coords-value start end))
  	(straight-line-probability (if control 0.0 1.0))
  	(best-candidate)
  	(best-score))
  
      ;; initialization
      (setf population (initialize-population population-size max-coordinate-value straight-line-probability))
  
      (loop repeat max-generations
         ;; evaluation
  
negative.code: (defun get-max-coords-value (start end)
    (float (max (zpb-ttf:x start) (zpb-ttf:y start)
  	      (zpb-ttf:x end) (zpb-ttf:y end))))
  
  (defun get-min-coords-value (start end)
    (float (min (zpb-ttf:x start) (zpb-ttf:y start)
  	      (zpb-ttf:x end) (zpb-ttf:y end))))
  
  (defun random-range (x y)
    (when (> x y)
      (rotatef x y))
    (let ((range (- y x)))
      (when (rationalp range)
        (setf range (coerce range 'float)))
      (+ x (random range ))))
  