;;;====================================================== ;;; NJ CRime Prediction Expert System ;;; ;;; A simple expert system which attempts to predict ;;; relative levels of community crime based on other attributes. ;;; ;;; CLIPS Version 6.0 Example ;;; ;;; To execute, merely load, reset, and run. ;;;====================================================== (deftemplate community "info about a community " (slot name (type SYMBOL) (default unknown) ) (slot pop (type SYMBOL) (default med) (allowed-symbols low med hi) ) (slot unemploy (type SYMBOL) (default med) (allowed-symbols low med hi) ) (slot ownerocc (type SYMBOL) (default med) (allowed-symbols low med hi) ) (slot twoparent (type SYMBOL) (default med) (allowed-symbols low med hi) ) (slot poverty (type SYMBOL) (default med) (allowed-symbols low med hi) ) (slot popdens (type SYMBOL) (default med) (allowed-symbols low med hi) ) (slot income (type SYMBOL) (default med) (allowed-symbols low med hi) ) (slot education (type SYMBOL) (default med) (allowed-symbols low med hi) ) (slot crime (type SYMBOL) (default unknown) (allowed-symbols ok bad unknown) ) ) (defrule unemployrule ?f <- (community (unemploy hi) (crime unknown) ) => (modify ?f (crime bad)) ) (defrule densNedurule ?f <- (community (popdens med)(education low)(crime unknown) ) => (modify ?f (crime bad)) ) (defrule densNpoprule ?f <- (community (popdens med)(pop med) (crime unknown) ) => (modify ?f (crime bad)) ) (defrule eduNpopNunemployrule ?f <- (community (education low)(pop low) (unemploy med)(crime unknown) ) => (modify ?f (crime bad)) ) (defrule eduN2parNunemployrule ?f <- (community (twoparent med)(education med) (unemploy med)(crime unknown) ) => (modify ?f (crime bad)) ) (defrule goodunemployrule ?f <- (community (unemploy low)(crime unknown) ) => (modify ?f (crime ok)) ) (defrule goodedurule ?f <- (community (education hi)(crime unknown) ) => (modify ?f (crime ok)) ) (defrule gooddensNpoprule ?f <- (community (popdens low)(pop med) (crime unknown) ) => (modify ?f (crime ok)) ) (defrule gooddensN2parNunemployrule ?f <- (community (twoparent low)(popdens low) (unemploy med)(crime unknown) ) => (modify ?f (crime ok)) ) (defrule print-ok-answer (community (name ?nm) (crime ok)) => (printout t t "For community: " ?nm t "predicted crime is: ok " t t ) ) (defrule print-bad-answer (community (name ?nm) (crime bad)) => (printout t t "For community: " ?nm t "predicted crime is: bad " t t ) )