Q260 - Computation in the Cognitive and Information Sciences

Homework Assignment 9

Due: Tuesday, Nov 25. Accepted late without penalty up to class on Dec 2.

The Big Picture

Production systems are important both as a technology and as a model of cognitive processing. This assignment will introduce you to production systems through Jess, the Java Expert System Shell. You will first write a simple system for advising students on class choices to gain familiarity with the approach, and then write a bigger system dealing with a topic of your choice. As you do this, you should think about the the design principles for production systems and their strengths and weaknesses. You may wish to consider going deeper into production systems for the class project.

Getting started

To start Jess, type
cd ~leake/jess/Jess31
java Jess

To exit Jess, type (exit)

Basic Jess commands

In order to complete the homework, you will need to use the following basic Jess commands discussed in class. Each one is followed by examples of its use:

(assert (cost car-5 high))
(assert (mortal socrates))
Retract: Retracts the fact with the given number.
(retract 1)
See the example below for how to retract a fact in a rule.
Every person is mortal
(defrule mortality (person ?x) => (assert (mortal ?x)))

Animals that perform exertion are healthy. (Note that this uses multiple patterns in the antecedent. You may also include multiple actions in the consequent.)
(defrule health-from-exercise (animal ?x) (exetion ?y) (participant ?x ?y) => (assert (healthy ?x)))

To have a rule retract a fact, you need to set a veriable that points to the fact, and then do a retract on the variable (because you don't know the fact number). You do this with an operator "<-". For example, to delete all records of parking tickets
(defrule cancel-ticket
   ?t <- (parking-ticket ?x)
   (retract ?t))
Not: Negation, used in patterns to make sure a fact isn't in working memory. Warning: It appears that Jess doesn't allow "not" in the first pattern of a rule.
If you aren't short, you're tall:
         (defrule height-rule 
                  (person ?x) 
                  (not (short ?x))
                   (assert (tall ?x)))
Or: Makes a disjunction of facts instead of a conjunction
Facts: show the facts in memory
Run: run the inference engine until no more rules fire. Always (reset) before running..
Reset: clear working memory but keep the current program.
Clear: clear working memory and get rid of the current program (used before loading a new program or new version of an old one)
Batch: Runs Jess code as a "batch job" from a file. To run the cryptarithmetic example (assuming you did "cd ~leake/jess/Jess31"), type
(batch "examples/wordgame.clp")
Load-facts: Loads facts from a file
(load-facts "~myname/file")
Watch all: Print each rule firing.
(watch all)
Unwatch all: Turn off the tracing
(unwatch all)


  1. You will write a mini-expert system for deciding which classes a student should take next, based on the information on core courses in the major area requirements of the CS BA requirements page.

    You need to decide how to represent information about the courses that are available, the courses the student has taken, and the prerequisites for each course. You also need to define rules for determining if prerequisites have been satisfied, and for proposing the next course the student should take. You system will be run by asserting facts about the courses the student has taken. It will finish by asserting a fact with a course that needs to be taken next. If you then enter an assertion that the student has taken that course and run it again, the system should update its facts and correctly assert the next course to be taken.

  2. Do one of the following:
    1. Pick an everyday task and write a mini- expert system to solve it. Your solution should involve at least 10 rules that can be "chained together" in chains at least 3 steps long, and should be able to reach at least three major conclusions.
    2. Implement the following rules and test them by running them on the given facts. (This fact and rule set comes from an assignment developed by Mike Gasser.)
      1  If a patient has a very high fever, the patient has a high fever. 
      2  If a patient has whooping cough, the patient has a cough. 
      3  If a patient has poison ivy, the patient has a rash. 
      4  If a patient has a high fever and congestion, the patient has the
      5  If a patient has a rash and no high fever, the patient has poison
      6  If a patient has a cough and a very high fever, the patient has
         whooping cough. 
      7  If a patient has no fever, no cough, and no rash, the patient is
      8  If one patient has a particular disease which is contagious and
         that patient contacts another patient, then the other
         patient has the disease. 
      9  If a doctor says that a patient has a particular disease or is
         healthy, then what the doctor says is true. 
      10 If a person says that a patient has a particular disease or is
         healthy and that is not true of the patient, then that
         person is not a doctor. 
      Ed has a very high fever. 
      Ed has a cough. 
      Alice doesn't have poison ivy. 
      Max says Alice has poison ivy. 
      Grace says Don is healthy. 
      Grace is a doctor. 
      Whooping cough is contagious. 
      Ed contacts Alice. 

    Following good design principles makes a significant difference in the extensibility and maintainability of production systems. To illustrate these points, we will warn you about some possible pitfalls in class.

    Submitting the assignment

    E-mail your code to Doug at deck@indiana.edu. Also e-mail him:
    1. A short description of how each program is used and a paragraph describing strengths and weaknesses in its design for the task, as well as how it could be improved.
    2. A paragraph of commentary on how your program models (or doesn't model) the way a person performs the task, and why.
    Last modified: Mon Nov 10 17:14:05 EST 1997
    URL: http://www.cs.indiana.edu/classes/q260/hw3.html
    Comments: leake@cs.indiana.edu or deck@cs.indiana.edu