PROBLEMA [Python] Diminuire il numero di iterazioni

Pubblicità

ilfe98

Utente Èlite
Messaggi
3,083
Reazioni
1,317
Punteggio
134
Hello guys,
Ho bisogno di un aiuto. Consideriamo questa porzione di codice:
Python:
                microservices = self.problem.get_microservice_list()
                combinations = itertools.combinations(microservices, 2)
                for i in combinations:
                 #do something
Il problema è riassumibile qui. Se i microservizi sono molti (spesso anche 300) le combinazioni senza ripetizione tantissime.
Questo lo faccio per scambiare degli elementi all'interno di un dictionary(così almeno l'accesso è rapido). Il fine di questi scambi(che anche se in sequenza totalmente a caso) è trovare una soluzione ottima. Mi sono attenuto abbastanza all'algoritmo che prevedeva:

performing all possible
(i) allocations of sensors in fog nodes and (ii) swaps of microservice in fog nodes.

Il che all'interno della soluzione si poteva tradurre soltanto con una permutazione. Un primo pruning con le combinazioni è avvenuto, ma la crescita è ancora esponenziale.

Cosa potrei fare? Non riesco a trovare molte idee
 
Ciao ilfe, la prima cosa da capire è dove il programma spenda la maggior parte del suo tempo. Il modulo itertool è efficiente, per cui presumo il problema sta nel ciclo for, da cui in Python occorre stare lontani in casi come questo. Se esegui la stessa operazione su tutte le combinazione, hai provato a usare la funzione map() ?
 
Ciao ilfe, la prima cosa da capire è dove il programma spenda la maggior parte del suo tempo. Il modulo itertool è efficiente, per cui presumo il problema sta nel ciclo for, da cui in Python occorre stare lontani in casi come questo. Se esegui la stessa operazione su tutte le combinazione, hai provato a usare la funzione map() ?
Grazie mille per il consiglio, effettivamente non avevo usato la funzione map(). Non era lei la diretta interessata, ma la funzione di itertools starmap() è stata d'aiuto(non avrei mai pensato ci potesse essere tale funzione, ci sono davvero troppe librerie ?).
Sono riuscito a diminuire il tempo di esecuzione, dimezzandolo grazie a varie ottimizzazioni, ma con starmap ho guadagnato quasi 10s su quel for e 10 su un altro, non è affatto male...
Considerando la natura dell'algoritmo non posso sperar in meglio
 
Grazie mille per il consiglio, effettivamente non avevo usato la funzione map(). Non era lei la diretta interessata, ma la funzione di itertools starmap() è stata d'aiuto(non avrei mai pensato ci potesse essere tale funzione, ci sono davvero troppe librerie ?).
Sono riuscito a diminuire il tempo di esecuzione, dimezzandolo grazie a varie ottimizzazioni, ma con starmap ho guadagnato quasi 10s su quel for e 10 su un altro, non è affatto male...
Considerando la natura dell'algoritmo non posso sperar in meglio
Ricorda che Python e' un linguaggio nato per scrivere script di automazione, ed e' intrinsicamente lento (dovuto anche al fatto di essere interpretato), per lavori "pesanti" bisogna usare librerie di appoggio (che sono scritte in C)
 
Pubblicità
Pubblicità
Indietro
Top