Algorithme Multi-Objectif

Algorithme Multi-Objectif

Dans ce notebook, nous utiliserons l’algorithme Reference Vector Guided Evolutionary Algorithm (RVEA) pour trouver les solutions optimales du problème DTLZ2.

import time
import torch

from evox.algorithms import RVEA
from evox.metrics import igd
from evox.problems.numerical import DTLZ2
from evox.workflows import StdWorkflow, EvalMonitor

(Optionnel) Utiliser un GPU pour exécuter le code

Nous préférons souvent exécuter notre code sur un GPU pour une exécution plus rapide. Cependant, si un GPU n’est pas disponible, l’exécution sur un CPU est également acceptable.

# Use GPU first to run the code.
torch.set_default_device("cuda" if torch.cuda.is_available() else "cpu")
print(torch.get_default_device())

Exemple d’exécution : RVEA sur le problème DTLZ2

Le code suivant est utilisé pour configurer le problème DTLZ2 et l’algorithme RVEA. Plus d’informations sur le problème et l’algorithme sont disponibles dans la section correspondante de la documentation.

# Init the problem, algorithm and workflow.
prob = DTLZ2(m=3)
pf = prob.pf()
algo = RVEA(pop_size=100, n_objs=3, lb=-torch.zeros(12), ub=torch.ones(12))
monitor = EvalMonitor()
workflow = StdWorkflow(algo, prob, monitor)
compiled_step = torch.compile(workflow.step)

Une fois cette configuration en place, nous pouvons maintenant commencer à optimiser. Nous allons laisser l’algorithme multi-objectif optimiser ce problème pendant 100 étapes.

# Run the workflow for 100 steps
t = time.time()
workflow.init_step()
for i in range(100):
    compiled_step()
    fit = workflow.algorithm.fit
    fit = fit[~torch.isnan(fit).any(dim=1)]
    if i % 10 == 0:
        print(igd(fit, pf))
monitor.plot()