(define-alien-variable ("dynamic_space_size" dynamic-space-size-bytes) unsigned-long) (defun heap-n-bytes () (+ dynamic-space-size-bytes (- sb-vm::read-only-space-end sb-vm::read-only-space-start) (- sb-vm::static-space-end sb-vm::static-space-start))) (defun Train (ruleset RuleGenerator &optional (level 0)) ;(print (heap-n-bytes)) ; (setf (RDRule-good ruleset) nil ; (RDRule-bad ruleset) nil ; (RDRule-ugly ruleset) nil) ;(gc) ;(format t "~A from ~A -ugly ~A -bad ~A~%" (RDRule-comment ruleset) (if (null (RDRule-parent ruleset)) "Base" (RDRule-comment (RDRule-parent ruleset))) (xindex-ns (RDRule-ugly ruleset)) (xindex-ns (RDRule-bad ruleset))) ;(format t "~A = ~A~%" (RDRule-comment ruleset) (RDRule-class ruleset)) (if (or (null (RDRule-parent ruleset)) (not (equal (RDRule-comment ruleset) (RDRule-comment (RDRule-parent ruleset))))) (progn ;(format t "~A from ~A -ugly ~A -bad ~A~%" (RDRule-comment ruleset) (RDRule-comment (RDRule-parent ruleset)) (xindex-ns (RDRule-ugly ruleset)) (xindex-ns (RDRule-bad ruleset))) (if (and (not (equal (RDRule-class ruleset) 'Unknown)) (< level 100)) (progn (if (> (length (remove-if-not #'(lambda (x) (equal (eg-class x) (RDRule-class ruleset))) (table-rows (xindex-table (RDRule-bad ruleset))))) *MINCASES*) (progn (setf (RDRule-true ruleset) (funcall RuleGenerator ruleset nil (RDRule-bad ruleset))) (let ((tmp (RDRule-true ruleset))) (setf (RDRule-ugly tmp) (cross-index (table-copy (xindex-table (RDRule-bad ruleset)) (mapcar #'eg-features (remove-if (RDRule-fn tmp) (table-rows (xindex-table (RDRule-bad ruleset)))))))) (setf (RDRule-bad tmp) (cross-index (table-copy (xindex-table (RDRule-bad ruleset)) (mapcar #'eg-features (remove-if-not (RDRule-fn tmp) (table-rows (xindex-table (RDRule-bad ruleset)))))))) ;(if (not (> (length (table-rows (xindex-table (RDRule-ugly ruleset)))) 10)) ; (setf (RDRule-good ruleset) nil ; (RDRule-bad ruleset) nil ; (RDRule-ugly ruleset) nil)) (Train tmp RuleGenerator (1+ level))))) (if (> (length (table-rows (xindex-table (RDRule-ugly ruleset)))) *MINCASES*) (progn (setf (RDRule-false ruleset) (funcall RuleGenerator ruleset nil (RDRule-ugly ruleset))) (let ((tmp (RDRule-false ruleset))) (setf (RDRule-ugly tmp) (cross-index (table-copy (xindex-table (RDRule-ugly ruleset)) (mapcar #'eg-features (remove-if (RDRule-fn tmp) (table-rows (xindex-table (RDRule-ugly ruleset)))))))) (setf (RDRule-bad tmp) (cross-index (table-copy (xindex-table (RDRule-ugly ruleset)) (mapcar #'eg-features (remove-if-not (RDRule-fn tmp) (table-rows (xindex-table (RDRule-ugly ruleset)))))))) ;(setf (RDRule-good ruleset) nil ; (RDRule-bad ruleset) nil ; (RDRule-ugly ruleset) nil) (Train tmp RuleGenerator (1+ level))))))) ; (setf (RDRule-good ruleset) nil ; (RDRule-bad ruleset) nil ; (RDRule-ugly ruleset) nil) ruleset)))