Dieses Beispiel minimiert die zweidimensionale Ackley-Funktion mit PSO, prüft das Ausführungsgerät und zeichnet den Verlauf. Es verwendet EvoX 1.4.1 mit PyTorch, nicht die experimentelle 2.x-API. Die kleine Aufgabe erklärt den Workflow und ist kein GPU-Benchmark.

Kandidatenpartikel erkunden eine Suchlandschaft

Eine isolierte Umgebung vorbereiten

Verwenden Sie Python ab Version 3.10. Erstellen Sie eine virtuelle Umgebung und aktivieren Sie diese passend zur Shell.

python -m venv .venv

Unter macOS/Linux:

source .venv/bin/activate

Unter Windows PowerShell:

.\.venv\Scripts\Activate.ps1

Passende Pakete installieren

Wählen Sie im offiziellen PyTorch-Installer den Befehl für Ihr System und Ihre Hardware. CUDA benötigt einen unterstützten Treiber; EvoX allein garantiert keine GPU-Verfügbarkeit. Installieren Sie danach die festgelegte Version:

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

Ein vollständiges Experiment ausführen

Speichern Sie den Code als Python-Skript. Er wählt CUDA, sofern verfügbar, sonst CPU, zeigt die Wahl an und hält Zustand und Überwachung auf diesem Gerät. Ein fester Seed erleichtert Wiederholungen; Geräte- und Versionswechsel können Ergebnisse verändern.

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())

Ergebnisse verstehen und darstellen

PSO verwaltet Kandidaten, Ackley bewertet sie, StdWorkflow verbindet die Komponenten und EvalMonitor protokolliert den Verlauf. Kleinere Werte sind besser; das theoretische Optimum liegt bei null am Ursprung. Ein fester Endwert wird nicht garantiert.

Führen Sie den folgenden Befehl nach der Suche im selben Prozess aus. Visualisierungsabhängigkeiten sind enthalten. Die Abbildung stammt aus dem ursprünglichen Tutorial und ist keine garantierte Ausgabe dieses Seeds.

monitor.plot()

PSO convergence

Das Experiment gezielt erweitern

Ändern Sie Dimension, Populationsgröße oder Seed einzeln. Eigene Probleme liefern einen Zielfunktionswert pro Kandidat. Mehrzieloptimierung benötigt zusätzlich einen passenden Algorithmus, die richtige Ausgabeform und einen geeigneten Monitor.

Trennen Sie beim Messen Kompilierung und Aufwärmen vom regulären Lauf, synchronisieren Sie CUDA und vergleichen Sie gleiche Auswertungsbudgets. Kleine Aufgaben können auf CPU schneller sein. Untersuchen Sie Kompilierung erst nach einer funktionierenden Baseline.

Ressourcen und Danksagung

Das ursprüngliche Tutorial stammt von Boqing Xu, Xinmeng Yu, Bowen Zheng und Xinyao Li; Beichen Huang übernahm Redaktion und Veröffentlichung. Die Übersichtsgrafik bleibt unten erhalten.

EvoX overview

Nutzen Sie den versionierten Quellcode und die Dokumentation. Prüfen Sie die Zielversion, bevor Sie neuere APIs übernehmen.

Speichern Sie vor einer Erweiterung Paketversionen, Gerät, Seed und beste Fitness gemeinsam. Ändern Sie eine Einstellung und wiederholen Sie das gleiche Budget. Die EvoMO-Erklärung behandelt die zusätzlichen Auswahl- und Bewertungsfragen bei konkurrierenden Zielen.

← Zurück zu den NeuigkeitenNach oben ↑