The goal of this course is to teach you about the theory and design of intelligent systems, meaning programs that can take 'intelligent action.' The course will focus on applications for the WWW, which will also give you exposure to current Web technologies. At the conclusion of this course, you should be able to:
CS 245 or equivalent. You should be comfortable writing medium-sized programs in a fairly short period of time. You should be familiar with common data structures, such as lists, queues, trees and graphs. You should also feel comfortable learning a new software tool on your own by reading about it and experimenting. I'll also expect you to have some basic mathematical background, including familiarity with probability, statistics, and big-O notation.
You'll have nine assigments to complete throughout the course of the semester, each taking between 1 and 2 weeks. Each assignment will provide you with hands-on experience working with one or more of the concepts covereed in class. Sometimes thes will be pen-and-paper exercises, but most of they time they will involve programming. The assignments will also typically contain some written questions about the reading material.
In addition, you'll have two midterms, plus a final. These will fit the standard format: in class, closed book, etc.
Here's how the course will be broken down:
65% assignments (see the assignments page for more details on this.)
5% class participation (this includes both attendance and taking part in class discussion.)
Attendance is mandatory. That includes showing up on time at the start of class. If you need to miss a class for a valid reason, you need to talk with me IN ADVANCE. Lack of attendance will lead to a drop in your grade, or your being dropped from the class altogether.
Artificial Intelligence: A Modern Approach. By Stuart Russell and Peter Norvig. 2nd edition. (Note: You cannot use the first edition. The content has changed quite a bit, and there's been a lot of new material added.)
From time to time, I'll also have readings for you from other sources. I'll put these on the course web page as needed.
You may submit assignments up to 24 hours late for 2/3 credit. (In other words, a late assignment is worth AT MOST 67%.) I strongly recommend turning everything in on time; this class moves fairly quickly, and getting behind is the most common way that students struggle and fail.
This will require good time management; you simply cannot start these assignments the night before they are due and hope to finish them. Most of them are not horribly challenging from an implementation point of view, but they are often conceptually difficult; understanding the right thing to do takes some time and effort.
It's also worth mentioning that I rarely answer email the night before an assignment is due, particularly "I'm just getting started" emails. Ask questions early on.
In general, I expect students to behave responsibly and do their own work. I'm willing to assume this is the case until proven wrong. More specifically, it is OK to talk with each other about the general parameters or approach of the assignment. It is NOT OK to share source code, to do part of an assignment for another person, or to directly copy another person't work. If you are unsure as to whether something is considered fair game or not, please ask me and we can discuss it.
A few examples: "On question 4, are we supposed to implement DFS using a priority queue?" This is fine; it's a clarification of the assignment. Feel free to talk about this sort of thing with your classmates.
"I don't understand A*! Can you explain it to me?" Also fine; you're talking about the course material generally; I think students should help each other with this sort of thing - you're great resources for each other.
"Question 3 is really hard. How did you do it?" Now we're getting into a gray area. If you're talking in generalities here ("Well, we have to filter the input, assign utilities to possible states, and select the optimal state") that's fine; you're not telling the other person exactly how to do the assignment, you're just discussing approaches. If you're talking specifics ("Here's the code for calculating expected utility.") then we're moving into unacceptable territory. The question to ask is: does the person I'm talking to still need to think for themselves in order to solve the problem, or have I just given them the entire answer? Remember the soap-opera rule: After discussing the problem, could you go and watch 6 hours of soap operas before working on the answer? If so, you're probably in good shape. I strongly recommend erring on the conservative side here; if you're unsure whether you're sharing too much, tell the question-asker that they should talk to me. I'm always happy to help people with problems.
"Can I just look at/use/copy your code?" Definitely not acceptable. Keep in mind that both participants are cheating here; the person who is copying and the person who is allowing their friends to copy. Students that I feel are cheating in this manner (this is cheating) will not be treated nicely.
Also note that using code that you get off the web, from a friend, etc. and turning it in as your own is considered plagiarism, just as if you did it in a paper. This will result in (at least) a zero for that assignment.
List of topics
Please see the resources page for a detailed list of topics.