;; AI Final Project ;; Module: ALM Specifics-L-System Crossovers ;; CSC 466 - Graci ;; Jacob Peck - 20110330 (defmethod perform-crossovers ((pop population) (newpop population) &aux nr-crossovers newinds ind temp temp2) (if *DEMO* (format t "~%~% Performing crossovers~%")) (setf ind (population-individuals pop)) (setf newinds '()) (setf nr-crossovers (ceiling (* (length ind) (float (/ (population-chance-crossover pop) 100))))) (if *DEMO* (format t " doing ~A crossovers~%" nr-crossovers)) (setf offset (length (population-individuals newpop))) (dotimes (i nr-crossovers NIL) (setf temp (select-individual pop)) (setf temp2 (select-individual pop)) (setf newinds (append newinds (list(crossover-individuals temp temp2 (+ i offset 1))))) ) (dolist (element newinds NIL) (add-individual newpop element) ) ) (defmethod crossover-individuals ((mother individual) (father individual) (name integer) &aux lsysmom lsysdad lsyschild child pos data data2 temp newdata) (setf lsysmom (individual-data mother)) (setf lsysdad (individual-data father)) (if *DEMO* (progn (format t "Original mother l-sys:~%") (format t "~A~%" (lsys-rules lsysmom)))) (if *DEMO* (progn (format t "Original father l-sys:~%") (format t "~A~%" (lsys-rules lsysdad)))) (setf newdata '()) (setf pos (pick *alphabet*)) ; pick a rule to crossover (setf lsyschild (make-lsys (lsys-rules lsysmom) (lsys-data lsysdad))) ; child takes mom's rules and dad's seed (setf data (lsys-rules lsyschild)) (setf data2 (lsys-rules lsysdad)) ; gets new info from father (dolist (element data NIL) (cond ((eq (car element) pos) (dolist (element2 data2 NIL) (if (eq (car element2) pos) (setf temp element2)) ) ) (t (setf temp element) ) ) (setf newdata (append newdata (list temp))) ) (setf (lsys-rules lsyschild) newdata) (setf child (make-individual lsyschild name)) (setf (individual-fitness child) (individual-fitness father)) (if *DEMO* (progn (format t "Crossed-over child individual (look for crossover at rule ~A):~%" pos) (visualize-individual child) (format t "~A~%" (lsys-rules (individual-data child))) ) ) child )