Guidelines for artificial intelligence programming assignments
David Leake

To avoid any confusion on the expectations for the programming in this course, here is a summary of some major points:

Separation of data and program/generality of code:

The assigned programs are designed to illustrate very general processes. The range of examples that they can handle will depend on the knowledge they have, but one of the goals of of the assignments is to make programs that would be easy to ``scale up'' by adding new knowledge without having to revise any of the other code. Because of that, programs should use processing methods as independent as possible from the specific knowledge they use.

For example, if an assignment asks for a program that can generate plans to control a robot arm moving blocks, the program should be able to handle any scenes with any number of blocks and any configuration, not only the example given to demonstrate its function. For an assignment involving writing a syntactic parser, the parser should be able to function correctly with any any grammar provided to it, not only with the grammar used as an example.

The more general code is seldom more difficult to write than special-purpose code, and is much more useful: One result of writing general programs is that at the end of the course, you will have a library of building blocks for AI systems. In AI research, the micro-programs have often been used that way, making it possible to build complete systems while concentrating effort on new research points.

If you have any questions about the level of generality expected on a particular assignment or part of an assignment, please don't hesitate to ask!

Documentation:

Code should be clearly documented, and revisions of existing code should also be documented.

Style:

Real AI applications generally involve large programs, sometimes written and maintained by numerous people. Consequently, programming style can be the difference between success and failure of an AI project, so style of programs will be a consideration in grading. It will not be a substantial component of the grading---what we stress are the ideas and algorithms---but some comments on the style will be made for your benefit. There are different ideas about what makes good programming style, and the purpose of the course is not to teach a particular style, so there will be considerable latitude for how the assignments are coded. However, some points may be awarded or subtracted for particularly good or bad style.

Collaborative work:

It is fine to discuss high-level aspects of algorithms or to help your colleagues track down specific bugs, provided all help is properly acknowledged. However, unless instructed otherwise (e.g., for a project to be submitted jointly), all code should be written completely independently. Before you do any assignment you should read the department statement on academic integrity, handed out on the first day of class and available from the class home page. If you are unsure about what is permissable, please ask us.

Jan 12, 2009