CS221: Artificial Intelligence: Principles and Techniques

Logistics
Time/location:
• Lectures: Tue/Thurs 3:30-5:20pm in Bishop Auditorium (watch online)
• Sections: Fri 3:30-4:20pm in Skilling Auditorium; see calendar for schedule.
• Office hours: CA office hours locations are TBA; see calendar for times; see [Office Hour Logistics] for logistics.
Instructor:
Course assistants:
 Amita Kamath (Head CA) Anna Zhu Nicholas Barbier Niranjan Balachandar Richard Diehl Martinez Zhen Qin Andrew Han
How to contact us: Please use Piazza for all questions related to lectures, homeworks, and projects, and to find announcements. For external queries, emergencies, or personal matters that you don't wish to put in a private Piazza post, you can email us at cs221-sum1819-staff@lists.stanford.edu. For SCPD-specific issues, email scpdsupport@stanford.edu or call 650-741-1542.
Announcements: All announcements will be made on Piazza. NOTE: If you enrolled in this class on Axess, you should be added to the Piazza group automatically, within a few hours. You can also register independently; there is no access code required to join the group.
Calendar: look here for dates/times of all lectures, sections, office hours, due dates.
Content
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.
Prerequisites: 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):
Reading: 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.

Finally, to look at course content from the last offering (Spring 2019), click here.

A note on the Summer schedule: CS 221 is also offered during the Fall and Spring quarters, during which classes last ten weeks. In the Summer edition, we will cover the same material, but do so in only eight weeks (with more lecture time per week). Due to this compressed schedule, it is even more important that you have mastered the prerequisite material.
Office Hour Logistics

CA office hours are either in Gates B21 (in the basement) or online. See the calendar for times.

• For in-person office hours, there will be a queue on the whiteboard where you can write your name down.
• For SCPD online office hours, you will need to register an account on QueueStatus. When you wish to join the queue, click "Sign Up" at the CS 221 queue. Be sure to enter your email when you "Sign Up"; this is a way for the CA to contact you. Look for announcements on the left panel for more information. For online office hours, you will need to install Zoom to video call with the CA. See instructions below.

Installing Zoom

• Linux:
• Open package (e.g. with 'Ubuntu Software Center' or other appropriate application) and install.
• Windows:
• Go to Stanford Zoom and click 'Launch Zoom'.
• Click 'host meeting'; nothing will launch but there will a link to 'download & run Zoom'.
• Run 'Zoom_launcher.exe' to install.
Coursework

• Homeworks (70%): 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. All assignments are due at 3pm on the due date (30 minutes before class). Here are all the homework deadlines:

• Exam (30%): The exam 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 request for OAE accommodations or a major conflict (e.g., an academic conference) complete this Google Form by Thursday, July 18.
Date: Friday, August 16 from 7pm to 10pm
Location: Cubberley Auditorium

For SCPD students, your exams will be distributed through the SCPD office once you have set up an exam monitor.

• Piazza: You will be awarded with up to 2% extra credit if you answer other students' questions in a substantial and helpful way.

Assignments

Written assignments: 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.
Programming assignments: 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 code.

The programming assignments are designed to be run in GNU/Linux environments, such as cardinal.stanford.edu. Most or all of the grading code may incidentally work on other systems such as MacOS or Windows, and students may optionally choose to do most of their development in one of these alternative environments. However, no technical support will be provided for issues that only arise on an alternative environment. Moreover, no matter what environment is used during development, students must confirm that their code (specifically, the original grader.py script operating on the student's submission.py) runs on a GNU/Linux server, such as cardinal.stanford.edu.

The submitted code will not be graded if it has one of the following issues:

• The original grader.py script (operating on the submitted submission.py) does not exit normally. Note that calls such as quit(), exit(), sys.exit(), os._exit() may cause the program to exit abnormally, as may excessive resource usage. Also note that Python packages outside the standard library are not guaranteed to work.
• 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, and you must acknowledge in your submission all the students you discussed with. The following are considered to be honor code violations:
• Looking at the writeup or code of another student.
• Showing your writeup or code to another student.
• Discussing homework problems in such detail that your solution (writeup or code) is almost identical to another student's answer.
• Uploading your writeup or code to a public repository (e.g. github, bitbucket, pastebin) so that it can be accessed by other students.
• Looking at solutions from previous years' homeworks - either official or written up by another student.
When debugging code together, you are only allowed to look at the input-output behavior of each other's programs (so you should write good test cases!). It is important to remember that even if you didn't copy but just gave another student your solution, you are still violating the honor code, so please be careful. We periodically run similarity-detection software over all submitted student programs, including programs from past quarters and any solutions found online on public websites. Anyone violating the honor code will be referred to the Office of Judicial Affairs. If you feel like you made a mistake (it can happen, especially under time pressure!), please reach out to Robin or the head CA; the consequences will be much less severe than if we approach you.

Submission

Unless the assignment instructs otherwise, all of your code modifications should be in submission.py and all of your written answers in <assignment ID>.pdf. Upload the former to Gradescope under the "Programming" section, and the latter under the "Written" section.
Late days: An assignment is $\lceil d \rceil$ days late if it is turned in $d$ fractional days late (note that this means if you are $1$ second late, $d = 1/(24 \times 60 \times 60)$ and it is 1 day late). You have seven (7) late days in total that can be distributed among the assignments without penalty. There is a maximum of two (2) late days that can be used per assignment. If you exceed this limit by $k$ hours, then you will incur a multiplicative penalty factor of $\max(1 - k/5, 0)$. For example, if you get $40$ points and turn in your homework 2 days + 1.5 hours after the deadline, then your effective score is $40(1 - 1.5/5) = 28$. If you exceed $5$ hours, you will receive $0$ points. You get a zero after all your late days run out, but we reserve the right to give partial credit in extenuating circumstances.