Elevator Simulation

Purpose

For this project, our goal was to simulate an elevator using a finite state machine and to implement a graphical user interface to display the elevator. We were also given three different elevator configurations and tasked with determining which of the three was optimal in terms of efficiency and passenger satisfaction. 

Team Information

Joshua Tang: Team lead, owned design and implementation of Building, Floor, and Passengers

Ethan Park: Owned design and implementation of ElevatorSimController and CallManager

Thomas (Zhiyuan) Li: Owned design and implementation of ElevatorSimulation (GUI) and Elevator

Planning

This program will be implemented with the MVC design pattern and consists of 7 different classes each representing a part of the elevator.


Initial

Passing basic JUnit tests

Implemented Finite State Machine (FSM), planning GUI

Beta

Passing all JUnit tests

Restructured project, moved methods to appropriate classes

Final (Video Demonstration)

GUI Finished

Refactored all code to reduce method calls

Analysis/Summary 

When looking at a combination of the average wait time and number of passenger give-ups, we determined that Elevator Configuration 3 was the optimal solution. It had by far the fewest number of give ups and was faster on average than Configuration 1 and Configuration 2. 

With this project, I learned the importance of using collaboration tools such as Github to work in a group project and how seemingly complex projects can be drastically simplified by splitting it into smaller sections that each group member is able to work on separately. This was also my introduction to the FSM design paradigm which I have found to be extremely useful for implementing simulations which typically have a finite set of instructions.