GithubHelp home page GithubHelp logo

isaaccheng9 / lift-control-simulation Goto Github PK

View Code? Open in Web Editor NEW
4.0 0.0 1.0 2.84 MB

A desktop application to simulate lift control with a custom algorithm optimised to reduce distance travelled by the lift by 82.5%. Developed with Qt.

Python 100.00%
lift-control-simulation naive-algorithm lift lift-algorithm elevator optimisation destination destination-dispatch priority-queue python pyqt5 gui efficiency floors algorithm pyqt6 pyqt simulation

lift-control-simulation's Introduction

Lift Control Simulation

Code style: black

A desktop application developed in Python with PyQt6 to manage and simulate lift control under various configurations.

I optimised a custom algorithm for efficiency in distance travelled by the lift. This algorithm achieves up to 82.5% reduction in distance travelled compared to the naive algorithm benchmark, outperforming the 25% reduction claimed by the destination dispatch technique.

For more information about this, see the design document at docs/Lift Control - Design Document.pdf. It contains an explanation of the algorithm and performance analysis.

Visuals

Running the simulation

Installation

Operating System

Compatible with:

  • Windows
  • MacOS
  • Linux

Python Version

Python 3.7.0 or later is required for this software to run. It can be downloaded from Python's website here.

Running the Application

To run the application, you should follow the following steps:

  1. Clone this GitHub repository.
  2. Ensure that you're in the root directory: lift-control-simulation
  3. Install the required Python libraries: pip install -r requirements.txt
  4. Run the application with the command: python -m src.app

Usage

Configuration

The user is able to configure any number of floors, number of people, lift capacity, and the delay of intervals in the user interface.

Simulation

Their simulation can be visually displayed for up to five floors. For more than five floors, the application provides a non-visual display. In both cases, the user can run their simulation with either the naive mechanical lift (the benchmark) algorithm, or my improved lift algorithm.

The configured simulation remains the same until the user generates a new simulation, or changes the configuration settings. This enables the user to directly compare how the improved algorithm compares to the naive algorithm.

Logging

The application prints a temporary log of the simulations in the terminal. It records the simulation configuration, people generated, movements of the lift, people pending (if applicable), people in the lift, people delivered, and an overview of people after the simulation is complete.

lift-control-simulation's People

Contributors

isaaccheng9 avatar

Stargazers

 avatar  avatar  avatar

lift-control-simulation's Issues

Add option to perform a set of benchmark simulations

This would make the differences in performance between the naive algorithm and the improved algorithm clearer to the user. It would perform five sets of simulations using both algorithms, and then show the results in a new window. The new window would display:

  • A table of results
  • A graph to compare results visually (Matplotlib?)

Migrate GUI from PyQt5 to PyQt6

This will improve the handling of high DPI scaling, which is an increasingly common problem due to resolutions in laptops and monitors increasing.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.