Website: http://www.fas.harvard.edu/~albert/cscie220
This course is intended for students who have done a fair amount of programming in at least one high-level language and have written computer programs of at least moderate complexity.
The course will begin with an introduction to the LISP programming language. Although no prior experience with LISP is assumed, I will assume that students are thoroughly familiar with programming concepts (variable scope, data structures, pointers, etc.) normally learned in courses on Java or C/C++. The teaching assistant will run introductory sections during the first weeks to provide additional help with LISP beyond that provided in lecture.
We will begin our study of Artificial Intelligence with a look at knowledge representation formalisms and search techniques, the ultimate tools of most AI programs. Content areas include natural language processing, computer vision, logic and theorem proving, game playing programs, inheritance networks, neural networks, genetic algorithms, and expert systems. We will discuss the current state of the art with examples from recent mainstream publications. As time permits, we will also cover robotics and planning.
Each student is expected to write several computer programs ("lab assignments"), using a Common Lisp package called clisp, available on the Harvard Unix machines. At your own risk and with less support, you may use any other CommonLISP package you choose; the teaching staff will still be able to help you with questions pertaining to the LISP language, but not with any problems you might have that are associated with your particular version of CommonLISP or your personal computer. Some of the later assignments, and the final project, may be written using Java or C/C++ if you prefer.
The lab assignments have taken people widely varying amounts of time in past years, depending on their programming skills. I have heard estimates from former students ranging from 5 to 15 hours or more, per week. Please plan accordingly.
Teaching Assistant: TBD. The TA will run a weekly one-hour section meeting, grade homework, and provide assistance to students with the course material. The TA will also hold a weekly lab hour in one of the campus computer labs to help with programming questions.
We will give out phone numbers and calling times in class, but for any coding issues email is usually the best way to reach us, so we can see the code fragments in question.
Attendance is expected at both lecture and section. The material covered in the sections will relate directly to the homework assignments and will cover LISP programming in more detail than we have time for during lecture. If you miss a lecture or section, be sure to get copies of handouts, and find out from your TA or from someone else in the class what was covered. Important course announcements may be sent via e-mail; please make sure you've provided me with an address I can use!
I hand out lecture notes at the beginning of most lectures; these are rough outlines of the topics covered and are copies of my pre-lecture slides. However, during the lecture I will be marking up many of the slides; you may wish to take your own additional notes directly on the handouts.
Artificial Intelligence: A Modern Approach (3rd ed.), Stuart Russell & Peter Norvig, 2010.
ANSI Common Lisp, Paul Graham, 1996.
The Russell & Norvig text will provide more technical reading for the course, to supplement the more informal lecture notes. Readings from Graham are designed to help you get up to speed with LISP, and most students will find it a useful reference guide throughout the semester. The Graham book is required unless you are already a strong LISP programmer.
Assignments should be turned in both electronically (via drop-boxes or e-mail attachments) and on paper, by the due date. We need BOTH so that we may run your electronic versions, and read (and write comments on) the code on the paper version. In general we won't begin grading your assignment unless we have both copies; if for some reason you cannot hand in both an electronic and a paper copy, please communicate directly with the TA so we know what's going on.
ALL ASSIGNMENTS MUST BE YOUR OWN WORK! It is NEVER acceptable to share code (even code fragments) with someone else without attribution. If you copy code fragments from any source (e.g. a textbook or website) or if you get help from another student, you MUST give full credit in every instance, with a code comment inside your source document clearly indicating which code fragments were copied, shared, or derived together with someone else. If you have ANY questions about the degree to which it is appropriate to give or receive assistance with the work, please ask the instructor.
Please finish assignments on time! Assignments turned in on time will generally be returned the following week. No assignments will be accepted for credit after graded assignments have been returned, except in extraordinary cases. Please let the instructor know immediately about unusual circumstances that will make it hard to complete assignments on time so that appropriate accommodations can be made.
Each assignment will be graded on the basis of both correctness and programming style.
Correctness is a measure of how well the program meets the assignment specifications. We may provide some test data, but you should consider all possible cases, and may need to provide additional test data to make sure your program is completely correct. You should always hand in both a printout of the program itself (that is, the file or files containing the LISP functions you have written) and a runtime session demonstrating the program being run with as many different types of input data as your program can handle.
Style is an important part of any computer program. Important stylistic issues include good modular structure, the use of appropriate flow constructs (which, in LISP, often means recursion), and good documentation, including header comments at the start of each function explaining its purpose, input, output, and side effects (if any). Names of variables and functions should clearly describe their purpose. When printed out, the code should be aligned in an easy-to-read fashion. The TA will describe and demonstrate correct style with examples in section. Please ask me or the TA if you have any questions about LISP style!
The final project will be graded using a rubric; see the project info for details.
Reading: Russell&Norvig [RN] chapters 1-2. Graham chapters 1-4.
(A note on the reading: except for chapter 1, readings from Graham are meant to be skimmed and then used as needed. Readings from Russell & Norvig are dense and should be read carefully. I have tried to be as precise as possible about which chapter sections are relevant to the upcoming lecture, but feel free to read surrounding chapter sections as well, and if we move ahead or behind in the lectures, please follow along accordingly.)
Reading: RN chapter 3 and 4.1-4.2. Graham chapters 5-9.
Reading: RN chapter 5, 23.1-23.2, 12.1.
Reading: RN chapter 23.3-23.7.
Reading: RN chapters 7, 8, and 9.
Reading: RN chapter 18.
Reading: RN chapter 20, 4.1-4.2, and 18.7.
Reading: RN chapter 24.1-24.4.
Reading: RN chapter 24.5-24.7.
Reading: StarLogo Manual: "Getting Started" and "Tutorial".
Reading: RN chapters 26, 27.3-27.4.
Reading: current topic readings will be announced in class.
8. Course Syllabus and Weekly Readings
(Note: The readings for each week are listed before the week in which the topic will be covered.)
Section: LISP Recursion, Mapping, Iteration. General help getting started with LISP and with Asst #1.
Assignment #1 due.
Section: LISP Debugging. Additional constructs. Building data structures. Help with Asst #2.
Assignment #2 due.
Section: Topics related to Asst #3.
Assignment #3 due.
Section: Topics related to Asst #4.
Assignment #4 due.
Section: Topics related to Asst #5.
[Discussion Board posting on Current News Topics]
Section: Topics related to Asst #5.
Assignment #5 due.
Section: Topics related to Asst #6.
[Discussion Board posting on Current News Topics]
Section: Topics related to Asst #6.
Assignment #6 due.
Section: Topics related to Asst #7.
Section: Topics related to Asst #7.
Assignment #7 due.
Preliminary Proposals Due.
Section: Midterm Review.
Final Project Proposals Due.
Section: Final project support
Section meeting time may be used for additional lecture topics or project presentations, if needed.
FINAL PROJECTS DUE by 5:30 PM.
Section meeting time may be used for additional presentations, if needed.
Return to Course Home Page.