The goal of this project is to implement an agent-based controller for an elevator. You should use the elevator simulator code posted on the course web site as a starting point, which defines the dynamics (e.g. acceleration between floors, delay while offloading passengers, etc.), though you are allowed to re-write in another language of your choice. You might want to vary the number of floors, cars, or the arrival rate of passengers.
You should implement and compare two controllers. One should be an optimized controller based on some decision-making method we talked about in class (e.g. knowledge-based, cooperative, utility-based, etc.). You should be able to justify and explain why your implementation can be called an "intelligent agent" (e.g. not just a bunch of arbitrary if-then-else code). The second controller could be any default controller (policy) for comparison purposes. In fact, I encourage you to implement this one first, by simply filling in the decide() function in Car.java. (to get the car to go a given floor i, just set goal=i. but which one...)
You should do a formal evaluation of the two controllers, using some well-defined experimental conditions. How you decide to test you algorithms is up to you (since different people might choose to look at different issues, such as how performance scales up with varying traffic loads between certain floors, or number of elevators, etc.). But you should make an effort to report some statistics (like average wait time) that give insight to how well your algorithms works.
What you should turn in: a written report, with a hard-copy of your code and experiemental results. Ideally, the report will be in conference-paper format, with an Intro that describes the problem and how agents can solve it, description of specific Methods used, Results, and a Discussion in which you interpret your results and comment on strengths and weaknesses of your chosen approach, and any other insights you gained.