Department of Computer Science
CS 370 - Artificial Intelligence

The goal of the subfield of Artificial Intelligence is to build software systems that behave "intelligently". By this, we mean that the computer systems "do the right thing" in complex environments--that they act optimally given the limited information and computational resources available. This course provides an introduction to artificial intelligence with an emphasis on the programming techniques and skills needed to develop high-performance AI systems.

The course will focus on the design of intelligent agents. An intelligent agent is a software system that can interact with an external environment by perceiving that environment and taking actions to change the environment.

TEXTS (required):
Stuart Russell & Peter Norvig, Artificial Intelligence: A Modern Approach, Prentice Hall, 1995, and on-line handouts
Eric Chown, 207 Adams Hall
Email address:
Web address:
Office Hours: M,2:30-3:50, T,TH 2:30-3:30, or by arrangement
Class meeting: MW 1:00-2:25 - Searles 223
Most slides used in the course come from the AIMA website.

Week of Topics Readings Work Due
Sep 4 Introduction, Intelligent Agents Chapter 1, 2
Sep 11 Problem Spaces and Search Chapter 3 Program 1 Soln
Sep 18 Informed Search Chapter 4
Sep 25 Game Theory and Search Chapter 5 Alpha-Beta example
Oct 2 Reinforcement Learning Chapter 20 Program 2
Oct 9 Knowledge Representation Chapter 6 How to write papers
Oct 16 First Order Logic Chapter 7 Program 3
Oct 23 Knowledge Representation and Logic - Continued Chapter 7 Exam 1
Nov 1 Knowledge and Logic Chapters 7, 9
Nov 6 Making Simple Decisions Chapter 16
Nov 13 Learning from Observations Chapter 18 Robots
Nov 20 Neural Networks Chapter 19
Nov 27 Neural Networks (Continued) Chapter 19
Dec 4
(1/2 week)
Current Topics Soccer (in development)
Dec 13 *** final *** Exam 2
The work for this course includes class participation, readings, two tests, several programming assignments, and assorted homeworks.

This is a 300-level computer science course oriented towards programming. It is my expectation that everyone taking the course will be comfortable writing and modifying significant programs. The bulk of the homework for the course will involve working with programs. You cannot pass this course without completing all of the programs. Further, you cannot expect that I will provide help debugging and fixing code. Everytime I (or any other cs faculty) provide help debugging or helping with code you will lose points on that assignment. On the other hand I am more than happy to provide significant conceptual help on any assignment. Think of this like an English class where the professor will give you help with content and structure, but not grammer and spelling.

Assignment lengths will be tailored based upon my expectation of a reasonable amount of work necessary to complete a program. For example, if I give you two weeks to complete a program I would reasonably expect you to spend as much as 20 hours on that program (though your actual time may be significantly less). Again, that period of time is based upon the expectation that you are a competent programmer, if you are not programs may take significantly longer.

Each student is responsible for his/her own work. Collaboration on homework assignments should be limited to answering questions that can be asked and answered without using any written medium (e.g., no pencils, pens, or email). This means that no student should read any code written by another student unless they are in the same group on a group project.

From the Bowdoin catalogue: "Course grades are defined as follows: A, the student has mastered the material of the course and has demonstrated exceptional critical skills and originality." The material of the course consists of homework assignments, class participation and exams. A "master" of this material is a student who successfully completes all of the homework assignments (and notably shows creativity in doing so), is an active and productive participant in classroom discussion (and does not miss class, nor show up late), and shows a thorough understanding of artificial intelligence on the exams.

Any competent computer scientist should be able to pick up your programs and quickly understand them. Your programs should not merely complete the assignment, they must be well documented, cogently written, and robust. My standard for this class will be to assume that you are writing these programs for an AI company and that other people in the company will be using and modifying your code. Writeups should be taken as seriously as a paper for an English or History class.

I take it as a given that you will be in class on time every day. Not achieving this basic level of performance will reduce your grade in the course. Further, good students will actively participate in class discussions.

There will be two exams in the course. Details will be given as they draw near.