es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Algoritmo de asignación de ascensores fuera de línea.

Dado un edificio (conjunto de ascensores con estadísticas como piso por segundo, tiempo para abrir/cerrar puertas, tiempo para empezar/parar de moverse) y un conjunto de llamadas (tiempo recibido, piso de origen, piso de destino), ¿cómo determinaría la forma óptima de asignar cada llamada a un ascensor para reducir el tiempo total de espera al mínimo?

Intenté asignar una sola llamada al ascensor “más rápido” y, después de asignar esa llamada, revisar las próximas llamadas que se “pueden” asignar junto con la primera llamada. Mi problema es que no sé qué llamadas se completaron (para eliminarlas) y cómo calcular la posición y estado actual de mi ascensor.

def Allocate(st1 , st2 , st3 ):
building = open_json_file(st1)
all_calls = open_csv_file(st2)
my_calls = MyCalls() #lista de llamadas
for x in all_calls:
temp_call = MyCall(x[1], x[2], x[3])
my_calls + temp_call
elv_list = building._elevlist
for call in my_calls.list_of_calls: #inicio de asignación
if call.allocatedto == -1:
t = 10000000000
elev_id = -1
for elevator in elv_list:
if len(elevator.get_calls()) == 0:
time_for_call = calctime(call.get_src(), call.get_dest(), elevator)
else:
time_for_call = calctime(call.get_src(), call.get_dest(), elevator) * len(elevator.get_calls())
if t > time_for_call:
t = time_for_call
elev_id = elevator._id
call.allocatedto = elev_id
curr_elev = elv_list[elev_id]
curr_elev + call
temp_call_index = my_calls.get_next_index(call)
if temp_call_index != -1 and temp_call_index < len(my_calls.list_of_calls):
temp_call = my_calls.list_of_calls[temp_call_index]
time = calctime(call.get_src(), call.get_dest(), curr_elev)
dir = call.get_dir()
while temp_call.time_recieved < call.time_recieved + time and temp_call_index < len(
my_calls.list_of_calls):
if dir == 1:
if temp_call.get_dir() == 1 and temp_call.allocatedto == -1:
if isinpath(call, temp_call, curr_elev):
temp_call.allocatedto = elev_id
curr_elev + temp_call
if dir == -1:
if temp_call.get_dir() == -1 and temp_call.allocatedto == -1:
if isinpath(call, temp_call, curr_elev):
temp_call.allocatedto = elev_id
curr_elev + temp_call
temp_call = my_calls.list_of_calls[temp_call_index]
temp_call_index += 1

Tags:  ,

Answer

  1. Avatar for davy.ai
    save_json_file(st3, building)
    

    Para determinar la mejor manera de asignar cada llamada a un ascensor con el fin de reducir al mínimo el tiempo de espera total, se puede utilizar el siguiente algoritmo:

    1. Abrir el edificio (un conjunto de ascensores con estadísticas como piso por segundo, tiempo de abrir/cerrar puertas, tiempo de empezar/parar movimiento) y un conjunto de llamadas (tiempo recibido, piso de origen, piso de destino) de los archivos proporcionados.
    2. Crear una lista de llamadas a partir de los datos proporcionados.
    3. Iterar a través de la lista de llamadas y asignar cada llamada al ascensor más rápido.
    4. Calcular el tiempo necesario para que se complete la llamada y comprobar si hay otras llamadas que puedan asignarse al mismo ascensor.
    5. Si hay otras llamadas que puedan asignarse al mismo ascensor, añadirlas a la lista de llamadas del ascensor.
    6. Repetir los pasos 3-5 hasta que se hayan asignado todas las llamadas.
    7. Guardar los datos actualizados del edificio en el archivo proporcionado.

Comments are closed.