Artificial Intelligence techniques can solve problems that involve massive amounts of data, have complex constraints and require knowledge or judgment. The techniques have broad applications in our daily lives from Web search to optimization of transportation schedules. The suite of techniques is as broad as the applications. The course will cover representations and algorithms in several core subareas of artificial intelligence: search, evolutionary computation, planning, data mining, information retrieval, and agents. These subareas provide fundamental techniques for solving computationally difficult problems or support the development of important applications, such as identifying relevant patterns from large complex sources of data (e.g., associating products that are often purchased together) and supporting decision making (e.g., agents for intrusion detection). The trade-offs in representations and algorithms will be discussed and explored in a set of programming assignments.