Red de conocimiento informático - Material del sitio web - Cómo aplicar varios algoritmos en el despacho real de ascensores

Cómo aplicar varios algoritmos en el despacho real de ascensores

Descripción Supongamos que el edificio tiene 31 pisos. El tiempo que tarda un ascensor en pasar cada piso (ya sea hacia arriba o hacia abajo) es de 4 segundos. Es decir, si el ascensor va del piso 1 al piso 31 sin parar, tardará (31-1)*4=120 segundos. El ascensor se detiene durante 10 segundos a la vez, por lo que si el ascensor se detiene una vez por piso, tardará 30*4 29*10=410 segundos. Al mismo tiempo, el empleado tarda 20 segundos en subir al siguiente piso, por lo que tarda 30*20=600 segundos en ir del primer piso al 31. Evidentemente, esta no es una buena idea. Por lo tanto, muchos empleados dependen de los ascensores para llegar a sus oficinas. Ahora, necesitamos diseñar una solución cuyo objetivo sea acortar al máximo el tiempo que tarda el último empleado en llegar a la oficina (es decir, no hay garantía de que cada empleado pueda llegar a su oficina lo más rápido posible). . Por ejemplo, si un empleado quiere llegar a los pisos 4, 5 y 10, el ascensor se detendrá en los pisos 4 y 10. Dado que el ascensor llega al cuarto piso en el segundo 12 y se detiene durante 10 segundos, le toma 3*4 10 6*4=46 segundos llegar al décimo piso. Según este plan, los empleados del cuarto piso necesitarán 12 segundos, los empleados del quinto piso necesitarán 12 · 20 = 32 segundos y los empleados del décimo piso necesitarán 46 segundos. Por lo tanto, el último empleado tarda 46 segundos en llegar a la oficina. Esta es una gran solución para todos.

Implementación La siguiente es una introducción detallada al método específico de mi implementación. Aunque me tomó casi 2 días, no es muy complicado. Aquí me baso en el principio de introducir nuevas ideas. eche un vistazo:

Definiremos una clase llamada Case para almacenar algunos datos que se probarán y luego definiremos una clase llamada CaseUtil para implementar nuestra solución.

En primer lugar, déjame hablar de ideas específicas: aquí solo considero el programa ascendente (en realidad es el mismo de arriba a abajo, hay que pensarlo). Por ejemplo, supongamos que el piso actual es 29 30 31,3. Entonces, ¿qué hacemos?

En primer lugar, en cualquier caso, supongamos que el tiempo de llegada de la última capa, es decir, la capa 31, es (31-1) * 4 (stopNums-1) * 10. Cabe señalar que aquí para simplificar seguiremos los datos basados ​​en el análisis, 4 en realidad representa el tiempo que tarda el ascensor en pasar por cada piso, mientras que 10 representa el tiempo que tarda el ascensor en detenerse en cada piso. ¿Qué es stopNums arriba? Este es el número de paradas cuando el ascensor llega al piso 31, menos 1, que es el número de paradas a partir del piso 31. Es muy probable que la persona que llegue al último nivel sea la última en llegar. Según este ejemplo, el ejemplo anterior se puede ver fácilmente. Simplemente deténgase 2 veces en 28 y 31. Finalmente quienes llegan al suelo son las personas del piso 30. Por supuesto, en el ejemplo de ahora, en realidad es diferente porque los valores específicos son diferentes. Así que aquí utilicé una idea aproximada y está muy cerca de nuestra solución óptima, lo que también me inspiró. Aunque el último nivel no es necesariamente el último lugar, está lo suficientemente cerca y el tiempo invertido solo está relacionado con una variable stopNums, es decir, se puede concluir que:

Ascensor Cuantas menos paradas, menos tiempo que se tarda en llegar al último nivel, y de igual forma, menos tiempo se tarda en llegar al tiempo óptimo.

Suponiendo que tenemos una manera de calcular la mejor solución de parada en función del número actual de paradas, ¿cómo podemos obtener la mejor solución real? El siguiente fragmento de código logra nuestro objetivo muy bien.