Skip to content

maciejbobrek/ElevatorSystem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 

Repository files navigation

Elevator System

Project is deployed here

Elevator System to aplikacja Webowa napisana w Angularze. System posiada 2 komponenty i 2 serwisy

  • elevator - odpowiada za model windy z ludźmi
  • elevator-without-people - model windy bez ludzi
  • elecator-data-service - obsługa komponentu elevator
  • elecator-real-data-service - obsługa komponentu elevator-without-people

Instalacja

In order to run software you need to first clone the repository

git clone https://github.com/maciejbobrek/ElevatorSystem.git

Then cd into elevator-system directory Run commands:

npm install
ng serve

Open http://localhost:4200/ on your desktop

Obsługa

Opis przycisków menu strony

  • Add Elevator - dodaje windę odopwiedniego typu na stronę
  • Step Simulation - wykonuje krok symulacji dla całego systemu
  • Start Simulation - zaczyna symulacje - step jest automatycznie wykonywany co 1,5 sekundy
  • Add Person - dodaje Person na losowym piętrze jadącego na losowe piętro ( Model 2)
  • Przycisk Góra/Dół na piętrze - w modelu 1 jest to przycisk działąjacy jak w zwykłej windzie, w modelu 2 dodaje nam osobe w kolejce na piętrzy i losuje piętro destynacji w odpowiednia strone

Modele

  • model windy realistycznej, patrzącej tylko i wyłącznie na przyciski kliknięte na zewnątrz i w środku windy.
export interface Pickup {
  currentFloor: number;
  up: boolean;
}

export interface ElevatorWithoutPeople {
    id: number;
    currentFloor: number;
    targetFloor: number;
    pickups: Array<Pickup>;
    target: Set<number>;
  }
  • model w którym do windy wsiadają ludzie i w momencie kliknięcia przycisku do jazdy w górę lub w dół losowane jest piętro docelowe. Winda tak jeździ aby zawieźć każdego na piętro docelowe.

export interface Person{
  id: number;
  waitingFloor: number;
  targetFloor: number;
}
export interface Elevator {
    id: number;
    currentFloor: number;
    targetFloor: number;
    queue: Array<Person>;
    inside: Array<Person>;
  }

Algorytm

1.Winda zaczyna się poruszać się w kierunku pierwszego wciśniętego przycisku. 2. Gdy dotrze do piętra, na którym ten przycisk został wciśnięty w tym samym kierunku którym jedzie winda odznacz ten przycisk.

  • Jeśli nadal są kolejne piętra, które musimy odwiedzić i znajdują się w tym samym kierunku, kontynuuj poruszanie się w tym kierunku.
  • Jeśli nie ma, ale są jeszcze piętra do odwiedzenia, zmień kierunek.
  • Jeśli nie ma więcej pięter do odwiedzenia, zacznij od początku, gdy zostanie ponownie wciśnięty przycisk.

Winda jeździ góra dół, i nigdy nie zawraca. Czyli jeśli pierwszy przycisk na zewnątrz lub w środku został kliknięty winda zaczyna jechać w górę lub w dół. Winda zawsze odwiedza najwyższe piętro docelowe i jedzie w dół na najniższe piętro. Winda nie bierze osób(w przypadku pierwszego modelu nie usuwa Requestu z piętra), jeśli jedzie w kierunku przeciwnym niż osoba chce jechać. Usuwa to problem zapychania windy przez osoby nie jadące w dobra stronę. Taki algorytm nigdy nie doprowadzi do styuacji czekania bardzo długo na windę. Winda po zakończeniu wszystkich zleceń zostaje na piętrze.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published