Computer Science 662: Artificial Intelligence

Spring 2013 Syllabus         Class # 0203-662-01

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:

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

    Blind search
        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