;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; This file is part of "NOVA": NOVA = search + COCOMO tools ; Copyright, 2008, Tim Menzies tim@menzies.us ; ; NOVA is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; ; NOVA is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; You should have received a copy of the GNU General Public License ; a long with NOVA. If not, see . ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun search1 () (init-db) ; need some background knowledge (run1) t) (defun run1 (&optional (n 100) (r 1000) best (beste most-positive-double-float) (efforts most-positive-double-float) (efforts-spread most-positive-double-float) (tdevs most-positive-double-float) (tdevs-spread most-positive-double-float)) (if (or (zerop n) (zerop (mod n 10))) (format t "~a) effort ~a +- ~a tdev ~a +- ~a iff ~a~%" n (round efforts) (round efforts-spread) (round tdevs) (round tdevs-spread) (format nil "~a" best))) (if (zerop n) (values best beste) (step1 n r best beste (random-policy) efforts efforts-spread tdevs tdevs-spread))) (defun step1 (n r best beste new best-efforts best-efforts-spread best-tdevs best-tdev-spread) (let (newe efforts tdevs efforts-med tdevs-med efforts-spread tdevs-spread) (labels ((setup () (init-db) (apply-policy new)) (experiments () (dotimes (i r) (experiment))) (experiment () (zaps) (run)) (run () (let* ((f (effort)) (tdev (months f))) (push f efforts) (push tdev tdevs))) (score () (multiple-value-bind (med spread) (median efforts) (setf efforts-med med efforts-spread spread)) (multiple-value-bind (med spread) (median tdevs) (setf tdevs-med med tdevs-spread spread)) (euclidean (log efforts-med)))) (setup) (experiments) (setf newe (score)) (decf n) (if (< newe beste) (run1 n r new newe efforts-med efforts-spread tdevs-med tdevs-spread) (run1 n r best beste best-efforts best-efforts-spread best-tdevs best-tdev-spread))))) (defun all-policies () (append (dr-defaults) (em-defaults) (sf-defaults))) (defun random-policy (&key (select #'random-range)) (let* ((all (all-policies)) (some (?some all)) out) (dolist (one some out) (let* ((key (car one)) (val0 (bag-range (bag-range (cdr one)))) (val (funcall select key val0))) (push (cons key val) out))))) (defun random-range (key range) (?few range)) (defun apply-policy (policies) (dolist (policy policies *db*) (let* ((key (car policy)) (val (cdr policy)) (old (range? key)) (new (coco-restrict old val))) (range! key new))))