다목적 알고리즘

다목적 알고리즘

이 노트북에서는 참조 벡터 기반 진화 알고리즘(RVEA)을 사용하여 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

(선택 사항) GPU를 사용하여 코드 실행

더 빠른 실행을 위해 GPU에서 코드를 실행하는 것을 선호하는 경우가 많습니다. 그러나 GPU를 사용할 수 없는 경우 CPU에서 실행하는 것도 괜찮습니다.

# GPU를 우선 사용하여 코드 실행.
torch.set_default_device("cuda" if torch.cuda.is_available() else "cpu")
print(torch.get_default_device())

실행 예제: DTLZ2 문제에서의 RVEA

다음 코드는 DTLZ2 문제와 RVEA 알고리즘을 설정하는 데 사용됩니다. 문제와 알고리즘에 대한 자세한 정보는 문서의 해당 섹션에서 찾을 수 있습니다.

# 문제, 알고리즘 및 워크플로우 초기화.
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)

이 설정이 완료되면 최적화를 시작할 수 있습니다. 다목적 알고리즘이 이 문제에서 100단계 동안 최적화하도록 설정합니다.

# 워크플로우를 100단계 실행
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()