Time: MWF 2:15-3:20
Location: HR 232
Professor: David Galles
Office: HR 542
Office Hours MW 1:00 - 2:00, T 10:00-11:30, or by appointment
Though these are my stated office hours, I am in my office most of the day.
If my door is open (and it usually is), I am happy to talk with students.
Phone: 422-5951
Email: galles@usfca.edu
Text:
Artificial Intelligence: A Modern Approach. By Stuart Russell and Peter Norvig. 3rd edition.Prerequisites
Computer Science 245, Data Strutctures and Algorithms, or equivalent. You should be familiar with common data structures, such as lists, queues, trees, graphs, and hash tables. You should have basic mathematical background, including big-O notation and basic probability and statistics. You should be comfortable learning a new software tool on your own by reading documentaion and experimenting.Learning Outcomes
At the conclusion of this course, you should be able to:- Explain the advantages and disadvantages of different search techniques and implement these algorithms.
- Represent basic facts about the world using a formal knowledge representation tool.
- Implement algorithms for probabilistic reasoning.
- Describe and implement several machine learning algorithms
- Write medium-sized programs in Python
Grading
You'll have seven assigments to complete throughout the course of the semester, each taking about 2 weeks. Each assignment will provide you with hands-on experience working with one or more of the concepts covered in class. Sometimes these 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, which will be closed note and closed book. 65% of your grade will be based on the the assignments, 10% on each of 2 midterms, and 15% on the final exam.
Late Policy
You may submit assignments up tp 24 house late for 3/4 credit (in other words, a late assignment is worth AT MOST 75%) Start early, and turn assignments in on time. If you start an assignment the night before it is due (or even 2 nights before it is due) You will not complete them on time. Most of the assignments are conceptually difficult, and understanding the right thing to do will take some time.Collabortion
It is acceptable (and encouraged) that students discuss the topics of the course with each other. Assignments are slightly more tricky. You are allowed to talk in general about the parameters of the assignment, but it is NOT OK to share source code or copy anu portion of an assignment. 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. Note that any time you are looking at another person's source code you are cheating
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.
Topics
The following is subject to change, given the interests/knowledge of the students
Search Problem Definition
Problem space
(initial state/goal states/operators/path cost)
Completeness/Correctness/Optimality
Breadth First Search (BFS)
Uniform Cost Search
Depth First Search (DFS)
Depth Limited Search
Depth-First Iterative Deepening
(DFID)
Bidirectional Search
Heuristic Search
Heuristic function
A*
IDA*
Admissibility of heuristic functions
Heuristic development
(Where do heuristics come from?)
Game Playing
Minimax
Evaluation functions
Alpha-beta pruning
Probabilistic Reasoning
Probability theory
Prior Probability
Conditional Probability
Bayes Rule
Probability Axioms
Directed Acyclic Graphs (DAGs) for conveying independence
Graphoid Axioms
Bayesian Networks
Message Passing in Bayesian networks
pi and lambda messages
Trees and Polytrees
clustering & stochastic simulation
Machine Learning
Natural Language Processing
Logic & Inference