Giter Site home page Giter Site logo

elevatorsystem's Introduction

ElevatorSystem

Repozytorium przedstawia zaimplemntowany system obsługi wind.
Samemu może działać jako symulator, jednak nie powinno być problemu z podłączeniem większego systemu.
Zostały zaimplementowane dwa algorytmy.
Pierszy z nich jest podstawowy - winda odwiedza wszystkie pięrta w kolejności zgłoszeń.
Powstał głównie w celach referencyjnych, aby było z czym porównać drugi algorytm.
Drugi algorytm odwiedza pięrta po kolei, a nie w kolejności zgłoszeń.
Jednak nie zatrzymuje się na danym piętrze, jeśli na nim oczekują tylko osoby,
które chcą jechać w przeciwnym kierunku, niż aktualnie jedzie winda.
W drugim algorytmie winda zmienia kierunek jazdy tak rzadko, jak to tylko możliwe.

Wyniki porównawcze:

Fifo
Test 1
Average waiting time: 2.691 Average driving time: 8.389
19.966 steps per passenger
Test 2
Average waiting time: 11.665 Average driving time: 67.888
1.161 steps per passenger
Test 3
Average waiting time: 10.887 Average driving time: 146.416
0.889 steps per passenger
Test 4
Average waiting time: 20.829 Average driving time: 81.465
20.162 steps per passenger
Test 5
Average waiting time: 742.991 Average driving time: 4986.225
12.189 steps per passenger
Test 6
Average waiting time: 404.662 Average driving time: 4961.959
11.48 steps per passenger
Test 7
Average waiting time: 1112.5448 Average driving time: 14769.8507
8.7959 steps per passenger
Test 8
Average waiting time: 741.0119 Average driving time: 25053.3585
7.4534 steps per passenger
Test 9
Average waiting time: 562.7718 Average driving time: 45986.8307
7.503 steps per passenger

Smarter
Test 1
Average waiting time: 4.198 Average driving time: 9.624
19.97 steps per passenger
Test 2
Average waiting time: 4.378 Average driving time: 16.065
1.033 steps per passenger
Test 3
Average waiting time: 14.69 Average driving time: 45.775
0.292 steps per passenger
Test 4
Average waiting time: 27.941 Average driving time: 81.452
20.226 steps per passenger
Test 5
Average waiting time: 133.408 Average driving time: 362.004
4.319 steps per passenger
Test 6
Average waiting time: 138.942 Average driving time: 162.855
0.719 steps per passenger
Test 7
Average waiting time: 70.8291 Average driving time: 292.9698
2.1801 steps per passenger
Test 8
Average waiting time: 228.5118 Average driving time: 371.5789
1.2506 steps per passenger
Test 9
Average waiting time: 95.7021 Average driving time: 204.9143
0.0979 steps per passenger

Każdy test zawierał 10 wind i miał następujące parametry:
Test 1: 20 pięter, 1000 pasażerów, maksymalne opóźnienie wejścia pasażera: 20000
Test 2: 20 pięter, 1000 pasażerów, maksymalne opóźnienie wejścia pasażera: 1000
Test 3: 20 pięter, 1000 pasażerów, maksymalne opóźnienie wejścia pasażera: 100
Test 4: 200 pięter, 1000 pasażerów, maksymalne opóźnienie wejścia pasażera: 20000
Test 5: 200 pięter, 1000 pasażerów, maksymalne opóźnienie wejścia pasażera: 1000
Test 6: 200 pięter, 1000 pasażerów, maksymalne opóźnienie wejścia pasażera: 100
Test 7: 200 pięter, 10000 pasażerów, maksymalne opóźnienie wejścia pasażera: 20000
Test 8: 200 pięter, 10000 pasażerów, maksymalne opóźnienie wejścia pasażera: 1000
Test 9: 200 pięter, 10000 pasażerów, maksymalne opóźnienie wejścia pasażera: 100

Czas średni nie pomija opóźnienia wejścia.
Dla każdego testu ziarno generatora pseudolosowego jest takie samo przy danym uruchomieniu programu.

Zaprojektowany system nie jest znacznie gorszy w normalnych warunkach,
jednak zyskuje znaczną przewagę wraz ze wzrostem natężenia pasażerów.

W celu kompilacji wszystkich plików należy wykonać polecenie
javac *.java
będąc w katalogu projektu.
Do tego wymagany jest zainstalowany kompilator języka java (a do uruchomienia maszyna wirtualna).
Kompilacji i testów dokonywano na wersji java 17 (openjdk 17.0.2 2022-01-18 LTS).

Podstawowym testem (który sprawdza, czy windy się zatrzymują tam gdzie powinny) jest test.txt,
który należy przekierować na standardowe wejście (i ręcznie sprawdzić, czy cele windy pokrywaja się z aktualnymi piętrami).
W celu uruchomienia i przekierowania standardowego wejścia należy wykonać polecenie:
java ConsoleElevatorSystem < test.txt

Aby uruchomić testy należy wykonać plik test2.sh (należy mu przedtem nadać prawa do wykonywania), który także wcześniej dokona rekompilacji wszystkich plików.
W celu ręcznego uruchomienia testów należy wpisać polecenie:
java ElevatorSystemTest

Została także napisana aplikacja konsolowa - w celu jej uruchomienia należy wpisać:
java ConsoleElevatorSystem
W pierszej linii na wejsciu oczekuje liczby wind. Musi być to liczba większa od zera i co najwyżej równa 16.
Obsługuje ona następujące polecenia:
step - wykonanie kroku symulacji
call <piętro wzywania> - wzywa konkretną windę do odebrania pasażera
pickup <piętro wzywania> - wzywa optymalną windę do odebrania pasażera, wypisuje jej identyfikator
update <piętro wzywania> - teleportuje windę na podane piętro
add destination <piętro docelowe> - każde windzie jechać na podane piętro
status - wypisuje informacje o położeniu i jeździe wind
exit - wychodzi z programu.

elevatorsystem's People

Contributors

pawel2000pl avatar

Watchers

 avatar  avatar

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.