This is an archived course. A more recent version may be available at

Archived Versions


Course Meeting Times

Lectures: 2 sessions / week, 1.5 hours / session

Learning Objectives

Students should be able to:

  1. Model decision making problems using major modeling formalisms of artificial intelligence and operations research including propositional logic, constraints, linear programs and Markov processes;
  2. Evaluate the computational performance of search, satisfaction, optimization and learning algorithms; and
  3. Apply search, satisfaction, optimization and learning algorithms to real world problems.

Measurable Outcomes (Assessment Method)

Upon successful completion of 16.410 students will be able to:

  1. Describe at an intuitive level the process of artificial intelligence and operations research: a real-time cycle of problem understanding, formulation, solution and implementation (homework).
  2. Formulate simple reasoning, learning and optimization problems in terms of the representations and methods presented (homework, quiz).
  3. Manipulate the basic mathematical structures underlying these methods such as system state, search trees, plan spaces, model theory, propositional logic, constraint systems, Markov decision processes, decision trees, function approximators, linear programs and integer programs (homework, quiz).
  4. Demonstrate the hand execution of basic reasoning and optimization algorithms on simple problems (homework, quiz).
  5. Formulate more complex, but still relatively simple problems, and apply implementations of selected algorithms to solve these problems (homework, lab).
  6. Evaluate analytically the limitations of these algorithms, and assess tradeoffs between these algorithms (homework, quiz).


  • Search and Reasoning: Uninformed and informed search, game tree search, local stochastic search and genetic algorithms, constraint satisfaction, propositional inference, rule-based systems, planning, and model-based diagnosis.
  • Optimization: Linear programming, integer programming, Markov decision processes.
  • Learning: Decision tree learning, reinforcement learning, neural nets.

Pedagogical Methods

  • Computer projected presentations
  • Chalk-talk
  • Prepared notes handed out to class
  • Text
  • Web-based recitations
  • Web-based problem sets
  • Videos and computer demonstrations
  • Computational lab in scheme


The following policies are similar to other programming intensive courses. The following policies are adapted from those given for 6.001.


Problem sets are released weekly, and include both hand written and programming assignments. Problem sets are due in class unless otherwise indicated.

The programming assignments have been planned on the assumption that you will do the required reading and other preparation before you start programming. It is generally much more efficient to test, debug, and run a program you have planned before beginning than to try to do the planning online. Students who have taken similar subjects in previous terms report that failing to prepare ahead for programming assignments generally ensures that the assignments will take much longer than necessary.

Not only is it more efficient to begin work on each problem set soon after it is distributed, but it is advantageous to complete your computer work early. If you use the 16.410-13 Lab, you'll find that there is larger demand for the laboratory facilities and for help from the laboratory assistants just before assignments are due.

Late Homework

All problem sets are due in class of the day specified on the assignment. An assignment will be discounted 20% for each day late.


Your grade in 16.410 or 16.413 will be determined by the following approximate weighting (though the staff reserves the right to consider other factors such as participation in adjusting this formula):


Mid-term Quiz 25%
Final Exam 40%
Problem Sets 35%



Mid-term Quiz 20%
Final Exam 35%
Project 20%
Problem Sets 25%


However, you must do the problem sets to pass the course; a passing grade based on the other parts may be converted to a failing grade if you do not turn in all the problem sets, where turning in a problem set means including a serious attempt to complete each problem set.

  1. Homework: You are expected to do all the homework. While performance on exams is an indication of basic competence, performance on homework is your major opportunity to demonstrate outstanding achievement in 16.410-13. Mediocre homework performance will result in a lower grade, even if performance on exams is good. It is virtually impossible to get an A in 16.410-13 unless all homework assignments have been turned in. Missing more than a couple of the homework assignments may result in a failing grade for the semester, regardless of performance on exams, and in class participation. This applies to the weekly problem sets and to the final project.
  2. Participation in class: You are expected to participate actively in lecture discussions, and to read assigned material before class.

16.410-13 Policy on Collaborative Work

Most people learn more effectively when they study in small groups and cooperate in various other ways on homework. This can be particularly true in programming assignments, where working with a partner often helps to avoid careless errors. We are very much in favor of this kind of cooperation, so long as all participants actively involve themselves in all aspects of the work - not just split up the assignment and each do only a fraction.

We are structuring the work this term into two types: problem sets and, for 16.413 students, the final project. Please abide by the following guidelines with regard to these different types of work. Problem sets are designed to reinforce key concepts. These should be completed by each student individually, though seeking tutoring help from Graduate Graders or other staff is perfectly appropriate. The 16.413 project is designed to be a larger scale activity, in which group activity is often a key component. For these projects, we encourage you to work with one other person. When you turn in your project, you must identify with whom you worked. We expect, however, that you are involved in all aspects of the project. We will provide further guidelines regarding the 16.413 project later in the semester.

When you hand in any material with your name on it, we assume that you are certifying that this is your work and that you were involved in all aspects of it. You are expected to write your own solutions and your own code. Do not copy any material from another class member.

Here is an example scenario of how a good collaboration might work:

Both (all) of you sit down with pencil and paper and together plan how you're going to solve things. You go together to a cluster and sit at adjacent machines. When one of you has a problem, the others look over your shoulder. You check after each problem to make sure that the others are all caught up. But in each case you write your own solution, seeking help from the others when you have difficulties. On the write up, each of you lists the names of all of your collaborators.

Not listing the name of a collaborator will be deemed cheating. Similarly, remember that copying another person's work and representing it as one's own work is a serious academic offense and will be treated as such.

In general, we strongly encourage you to work as a group. It's a very effective way of catching conceptual and other errors, and of refining one's thinking and understanding.

See the discussion of the use of "bibles" below for additional information on the use of materials in completing problem sets and projects.

The Use of "Bibles" is Strictly Prohibited

We prohibit the use of bibles in the course. It is very useful for students to see problems that have been offered in the past, along with their solutions. To this end we have provided sample problem sets, exams, and projects on the Open Courseware pages of 16.410 and 16.413.

In addition, we will provide practice exams and solutions in class. However, students who indiscriminately use course "bibles" can fall into the trap of copying solutions, without developing the skills needed to solve the problems from scratch.

Using Your Own Computer

If you want to use your own computer, there are implementations of Java® for a wide range of platforms. See the lecture notes section for sites where this software may be downloaded.

The problem sets and project are all implemented in Java®, which is a platform independent language, allowing you to move between machines.


16.410 and 16.413 are time-consuming; but the assignments are not intended to require excessive amounts of time, and we will carefully track the classes level of effort throughout the semester. Note that the focus of this course is on the algorithms underlying autonomous systems. To ground your understanding, it is important that you implement some of these algorithms; nevertheless, this is not a programming course, it is expected that you come into this course as a competent programmer. Of course, the level of programming proficiency in the course will vary widely, and many with less proficiency have done well in the course in the past. However, if you do not have a strong proficiency in programming, you should expect to devote significant additional time, particularly at the beginning of the course, developing your proficiency. Spending enormous amounts of time on 16.410-13 is often the result of simply not asking for help when you need it. It is also possible to spend an excessive amount of time programming. This is often the result of failing to prepare properly, i.e., not developing sufficient competence with the programming language, development and debugging tools, not reading the assigned text an exercises, understanding the distributed code, developing plans to solve the questions, etc.

In addition, please be aware that prolonged computer usage combined with poor posture or improper typing habits can result in conditions such as repetitive strain injury. Remember to take frequent short breaks and to consult the medical department for more information.