Il tutorial minimizza Ackley in due dimensioni con PSO, verifica il dispositivo e visualizza la cronologia. È per EvoX 1.4.1 con PyTorch, non per l’API sperimentale 2.x. Il piccolo problema serve a capire il workflow, non a misurare le prestazioni GPU.

Particelle candidate esplorano un paesaggio di ricerca

Preparare un ambiente isolato

Utilizzi Python 3.10 o successivo. Crei un ambiente virtuale e lo attivi con il comando adatto alla shell.

python -m venv .venv

Su macOS/Linux:

source .venv/bin/activate

Su Windows PowerShell:

.\.venv\Scripts\Activate.ps1

Installare i pacchetti corretti

Scelga il comando per sistema e hardware nell’installatore ufficiale PyTorch. CUDA richiede un driver supportato; installare EvoX non garantisce la disponibilità della GPU. Installi poi la versione indicata:

python -m pip install "evox[vis]==1.4.1"

Eseguire un esperimento completo

Salvi il codice come script Python. Se disponibile seleziona CUDA, altrimenti CPU, mostra la scelta e mantiene stato e monitoraggio sul dispositivo. Un seme fisso aiuta a ripetere l’esperimento, ma dispositivi e versioni diversi possono produrre risultati diversi.

import torch
from evox.algorithms import PSO
from evox.problems.numerical import Ackley
from evox.workflows import StdWorkflow, EvalMonitor

torch.manual_seed(42)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
torch.set_default_device(device)

algorithm = PSO(
    pop_size=50,
    lb=-32 * torch.ones(2, device=device),
    ub=32 * torch.ones(2, device=device),
    device=device,
)
problem = Ackley()
monitor = EvalMonitor(device=device, history_device=device)
workflow = StdWorkflow(algorithm, problem, monitor)

workflow.init_step()
for _ in range(100):
    workflow.step()

print("Device:", device)
print("Best fitness:", monitor.get_best_fitness().item())

Comprendere e visualizzare il risultato

PSO mantiene i candidati, Ackley li valuta, StdWorkflow collega i componenti ed EvalMonitor registra i progressi. Valori inferiori sono migliori; l’ottimo teorico è zero nell’origine. Non è garantito un punteggio finale fisso.

Esegua il comando seguente dopo la ricerca nello stesso processo. Le dipendenze di visualizzazione sono incluse. L’immagine viene dal tutorial originale e non garantisce l’output di questo seme.

monitor.plot()

PSO convergence

Estendere l’esperimento con criterio

Modifichi una variabile alla volta: dimensione, popolazione o seme. Un problema personalizzato deve restituire un valore per candidato. Il multiobiettivo richiede anche algoritmo, forma dei risultati e monitor compatibili.

Per i tempi, separi compilazione e riscaldamento dall’esecuzione stabile, sincronizzi CUDA e confronti lo stesso budget di valutazioni. Piccoli compiti possono essere più veloci su CPU. Esamini la compilazione dopo aver verificato la baseline.

Risorse e ringraziamenti

Il tutorial originale è stato scritto da Boqing Xu, Xinmeng Yu, Bowen Zheng e Xinyao Li, e curato e pubblicato da Beichen Huang. La figura riepilogativa è mantenuta sotto.

EvoX overview

Per l’esempio usi il codice versionato; per approfondire, la documentazione. Verifichi la versione prima di copiare API più recenti.

Prima di estendere l’esempio, salvi insieme versioni dei pacchetti, dispositivo, seed e fitness migliore. Cambi una sola impostazione e ripeta lo stesso budget. La spiegazione di EvoMO introduce le ulteriori scelte per obiettivi in conflitto.

← Torna alle NotizieTorna in alto ↑