Estoy tratando de simular un elevador, como siempre comencé de manera muy simple tomando solo un pedido a la vez, luego agregué memoria al elevador en forma de colas para que los pisos se desplacen en el orden en que fueron presionados, que obviamente no es el mejor enfoque.
Así que en este momento estoy usando una lógica muy simple y "miope" que es, para el piso actual, encuentre el piso más cercano a mí y configúrelo como mi próximo destino y repita hasta que no haya más pisos en la lista.
Pero esto no siempre funciona, por ejemplo, el elevador estaba en el 3er piso de un edificio de 5 pisos y recibió órdenes 4,5,2, el camino más corto sería 2-> 4-> 5 que cuesta 4 pisos pero usando esta lógica 4-> 5-> 2 que cuesta 5 tiene la misma posibilidad de ser elegido, dependiendo del código.
¿Cómo encuentro el camino más corto y hago que el ascensor sea más eficiente?
fuente
Respuestas:
"Eficiencia" no es la característica más importante, lo más importante es asegurarse de que se siga cada orden, que no haya hambre. Si alguien presiona 100 y la gente sigue presionando 1 y 2, puede ser eficiente continuar entre esos pisos, pero sería bueno visitar 100 en algún momento.
Yo creo (por observación personal cuando yo estaba interesado en averiguar) que la mayoría de ellos lo hacen:
Tenga en cuenta que muchos ascensores tienen botones "Quiero subir" y "Quiero bajar" al lado de las puertas en lugar de un solo botón. El algoritmo solo necesita un pequeño cambio: en 2, si el único botón presionado para ese piso es uno de los botones al lado de la puerta, solo deténgase y abra las puertas si vamos en esa dirección. Posiblemente mantenga presionado el botón si las puertas se abren debido a un botón presionado dentro del elevador y está yendo en la dirección incorrecta.
Nunca tiene que descubrir un camino completo , solo en qué dirección ir a continuación.
fuente
La otra respuesta da correctamente el algoritmo de ascensor estándar, que básicamente es "seguir en la misma dirección el mayor tiempo posible y hacer todas las paradas necesarias en el camino".
Hay otros algoritmos de ascensor. Por ejemplo, considere un edificio de apartamentos donde los apartamentos se vuelven más caros a medida que sube. Los propietarios del edificio pueden optar por modificar el algoritmo del ascensor para "ir en la misma dirección el mayor tiempo posible pero solo detenerse en el camino hacia abajo". De esa manera, si tiene personas en el elevador que están en el lobby y van a 2, 5 y 10, el elevador pasa a 10, luego a 5, luego a 2, y deja a las personas en orden de cuánto renta pagan. Pero, por supuesto, cuando las personas de 10 se van su departamento, con mayor frecuencia tendrán que esperar más para llegar al lobby.
Si está buscando una solución eficiente, elabore una métrica de costo e implemente varios algoritmos diferentes y ejecute simulaciones. Recuerde medir no solo el costo promedio, sino también las métricas, como el tiempo más largo que tarda una solicitud en ser atendida. La optimización para promedios bajos a veces puede desestimular el peor de los casos, que es malo.
fuente
Tenga en cuenta que los ascensores utilizan los mismos algoritmos de programación que algunos controladores de disco duro. El algoritmo SCAN estándar incluso se conoce como algoritmo de ascensor . Creo que en la práctica el algoritmo LOOK es más común, ya que es un poco más eficiente que SCAN.
fuente