Este tutorial minimiza Ackley em duas dimensões com PSO, verifica o dispositivo e apresenta o histórico. Destina-se ao EvoX 1.4.1 com PyTorch, não à API experimental 2.x. A tarefa pequena ensina o fluxo; não é um benchmark GPU.

Partículas candidatas exploram um espaço de busca

Preparar um ambiente isolado

Utilize Python 3.10 ou posterior. Crie um ambiente virtual e ative-o conforme a shell.

python -m venv .venv

Em macOS/Linux:

source .venv/bin/activate

Em Windows PowerShell:

.\.venv\Scripts\Activate.ps1

Instalar os pacotes adequados

Escolha o comando para o sistema e hardware no instalador oficial do PyTorch. CUDA exige um driver compatível; instalar EvoX não garante uma GPU disponível. Instale depois a versão fixada:

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

Executar um experimento completa

Salve o código como script Python. Seleciona CUDA quando disponível, ou CPU, apresenta a escolha e mantém estado e monitoramento nesse dispositivo. Uma semente fixa ajuda a repetir experimentos, mas os resultados podem variar entre dispositivos e versões.

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

Compreender e visualizar o resultado

PSO mantém candidatos, Ackley avalia-os, StdWorkflow liga os componentes e EvalMonitor registra o progresso. Valores menores são melhores; o ótimo teórico é zero na origem. O valor final é aleatório e não é garantido.

Execute o seguinte após a pesquisa no mesmo processo. As dependências de visualização estão incluídas. A imagem vem do tutorial original e não garante o resultado desta semente.

monitor.plot()

PSO convergence

Ampliar o experimento com critério

Altere dimensão, população ou semente individualmente. Um problema próprio deve retornar um valor por candidato. A otimização multiobjetivo exige também algoritmo, formato de saída e monitor compatíveis.

Separe compilação e aquecimento da execução estável, sincronize CUDA ao medir e compare orçamentos iguais. Tarefas pequenas podem ser mais rápidas em CPU. Estude a compilação após validar a referência.

Recursos e agradecimentos

O tutorial original foi escrito por Boqing Xu, Xinmeng Yu, Bowen Zheng e Xinyao Li, com edição e publicação de Beichen Huang. A figura de apresentação é mantida abaixo.

EvoX overview

Consulte o código da versão e a documentação. Verifique a versão antes de copiar uma API de material mais recente.

Antes de ampliar o exemplo, salve juntos versões dos pacotes, dispositivo, semente e melhor aptidão. Altere uma configuração e repita o mesmo orçamento. A explicação do EvoMO apresenta as decisões adicionais para objetivos concorrentes.

← Voltar para NotíciasVoltar ao topo ↑