This is intended to give you a sense of what I think is important from the course so far, and what I will be thinking of when creating the exam. I hate disclaimers, but here are some anyway. This is not a contract. I may have inadvertently left something off this list that ends up in an exam question. I make no guarantees that the exam will be 100% limited to items listed below. Moreover, I will not be able to test all of this material given the time limitations of the exam. I will have to pick and choose some subset of it. You are permitted one 8.5 x 11 sheet of paper with notes (both sides) for use as a reference during the exam. Here are the specifics: Students should be able to... Indicate whether a particular environment is single agent vs. multiagent, fully observable vs. partially observable, deterministic vs. stochastic, episodic vs. sequential, static vs. dynamic, and/or discrete vs. continuous. Provide analysis of time complexity, space complexity, completeness, and optimality for each of the search algorithms listed below. Explain what situations make sense for each, what reasons there are for choosing one over another, and should be able to demonstrate in detail how any of them work on a specific example. Demonstrate understanding of the difference between tree-search and graph-search, and why the distinction matters. Pseudocode these algorithms, produce variations, or interpret their application to given problems: - depth-first search - breadth-first search - uniform cost search - iterative deepening search - best-first search - greedy best-first search - A* search - IDA* search Define a heuristic, construct an appropriate heuristic for a problem under consideration, and demonstrate how it fits in with greedy best-first search and A* search. Should be able to define what admissible and consistent heuristics are, why they matter, and be able to prove related statements about admissibility and/or consistency. Should be able to identify when one heuristic dominates another, and justify why a dominating heuristic leads to a faster solution. Answer detailed questions about how minimax works, from conceptual, algorithmic, and programming perspectives. Explain memory and time complexity of minimax, as well as appropriate approximation mechanisms. Explain what minimax what guarantees minimax makes about optimality, what assumptions are required for it, and what the ramifications are when the assumptions are not satisfied. Write pseudocode for minimax, answer questions about it, and modify it to handle variations. Handle any of the relevant above items with multiplayer-games as well as two-player games. Answer detailed questions about how alpha-beta pruning works, from conceptual, algorithmic, and programming perspectives. Explain impact that alpha-beta pruning has in terms of time, space, and correctness of answer.