Particle Swarm Optimization: a parallelized approach

Informazioni generali

Parallel Particle Swarm Optimization (PSO) è una nota tecnica di ottimizzazione.

In PSO, una particella è un’entità fondamentale caratterizzata da:

L’intero insieme di particelle forma uno “sciame”.

Ogni particella deve percepire le posizioni e le misure di performance associate delle particelle vicine. Questo permette a ogni particella di conoscere la posizione migliore tra le sue vicine ($z$) e la propria migliore prestazione ($y$) ottenuta.

Questo progetto implementa una versione di PSO che impiega un approccio “basato su distanza”. In particolare, ogni particella mantiene un numero fisso di vicini, che si regola dinamicamente in base alla posizione della particella nella regione di spazio.

Parametrizzazione

PSO prevede diversi parametri:

Ottimizzazione

L’algoritmo di PSO inizia con la preparazione di uno sciame di particelle, a cui vengono assegnate posizioni e velocità casuali.

Durante ogni iterazione, ogni particella aggiorna la propria velocità utilizzando l’equazione:

$$v' = w \cdot v + \phi_1 U_1 \cdot (y - x) + \phi_2 U_2 \cdot (z - x)$$

Qui:

Successivamente, ogni particella aggiorna la propria posizione utilizzando:

$$x' = x + v'$$

In caso di miglioramento delle prestazioni, la particella aggiorna il suo miglior punteggio personale ($y$) e potenzialmente il miglior punteggio globale ($z$).

Analisi dello stato dell’arte

Le implementazioni PSO esistenti si possono dividere in tre categorie:

  1. Algoritmi che modificano il comportamento di PSO introducendo nuove caratteristiche.
  2. Implementazioni di PSO focalizzate sulla risoluzione di specifici problemi del mondo reale.
  3. Implementazioni di PSO volti ad ottimizzare la velocità di esecuzione del runtime.

Il progetto esclude dall’analisi la seconda categoria di problemi in quanto queste implementazioni sono fortemente dipendenti dal problema che cercano di svolgere. La prima categoria, invece, è adatta all’analisi di benchmarking, ma spesso richiede modifiche al codice, con potenziali problemi. La terza categoria, volta all’ottimizzazione della velocità di esecuzione, è stata identificata come concorrente principale della nostra implementazione.

Rif. Anno Tipologia Codice Note
Kennedy, J. and Eberhart, R. 1995 Serial No -
toddguant 2019 Seriale 1
sousouho 2019 Seriale Si 1
kkentzo 2020 Seriale 1
fisherling 2020 Seriale Si 1
Antonio O.S. Moraes et al. 2014 MPI No -
Nadia Nedjah et al. 2017 MPI/MP No -
abhi4578 2019 MPI/MP,CUDA 1
LaSEEB 2020 OpenMP 2
pg443 2021 Seriale,OpenMP 1

Gli indici nelle note si riferiscono a:

  1. l’approccio fornisce solo l’implementazione del vicinato globale. Il confronto con queste metodologie non sarebbe veritiero, poiché queste implementazioni hanno un chiaro vantaggio nel tempo di esecuzione grazie a una topologia favorevole;
  2. l’approccio fornisce PSO con diverse versioni di neighborhood ma senza un approccio basato sulla distanza. Dunque, le implicazioni sono le stesse del punto 1.

Parallelizzazione

Questo progetto si è concentrato sulla parallelizzazione utilizzando un approccio ibrido OpenMP-MPI. Introduce strategie di multiprocessing e di comunicazione efficiente per migliorare le prestazioni di PSO.

Versione seriale dell’algoritmo

Le fasi principali dell’algoritmo di PSO comprendono l’inizializzazione delle particelle, lo scambio di posizioni tra gli sciami, l’ordinamento delle particelle in base alla distanza e gli aggiornamenti di posizione e velocità. I primi tentativi di parallelizzazione con OpenMP hanno rivelato un overhead significativo per problemi di piccole dimensioni, con conseguenti tempi di esecuzione più lenti rispetto al modello a singolo thread.

Versione parallela dell’algoritmo

Il carico di lavoro è stato distribuito tra più processi utilizzando la libreria MPI e il multiprocessing è stato utilizzato tramite OpenMP per vari jobs a memoria condivisa.

Architettura

È stato implementato un modello di calcolo parallelo, il modello “all-to-all”, utilizzando MPI_Allgather per scambiare messaggi individuali tra tutti i processi.

Schema di comunicazione

Messaggio

Per facilitare la comunicazione tra processi, è stato introdotto un tipo di dati MPI personalizzato denominato “broadcastMessage_t”, che contiene informazioni quali timestamp, numero di iterazione, identificatore di particelle, rank del mittente e dati della soluzione.

Schema di comunicazione

La comunicazione tra i processi è sincrona. Ogni processo gestisce una parte delle particelle e le informazioni sulle particelle vengono scambiate utilizzando MPI_Allgather. L’ordinamento delle particelle permette a ciascun processo di identificare i vicini più prossimi delle singole particelle.

Benchmarking

È stata condotta un’analisi di benchmarking completa variando il numero di thread, processi e modelli di allocazione dei processi PBS. La configurazione primaria comprendeva una dimensione del problema di 50, 5000 particelle, 500 iterazioni e altri parametri rilevanti.

I risultati hanno rivelato che per la parallelizzazione dei thread, l’overhead introdotto da OpenMP spesso supera i vantaggi in termini di prestazioni. La parallelizzazione dei thread è risultata inadeguata per tutti i problemi a causa del comportamento variabile dei diversi sistemi.

I benchmark si sono concentrati principalmente sulla soluzione multiprocesso. I risultati hanno mostrato che con l’aumentare del numero di processi aumenta anche il tempo necessario per la comunicazione. Lo scenario ottimale è stato osservato quando si è utilizzato un numero limitato di processi, poiché l’overhead associato alla comunicazione MPI è diventato significativo con un numero maggiore di processi.

Discussione finale

È stato implementato con successo un algoritmo ibrido OpenMP-MPI per la risoluzione di problemi complessi di ottimizzazione continua, dotato di una robusta pipeline DevOps.

La parallelizzazione dei thread si è rivelata inefficace per PSO, portando spesso a un degrado delle prestazioni a causa dell’eccessivo overhead.

Collaboratori