Salve a tutti ragazzi vi spiego quale è il mio problema.
Ho la seguente funzione in python che funziona:
E' una funzione che fa delle prove random su una lista di task per ottimizzare la distanza tra un task e l'altro per trovare una soluzione migliore ovvero con distanza minore.
Il problema è che è molto lenta in quanto utilizza il deepcopy per creare una lista d'appoggio su cui confrontare.
Vorrei provare a fare un confronto diciamo sul posto e in caso non trovo una soluzione migliore allora riscambio i task e in teoria tornare a quella originale. Purtroppo ogni mio tentativo è stato vano in quanto il probgramma da risultati inconcludenti.
C'è un modo per fare la stessa cosa senza deepcopy?
Ho la seguente funzione in python che funziona:
Python:
def optimization(task_list, speed):
number_of_iterations = 500
#print("Original distance: ", compute_travel_distance(task_list, speed))
if len(task_list) < 2:
return task_list
for i in range(number_of_iterations):
task_list_old = copy.deepcopy(task_list)
total_distance = compute_travel_distance(task_list, speed)
index1 = random.randint(0, len(task_list) - 1)
index2 = random.randint(0, len(task_list) - 1)
while index1 == index2:
index1= random.randint(0, len(task_list) - 1)
index2= random.randint(0, len(task_list) - 1)
swap_and_prepare(task_list, index1, index2)
task_list = calculate_solution(task_list, travel_time_matrix)#creo la soluzione
result1 = verify_solution_time(task_list)
result2 = verify_solution_pd(task_list)
if result1 != None or result2 != None:
task_list = task_list_old
else:
new_total_distance = compute_travel_distance(task_list, speed)#vedo la distanza della nuova soluzione
if new_total_distance >= total_distance:
task_list = task_list_old
total_distance = compute_travel_distance(task_list, speed)
#print("Optimized distance:", total_distance)
return task_list
E' una funzione che fa delle prove random su una lista di task per ottimizzare la distanza tra un task e l'altro per trovare una soluzione migliore ovvero con distanza minore.
Il problema è che è molto lenta in quanto utilizza il deepcopy per creare una lista d'appoggio su cui confrontare.
Vorrei provare a fare un confronto diciamo sul posto e in caso non trovo una soluzione migliore allora riscambio i task e in teoria tornare a quella originale. Purtroppo ogni mio tentativo è stato vano in quanto il probgramma da risultati inconcludenti.
C'è un modo per fare la stessa cosa senza deepcopy?