EECS 344: Design of Computer Problem Solvers

Winter 2008


Location: Tech M177
Time: Tuesday/Thursday, 3:30 – 4:50pm

Instructor: Ken Forbus, Ford 3-313
Office Hours: By appointment

Class communications:
   email for all class matters (including turning in assignments):

    <initials of department> <course number> -staff
          <at> <cs> <dot> <the usual NU edu bit>
   Discussions: We will use Blackboard for class discussion
  This Web site:


Class essentials

About the class

Building software that reasons is one of the key activities of artificial intelligence.  Such software lies at the heart of many of today's interesting technologies, such as on-board diagnosis systems, intelligent CAD systems, shopbots, natural language processing systems, and intelligent tutoring systems and learning environments.  Reasoning software is also used as a component in building cognitive simulations, software designed to model aspects of human cognition.  This course will teach you how to build such software.  What you should know after taking this course will include:

During the course you will be doing a lot of programming -- but very little of it from scratch!  Instead, you'll be working with software modules we've developed, using them, modifying them, and sometimes significantly extending them.   This way you spend more time learning the ideas than polishing your coding skills (although you will have ample opportunity to improve those as well).    

In addition to the material in the textbook, we will also cover several advanced topics, including using databases to implement large knowledge bases, building federated reasoning systems, and analogical reasoning.   You will be working with FIRE, a new prototype reasoning system built at Northwestern that uses the OpenCyc knowledge base.

The detailed syllabus can be found here.

Instructional Method

Class meetings will be combinations of lecture, discussion, and studio work.  In areas where a high degree of skill and creativity are involved, studio instruction has proven to be a valuable way of helping people learn.  I think ultimately all programming courses will be taught via studio instruction.  However, this requires that people bring enough notebooks/tablets to class so that every pair of students can have a machine.  We have a couple of Tablet PCs that Microsoft donated for this purpose, but if enough students cannot bring machines that can run Lisp, we’ll have to revert to just lecture and discussion.


Grades will be based on

1.       Homework Assignments (60%).  These will be weekly, handed out on Thursdays, due the following Thursday before class. 

2.       Term Project (30%).  This must involve the ideas you’ve learned in the class, but otherwise it will be up to you.  There will be a proposal half-way through the quarter to make sure that you’re doing something that will both succeed and teach you something interesting.

3.       Participation (10%).  This includes both in-class and on the discussion board.

Last edited 1/6/08, by KDF