Ich versuche, einen Aufzug zu simulieren. Wie immer habe ich sehr einfach damit begonnen, immer nur eine Bestellung aufzunehmen und dann dem Aufzug Speicher in Form von Warteschlangen hinzuzufügen, damit die Stockwerke in der Reihenfolge zurückgelegt werden, in der sie gedrückt wurden. Das ist natürlich nicht der beste Ansatz.
Im Moment verwende ich eine sehr einfache und "kurzsichtige" Logik, bei der für die aktuelle Etage die nächstgelegene Etage ermittelt und als nächstes Ziel festgelegt wird und die Schleife ausgeführt wird, bis keine Etagen mehr in der Liste enthalten 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 unter Verwendung dieser Logik 4-> 5-> 2, was 5 kostet, hat die gleiche Chance, abhängig vom Code ausgewählt zu werden.
Wie finde ich den kürzesten Weg und mache den Aufzug effizienter?
quelle
Antworten:
"Effizienz" ist nicht das wichtigste Merkmal, das Wichtigste ist, sicherzustellen, dass jeder Bestellung gefolgt wird, dass es keinen Hunger gibt. Wenn jemand 100 drückt und die Leute weiterhin 1 und 2 drücken, ist es möglicherweise effizient, zwischen diesen Etagen zu wechseln, aber es wäre schön, wenn 100 irgendwann besucht würden.
Ich denke (nach persönlicher Beobachtung, als ich herausfinden wollte), dass die meisten von ihnen Folgendes tun:
Beachten Sie, dass in vielen Aufzügen neben den Türen anstelle einer einzigen Taste die Tasten "Ich möchte hochgehen" und "Ich möchte runtergehen" angezeigt werden. Der Algorithmus benötigt nur eine kleine Änderung: In 2, wenn der einzige Knopf, der für dieses Stockwerk gedrückt wird, einer der Knöpfe neben der Tür ist, stoppen und öffnen Sie die Türen nur, wenn wir in diese Richtung gehen. Halten Sie den Knopf möglicherweise gedrückt, wenn die Türen geöffnet sind, weil ein Knopf im Aufzug gedrückt wurde und er in die falsche Richtung zeigt.
Sie müssen nie einen ganzen Weg herausfinden , nur in welche Richtung Sie als nächstes gehen müssen.
quelle
Die andere Antwort gibt den Standardalgorithmus für Aufzüge korrekt wieder. Dieser lautet im Grunde genommen "so lange wie möglich in die gleiche Richtung fahren und auf dem Weg alle erforderlichen Stopps einlegen".
Es gibt andere Aufzugsalgorithmen. Stellen Sie sich zum Beispiel ein Wohnhaus vor, in dem Wohnungen mit der Zeit teurer werden. Die Eigentümer des Gebäudes könnten sich dafür entscheiden, den Aufzugalgorithmus so zu ändern, dass "so lange wie möglich in dieselbe Richtung gefahren wird, aber nur auf dem Weg nach unten angehalten wird". Auf diese Weise werden Personen im Aufzug, die sich in der Lobby befinden und zu 2, 5 und 10 gehen, zu 10, dann zu 5, dann zu 2 befördert und die Personen in der Reihenfolge ihrer Mietzahlung abgesetzt. Aber wenn die 10- Jährigen ihre Wohnung verlassen , müssen sie natürlich öfter länger warten, um in die Lobby zu gelangen.
Wenn Sie nach einer effizienten Lösung suchen, legen Sie eine Metrik für die Kosten fest, implementieren eine Reihe verschiedener Algorithmen und führen Sie Simulationen durch. Denken Sie daran, nicht nur die durchschnittlichen Kosten zu messen, sondern auch die Metriken, die für die Bearbeitung eines Auftrags am längsten dauern. Die Optimierung für niedrige Durchschnitte kann manchmal den schlechtesten Fall, der schlecht ist, deoptimieren.
quelle
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 LOOK- Algorithmus üblicher, da er etwas effizienter als SCAN ist.
quelle