web-dev-qa-db-fra.com

Quel algorithme est utilisé par les ascenseurs pour trouver le chemin le plus court pour les commandes de plancher de voyage?

J'essaie de simuler un ascenseur, comme toujours j'ai commencé très simplement en ne prenant qu'une seule commande à la fois, puis j'ai ajouté de la mémoire à l'ascenseur sous forme de files d'attente afin que les étages soient parcourus dans l'ordre dans lequel ils ont été pressés, ce qui n'est évidemment pas la meilleure approche.

Donc, pour le moment, j'utilise une logique très simple et à courte vue qui, pour l'étage actuel, trouve l'étage le plus proche de moi et le définit comme ma prochaine destination et boucle jusqu'à ce qu'il n'y ait plus d'étages dans la liste.

Mais cela ne fonctionne pas toujours, par exemple l'ascenseur était au 3ème étage d'un immeuble de 5 étages et a reçu des commandes 4,5,2 le chemin le plus court serait 2-> 4-> 5 qui coûte 4 étages mais en utilisant cette logique 4-> 5-> 2 qui coûte 5 a la même chance d'être choisi, selon le code.

Comment trouver le chemin le plus court et rendre l'ascenseur plus efficace?

31
Raed Tabani

"L'efficacité" n'est pas la caractéristique la plus importante, la plus importante est de s'assurer que chaque commande est suivie, qu'il n'y a pas de famine. Si quelqu'un appuie sur 100 et que les gens continuent d'appuyer sur 1 et 2, il peut être efficace de continuer entre ces étages, mais ce serait bien que 100 soient visités à un moment donné.

Je pense (d'après une observation personnelle lorsque j'étais intéressé à comprendre) que la plupart d'entre eux font:

  1. Commencez à aller dans la direction du premier bouton enfoncé, gardez une trace de la direction dans laquelle nous allons
  2. Lorsqu'un étage est atteint et que ce bouton a été enfoncé, arrêtez et ouvrez les portes, marquez les boutons de cet étage comme n'étant plus enfoncés.
    • S'il y a encore plus d'étages que nous devons visiter qui sont dans la même direction, continuez dans cette direction.
    • Si ce n'est pas le cas et qu'il y a encore des étages que nous devons visiter, allez dans cette direction.
    • Si ce n'est pas le cas, nous avons terminé et commencerons à 1 lorsqu'un bouton est à nouveau enfoncé.

Notez que de nombreux ascenseurs ont des boutons "Je veux monter" et "Je veux descendre" à côté des portes au lieu d'un seul bouton. L'algorithme n'a besoin que d'un petit changement: en 2, si le seul bouton pressé pour cet étage est l'un des boutons à côté de la porte, arrêtez et ouvrez les portes seulement si nous allons dans cette direction. Peut-être maintenez le bouton enfoncé si les portes s'ouvrent à cause d'un bouton enfoncé à l'intérieur de l'ascenseur et qu'il va dans la mauvaise direction.

Vous n'avez jamais à comprendre un chemin entier, juste dans quelle direction aller ensuite.

34
RemcoGerlich

L'autre réponse donne correctement l'algorithme d'ascenseur standard, qui est fondamentalement "continuez dans la même direction aussi longtemps que possible et faites tous les arrêts nécessaires en cours de route".

Il existe d'autres algorithmes d'ascenseur. Par exemple, considérons un immeuble d'appartements où les appartements deviennent plus chers à mesure que vous montez. Les propriétaires de l'immeuble pourraient choisir de modifier l'algorithme de l'ascenseur pour "aller dans la même direction le plus longtemps possible mais ne s'arrêter qu'en descendant". De cette façon, si vous avez des personnes dans l'ascenseur qui sont dans le hall et vont au 2, 5 et 10, l'ascenseur passe à 10, puis 5, puis 2, déposant les gens par ordre de loyer. Mais bien sûr, lorsque les gens sur 10 quittent leur appartement, ils devront plus souvent attendre plus longtemps pour se rendre au hall.

Si vous recherchez une solution efficace, proposez une mesure du coût et implémentez un ensemble d'algorithmes différents, puis exécutez des simulations. N'oubliez pas de mesurer non seulement le coût moyen, mais aussi les mesures comme la plus longue demande de traitement d'une demande. L'optimisation pour des moyennes faibles peut parfois désoptimiser le pire des cas, ce qui est mauvais.

15
Eric Lippert

Notez que les ascenseurs utilisent les mêmes algorithmes de planification que certains contrôleurs de disque dur. L'algorithme SCAN standard est même connu sous le nom de algorithme d'ascenseur . Je pense que dans la pratique, l'algorithme LOOK est plus courant, car il est légèrement plus efficace que SCAN.

10
gardenhead

Cette réponse concerne un système plus avancé système de contrôle de destination . Dans un immeuble avec plusieurs ascenseurs où les gens indiquent à quel étage ils veulent aller et le système leur affecte un ascenseur.

L'idée est assez simple, théoriquement, vous savez où tout le monde et chaque ascenseur vont. Ainsi, vous pouvez pour chaque ascenseur, calculer quand votre heure d'arrivée prévue est et combien cela ralentira les autres. Choisissez avidement l'ascenseur le plus rapide.

Il y a des limites à cela, comme les groupes n'appuyant sur le bouton qu'une seule fois et les personnes appuyant plusieurs fois sur le bouton.

https://www.peters-research.com/index.php/support/articles-and-papers/38-understanding-the-benefits-and-limitations-of-destination-dispatch

2
fejfo