**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