What is this course about?
What do web search, speech recognition, face recognition, machine translation,
autonomous driving, and automatic scheduling have in common?
These are all complex real-world problems,
and the goal of artificial intelligence (AI) is to tackle these
with rigorous mathematical tools.
In this course, you will learn the foundational principles that drive these
applications and practice implementing some of these systems. Specific
topics include machine learning, search, game playing, Markov decision
processes, constraint satisfaction, graphical models, and logic.
The main goal of the course is to equip you with the tools to tackle new
AI problems you might encounter in life.
This course is fast-paced and covers a lot of ground,
so it is important that you have a solid foundation on both the theoretical and empirical fronts.
You should have taken the following classes (or their equivalents):
There is no required textbook for this class, and you should be able to
learn everything from the lecture notes and homeworks.
However, if you would like to pursue more advanced topics or get another
perspective on the same material, here are some books:
Bear in mind that some of these books can be quite dense and use different
notation terminology, so it might take some effort to connect up with the
material from class.
- Homeworks (60%):
There will be weekly homeworks with both written and programming parts.
Each homework is centered around an application and will also deepen your understanding of the theoretical concepts.
Some homeworks will have a competition component; winners will receive extra credit.
Here are all the homework deadlines:
- Midterm (20%): The midterm is a three-hour written exam that will
test your knowledge and problem-solving skills on all preceding lectures and homeworks.
You cannot use any external aids
except one double-sided page of notes.
If you have a major conflict (e.g., an academic conference),
submit a request to take it at another time
(do this by Tue Oct 28).
Date: Tue Nov 18 from 6pm to 9pm
Location: Hewlett 200,201,102,103
For SCPD students, your midterms will be distributed through the SCPD office once you have set up an exam monitor.
- Project (20%): The final project provides an opportunity for you to
use the tools from class to build something interesting of your choice.
Projects should be done in groups of up to three.
The project will be something that you work on throughout the course and we have set up some milestones
to help you along the way:
See the project page for more details.
Regardless of the group size, all groups must submit the same basic amount of work as detailed in each milestone.
Of course, the experiments may not always be successful,
so we will cut the smaller groups more slack,
while larger groups are expected to be more thorough in their experiments.
You will be awarded with up to 2% extra credit
if you answer other students' questions in a substantial and helpful way.
Homeworks should be written up clearly and succinctly; you may lose points if your answers
are unclear or unnecessarily complicated.
Here is an example
of what we are looking for.
You are encouraged to use LaTeX to writeup your homeworks
(here's a template
), but this is not a requirement.
The grader runs on Python 2.7, which is not guaranteed to work with newer versions (Python 3) or older versions (below 2.7).
Please use Python 2.7
to develop your codes.
Although we recommend that you use a UNIX environment (e.g., Linux or OS X),
the sanity check script
grader.py should work on Windows as well.
Note that no matter what OS you use, you will need to submit the assignments on corn machines.
The final grading will be run on Linux servers.
The submitted code will not be graded if it has one of the following issues:
- The code does not run on
In particular, Python packages outside the standard library are not guaranteed to work.
- The code quits unexpectedly. To prevent this, do not use
os._exit(), or any command that sabotages the server.
- The code reads external resources other than the files given in the assignment.
- The code is malicious. This is considered a violation of the honor code.
The score of the assignment will be zero (0) and the incident will be reported to the Office of Judicial Affairs.
Collaboration policy and honor code:
You are free to form study groups and discuss homeworks and projects.
However, you must write up homeworks and code from scratch independently
without referring to any notes from the joint session. You should not
copy, refer to, or look at the solutions in preparing their answers from
previous years' homeworks. It is an honor code violation to intentionally
refer to a previous year's solutions, either official or written up by
another student. Anybody violating the honor
will be referred to the Office of Judicial Affairs.
All assignments (homework problems and project milestones) must be submitted using the submit script by
11pm (23:00, not 23:59)
Please note that the submission script only works on corn
so please don't submit on myth
Copy your submission files
corn.stanford.edu. You can use a graphical interface
Fugu) or the following command:
scp <your submission file(s)> <your SUNetID>@corn.stanford.edu:
ssh <your SUNetID>@corn.stanford.edu
For Windows, you can use
Make sure you use the binary transfer mode, as the ASCII transfer mode will damage PDF files!
Make sure the code runs correctly on corn. (Otherwise, the code will not be graded.)
/usr/bin/python /usr/class/cs221/WWW/submit.py <assignment ID> <directory with your submission files>
For example, if the assignment ID is
and you are in the same directory as your submission files, type:
/usr/bin/python /usr/class/cs221/WWW/submit.py foundations ./
You are allowed to submit an assignment up to ten (10) times in total.
Each submission will replace the previous.
Since we do not accept the assignments from other submission methods (e.g., email),
please make sure you can use the submit script. Do not wait until the deadline.
If anything goes wrong, please ask a question on Piazza or contact a course assistant.
Partial work is better than not submitting any work.
You will receive an email confirmation about your submission. For
assignments with a programming component, we will automatically
sanity check your code in some basic test cases, but we will grade
your code on additional test cases.
Important: just because you pass the basic test cases, you are by no
means guaranteed to get full credit on the other test cases, so you should
test the program more thoroughly yourself!
Unless the assignment instructs otherwise, all of your code modifications
should be in
submission.py and all of your written answers
For the project milestones, make sure the same one member of your
group submits on behalf of the entire group. The submission should include a
group.txt file which should contain the SUNetIDs of the entire
group, one per line. Do not include your names.
An assignment is $n$ days late if it was not turned in within
$24(n-1)$ hours of the deadline. You have eight (8) late days
in total that can be distributed among the assignments (except the final project
report) without penalty, with a maximum of two (2) per assignment
The submit script will not accept any submission after the hard deadline,
which is forty-eight (48) hours
after the deadline.
(Updated Nov 5) If you use more than
eight (8) late days, we will subtract $(25 n)\%$ from the assignment grade
where $n$ is the number of late days beyond the 8-day limit.
Late days are applied chronologically.
Note that you can still use only up to two (2) late days per assignment.
If you believe that the course staff made an objective error in grading,
then you may submit a regrade request. To do this, you must come in person
to the owner CA in charge of the given homework or midterm problem.
Any requests submitted over email or on Piazza will be ignored.
Remember that even if the grading seems harsh to you, the same rubric was
used for everyone for fairness, so this is not sufficient justification for
a regrade. If the regrade request is valid, the CA will add your request
to the list, which will get processed.