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?
la source
Réponses:
"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 le font:
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 à trouver un chemin complet , juste dans quelle direction aller ensuite.
la source
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 chaque arrêt nécessaire 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 personnes sur 10 quittent leur appartement, elles devront plus souvent attendre plus longtemps pour se rendre dans le 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 également 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.
la source
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 d' algorithme d'ascenseur . Je pense qu'en pratique, l' algorithme LOOK est plus courant, car il est légèrement plus efficace que SCAN.
la source