;;; -*- mode: Lisp; Syntax: Common-Lisp; -*- ;;; ;;; Copyright (c) 2009 by the authors. ;;; ;;; See LICENCE for details. (in-package :hu.dwim.genetic-programming.test) (def suite* (test :in root-suite)) (def function individual-weight (individual) (if (hu.dwim.genetic-programming::individual-erroneous individual) 0 (bind ((weight (/ (hu.dwim.genetic-programming::individual-fitness individual)))) (/ (* weight weight) (sqrt (1+ (hu.dwim.genetic-programming::individual-offspring-count individual))))))) (def function reproduce-individuals (population count &key (weight-calculator 'individual-weight)) (iter outer (repeat count) (for individual-1 = (select-random-individual-weighted-by-fitness population weight-calculator)) (dolist (offspring (make-mutated-individuals individual-1)) (collect offspring :result-type 'vector)) (iter (repeat count) (for individual-2 = (select-random-individual-weighted-by-fitness population weight-calculator)) (dolist (offspring (make-crossovered-individuals individual-1 individual-2)) (in outer (collect offspring :result-type 'vector)))))) (def function print-best-individual (population) (bind ((individuals (hu.dwim.genetic-programming::population-individuals population))) (format t ":GENERATION ~A :TOTAL ~A :ERRONEOUS ~A :BEST-INDIVIDUAL ~A~%" (hu.dwim.genetic-programming::population-generation population) (length individuals) (count-if 'hu.dwim.genetic-programming::individual-erroneous individuals) (population-best-individual population))))