Quale algoritmo viene utilizzato dagli ascensori per trovare il percorso più breve per percorrere gli ordini del piano?


27

Sto cercando di simulare un ascensore, come sempre ho iniziato in modo molto semplice prendendo solo un singolo ordine alla volta, quindi ho aggiunto memoria all'ascensore sotto forma di code in modo che i piani vengano spostati nell'ordine in cui sono stati premuti, che ovviamente non è l'approccio migliore.

Quindi al momento sto usando una logica molto semplice e "miope" che è, per il piano attuale trova il piano più vicino a me e impostalo come mia prossima destinazione e continua fino a quando non ci sono più piani nell'elenco.

Ma questo non sempre funziona, ad esempio l'ascensore si trovava al 3 ° piano di un edificio di 5 piani e riceveva ordini 4,5,2 il percorso più breve sarebbe 2-> 4-> 5 che costa 4 piani ma usando questa logica 4-> 5-> 2 che costa 5 ha la stessa possibilità di essere scelto, a seconda del codice.

Come posso trovare il percorso più breve e rendere l'ascensore più efficiente?



6
Vorrei invitarti nel mio ufficio e capire l'algoritmo che gli ascensori usano lì. Perché non posso assolutamente.
gnasher729,

1
@ gnasher729 Oh, posso anche se non ti conosco, perché è sicuramente lo stesso del mio ufficio: non fermarmi mai al piano in cui mi trovo, tranne quando sono già pieno di gente. Ho ragione?
Andres F.,

2
Non proprio. Ci sono quattro ascensori. Premi il pulsante, nulla si muove per molto tempo. Se uno si muove, si ferma proprio prima del tuo piano e attende per anni, finché non viene superato da un altro che passa oltre il tuo piano e poi scende. Sulla strada per terra si ferma almeno tre volte senza che nessuno entri.
gnasher729,

2
Gioco / sfida di programmazione pertinente: play.elevatorsaga.com
dwikle

Risposte:


30

L '"efficienza" non è la caratteristica più importante, la più importante è assicurarsi che ogni ordine sia seguito, che non vi sia fame. Se qualcuno preme 100 e le persone continuano a premere 1 e 2, potrebbe essere efficace andare avanti tra quei piani, ma sarebbe bello che 100 fosse visitato ad un certo punto.

Io credo (dall'osservazione personale quando ero interessato a capire) che la maggior parte di loro lo fanno:

  1. Inizia ad andare nella direzione del primo pulsante premuto, tieni traccia di quale direzione stiamo andando
  2. Quando viene raggiunto un piano e quel pulsante è stato premuto, fermarsi e aprire le porte, contrassegnare i pulsanti per questo piano come non più premuto.
    • Se ci sono ancora più piani che dobbiamo visitare che sono nella stessa direzione, continua ad andare in quella direzione .
    • In caso contrario e ci sono ancora piani che dobbiamo visitare, spostati in quella direzione.
    • In caso contrario, abbiamo terminato e partirà da 1 quando si preme di nuovo un pulsante.

Nota che molti ascensori hanno i pulsanti "Voglio salire" e "Voglio scendere" accanto alle porte invece di un solo pulsante. L'algoritmo necessita solo di una piccola modifica: in 2, se l'unico pulsante premuto per quel piano è uno dei pulsanti accanto alla porta, fermati e apri le porte solo se stiamo andando in quella direzione. Possibilmente tenere premuto il pulsante se le porte si aprono a causa di un pulsante premuto all'interno dell'ascensore e sta andando nella direzione sbagliata.

Non devi mai capire un intero percorso , solo in quale direzione andare avanti.


questo mi ha completamente ignorato, ero così concentrato sull'efficienza e ho dimenticato che anche altre cose sono importanti. non è ancora efficace dire da 2 a 100 e tornare a 1 semplicemente perché era nella stessa direzione ma almeno non assicura la fame. e, completamente fuori tema, forse è per questo che è comune trovare due ascensori con questa logica? il che mi fa chiedere se è più comune trovare gli ascensori che vanno nella direzione opposta in qualsiasi momento. comunque, sono ancora curioso di sapere come trovare l'intero percorso più breve, ma questo risponde alla mia domanda in modo molto accurato, grazie
Raed Tabani,

7
Si noti che una volta arrivati ​​in un edificio di 100 piani, in genere si avranno ascensori che servono solo una gamma specifica di piani (ad es. 0-19, 20-39, ...), nonché ascensori espressi che percorrono solo lunghe distanze (ad es. 0 a 50, da 0 a 100, da 50 a 100, ma non ci sono piani in mezzo), quindi potresti dover cambiare gli ascensori per arrivare a destinazione. Potresti anche avere più ascensori per albero che ovviamente non possono attraversarsi. Totalmente fuori tema: IIRC, c'era una domanda sull'efficienza di quei pulsanti freccia su e giù sul sito User Experience che ha reso la lettura molto affascinante.
Jörg W Mittag,

grazie, non lo sapevo. la suddivisione sembra essere una buona strategia se una parte non funziona e l'intero sistema non è in grado di distribuire il carico che è importante per l'usura meccanica. Mi chiedo se questi ascensori espressi siano dovuti alle carenze logiche dell'algoritmo Knuth's Elevator.
Rilasciato Tabani il

l'unica altra cosa che aggiungerei è che spesso hanno un pavimento 'domestico' a cui torneranno quando non in uso, questo può essere diverso per diversi ascensori e forse anche cambiare a seconda dell'ora del giorno e dei modelli di utilizzo previsti
jk .

Ho la tendenza a premere il pulsante su / giù in modo semi-casuale a prescindere dalla direzione in cui sto effettivamente viaggiando. Nel mio caso, ho sempre e solo una destinazione, quindi l'ascensore mi porta in quella posizione indipendentemente dal fatto che abbia scelto o giù. Sospetto che se dovessi premere il pulsante in basso, scegliere un piano sopra di me, quindi scegliere un piano sotto di me prima che l'ascensore inizi a muoversi, mi porterebbe al piano sotto di me piuttosto che al piano che ho spinto per primo. Potrei sbagliarmi, sarò sicuro di provarlo la prossima volta che mi troverò in un ascensore.
Ucenna,

13

L'altra risposta fornisce correttamente l'algoritmo dell'elevatore standard, che in pratica "continua ad andare nella stessa direzione il più a lungo possibile e fai ogni fermata necessaria lungo la strada".

Esistono altri algoritmi di ascensore. Ad esempio, considera un condominio in cui gli appartamenti diventano più costosi man mano che sali. I proprietari dell'edificio potrebbero scegliere di modificare l'algoritmo dell'ascensore per "andare nella stessa direzione il più a lungo possibile, ma fermarsi solo durante la discesa". In questo modo se hai persone nell'ascensore che si trovano nella hall e stanno andando a 2, 5 e 10, l'ascensore va a 10, quindi a 5, quindi a 2, lasciando cadere le persone in ordine di quanto affitto pagano. Ma ovviamente quando le persone su 10 lasciano il loro appartamento, dovranno più spesso aspettare più a lungo per raggiungere l'atrio.

Se stai cercando una soluzione efficiente, crea una metrica per i costi e implementa una serie di algoritmi diversi ed esegui simulazioni. Ricorda di misurare non solo il costo medio, ma anche le metriche come la più lunga che una richiesta richiede per essere gestita. L'ottimizzazione per medie basse a volte può sottrarre il caso peggiore, il che è negativo.


1
Sembra essere raro (altri alogirthms)
FindOutIslamNow

10

Si noti che gli elevatori utilizzano gli stessi algoritmi di pianificazione di alcuni controller del disco rigido. L'algoritmo SCAN standard è noto anche come algoritmo dell'elevatore . Penso che in pratica l' algoritmo LOOK sia più comune, in quanto leggermente più efficiente di SCAN.


Quando parli così certamente, hai esperienza professionale nell'implementazione del codice per ascensori? Soprattutto i più recenti sistemi di ascensori? Sono curioso di sapere se dopo l'11 settembre a New York ci sia stata una maggiore priorità nell'invio dei passeggeri rispetto a quelli in arrivo.
John Zabroski,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.