it-swarm.com.de

Welcher Algorithmus wird von Aufzügen verwendet, um den kürzesten Weg zu Bodenbestellungen zu finden?

Ich versuche, einen Aufzug zu simulieren, da ich wie immer sehr einfach angefangen habe, indem ich jeweils nur eine Bestellung entgegengenommen und dann dem Aufzug Speicher in Form von Warteschlangen hinzugefügt habe, sodass die Stockwerke in der Reihenfolge zurückgelegt werden, in der sie gedrückt wurden. Das ist offensichtlich nicht der beste Ansatz.

Im Moment verwende ich also eine sehr einfache und "kurzsichtige" Logik: Finden Sie für die aktuelle Etage die Etage, die mir am nächsten liegt, und legen Sie sie als nächstes Ziel und Schleife fest, bis keine Etagen mehr in der Liste sind.

Dies funktioniert jedoch nicht immer, zum Beispiel befand sich der Aufzug im 3. Stock eines 5-stöckigen Gebäudes und erhielt Aufträge 4,5,2. Der kürzeste Weg wäre 2-> 4-> 5, was 4 Stockwerke kostet, aber diese Logik verwendet 4-> 5-> 2, was 5 kostet, hat je nach Code die gleiche Chance, ausgewählt zu werden.

Wie finde ich den kürzesten Weg und mache den Aufzug effizienter?

31
Raed Tabani

"Effizienz" ist nicht das wichtigste Merkmal, das wichtigste ist sicherzustellen, dass jeder Befehl befolgt wird, dass es keinen Hunger gibt. Wenn jemand 100 drückt und die Leute weiterhin 1 und 2 drücken, kann es effizient sein, zwischen diesen Stockwerken zu wechseln, aber es wäre schön, wenn 100 irgendwann besucht würden.

Ich denke (aus persönlicher Beobachtung, als ich daran interessiert war herauszufinden), dass die meisten von ihnen:

  1. Gehen Sie in Richtung des ersten gedrückten Knopfes und verfolgen Sie, in welche Richtung wir gehen
  2. Wenn ein Boden erreicht ist und dieser Knopf gedrückt wurde, halten Sie an und öffnen Sie die Türen. Markieren Sie die Knöpfe für diesen Boden als nicht mehr gedrückt.
    • Wenn es noch mehr Stockwerke gibt, die wir besuchen müssen und die in die gleiche Richtung weisen, fahren Sie weiter in diese Richtung.
    • Wenn nicht und es gibt noch Stockwerke, die wir besuchen müssen, bewegen Sie sich in diese Richtung.
    • Wenn nicht, sind wir fertig und beginnen bei 1, wenn eine Taste erneut gedrückt wird.

Beachten Sie, dass viele Aufzüge neben den Türen die Tasten "Ich möchte nach oben" und "Ich möchte nach unten gehen" anstelle eines einzelnen Knopfes haben. Der Algorithmus benötigt nur eine kleine Änderung: Wenn in 2 der einzige Knopf, der für diese Etage gedrückt wird, einer der Knöpfe neben der Tür ist, halten Sie die Türen nur an und öffnen Sie sie, wenn wir in diese Richtung gehen. Halten Sie den Knopf möglicherweise gedrückt, wenn sich die Türen öffnen, weil ein Knopf im Aufzug gedrückt wurde und er in die falsche Richtung geht.

Sie müssen nie einen ganzen Pfad herausfinden, nur in welche Richtung Sie als nächstes gehen möchten.

34
RemcoGerlich

Die andere Antwort gibt den Standard-Aufzugsalgorithmus richtig an, der im Grunde lautet: "Fahren Sie so lange wie möglich in die gleiche Richtung und machen Sie jeden notwendigen Stopp auf dem Weg".

Es gibt andere Aufzugsalgorithmen. Stellen Sie sich zum Beispiel ein Wohnhaus vor, in dem Wohnungen mit dem Aufstieg teurer werden. Die Eigentümer des Gebäudes könnten den Aufzugsalgorithmus so ändern, dass er "so lange wie möglich in die gleiche Richtung fährt, aber nur auf dem Weg nach unten anhält". Wenn Sie also Personen im Aufzug haben, die sich in der Lobby befinden und zu 2, 5 und 10 gehen, geht der Aufzug zu 10, dann zu 5, dann zu 2 und bringt die Leute in der Reihenfolge ihrer Miete ab. Aber wenn die Leute auf 10 verlassen ihre Wohnung, müssen sie natürlich öfter länger warten, um in die Lobby zu gelangen.

Wenn Sie nach einer effizienten Lösung suchen, erstellen Sie eine Kostenmetrik, implementieren Sie eine Reihe verschiedener Algorithmen und führen Sie Simulationen durch. Denken Sie daran, nicht nur die durchschnittlichen Kosten zu messen, sondern auch Kennzahlen wie die längste, die eine Anfrage für die Bearbeitung benötigt. Die Optimierung für niedrige Durchschnittswerte kann manchmal den schlimmsten Fall, der schlecht ist, deoptimieren.

15
Eric Lippert

Beachten Sie, dass Aufzüge dieselben Planungsalgorithmen verwenden wie einige Festplattencontroller. Der Standard-SCAN-Algorithmus ist sogar als Aufzugsalgorithmus bekannt. Ich denke, in der Praxis ist der Algorithmus LOOK häufiger, da er etwas effizienter als SCAN ist.

10
gardenhead

Diese Antwort handelt von einem fortgeschritteneren Zielsteuerungssystem . In einem Gebäude mit mehreren Aufzügen geben Personen an, in welche Etage sie gehen möchten, und das System weist ihnen einen Aufzug zu.

Die Idee ist ziemlich einfach, theoretisch wissen Sie, wohin jeder und jeder Aufzug fährt. So können Sie für jeden Aufzug berechnen, wann Ihre voraussichtliche Ankunftszeit ist und wie stark sie die anderen verlangsamt. Wählen Sie gierig den schnellsten Aufzug.

Dies unterliegt Einschränkungen, z. B. Gruppen, die die Taste nur einmal drücken, und Personen, die die Taste mehrmals drücken.

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

2
fejfo