What to expect: Here are the sorts of questions I tend to ask:

- Define terms in your own words.
- Sketch the execution of an algorithm. For example, show the queue for A* on a particular problem.
- Give pseudocode describing an algorithm.
- Give the setup for a problem. for example, what would the state, successor function, etc look like for the map-coloring problem?
- Compare different algorithms and their strengths/weaknesses.
- Explain why an algorithm has the characteristics it does. for example, what's the point of the temperature parameter in simulated annealing? (note: I'm not asking 'what's the formulae involved with simulated annealing?' I'm asking for a high-level description of how the algorithm works.)

Here are the sorts of questions I will not ask.

- Write syntactically correct Python code. (I may ask you to write pseudoode, but I'll be interested in program correctness, not whether every bracket and colon is in the right place)
- Multiple choice questions.
- "Trick" questions - the point of this exam is to test your knowledge of the topics we've covered. I may ask you hard questions, but I won't ask things that are deliberately misleading or deceptive.

Potential exam topics:

- Agents:
- Parts of an agent: Percepts, sensors, actuators, actions. (be able to define these concepts and identify them in a particular application)
- Definitions
- Autonomy
- The "intentional stance"
- Rationality

- types of agent programs
- table-driven agents
- reflex agents
- Model-based agents
- goal-driven agents
- utility-based agents
- learning agents

- Environments:
- Observability
- Deterministic/stochastic
- Episodic vs sequential
- Static vs Dynamic
- Discrete vs continuous
- Single-agent vs multi-agent
- (you should be able to explain these terms and use them to characterize a particular environment.)

- Basic algorithms: BFS, Uniform cost search, DFS, DLS, IDS
- Be able to:
- describe the algorithm in pseudocode
- trace their execution.
- Characterize their time and space requirements.
- Describe whether they are complete and/or optimal (and define those terms)

- Problem setup: be able to take a description of a problem and set it up accordingly. Describe what the state will be, what the initial state is, what the goal test is, and how the successor function works with enough precision that someone could write code to implement this.
- Definitions:
- Complete
- Optimal
- State space
- Path cost, step cost
- Weak method

- Basic Algorithms: Best-first search, Greedy Search, A*.
Be able to:
- describe the algorithm in pseudocode
- trace their execution.
- Describe whether they are complete and/or optimal (and define those terms)

- Definitions:
- Admissibility
- Monotonicity
- Optimally efficient

- Be able to:
- propose heuristics for a problem
- show that a heuristic is or is not admissible.

- Be able to:
- Explain how a CSP can be modeled using a graph.
- Talk about different backtracking approaches (chronological vs intelligent) and their strengths and weaknesses.
- Characterize what makes something appropriate for solving as a CSP. (i.e. there are a number of 'satisfactory' solutions)

- Definitions
- Consistent solution
- Most constraining variable
- Least constraining value

- Basic Algorithms: Hill-climbing, Random restart hill-climbing, simulated annealing, genetic algorithms
- Be able to:
- describe the algorithm in pseudocode
- trace their execution.
- Describe whether they are complete and/or optimal (and define those terms)
- Explain the difference between local search and BFS/DFS/A*-style methods.
- Explain their strengths and weaknesses

- Definitions:
- Local optima
- Search landscape
- GA terms:
- crossover
- fitness
- mutation
- schema
- Selection (tournament and roulette)
- Elitism