EMI-Group/evomo
EMI-Group/evomo has 257 GitHub stars and 31 forks. Star changes are not measured yet. Last checked 2026-11-12 18:07 UTC. Last push 2026-11-06.
EvoMO is a GPU-accelerated library for evolutionary multiobjective optimization (EMO)
측정된 스타 증가
- in 24h
- 기록 수집 중
- in 7 days
- 기록 수집 중
- in 15 days
- 기록 수집 중
- in 1 month
- 기록 수집 중
서로 겹치는 기간의 순증가량이며 일별 합계가 아닙니다. 측정값이 없으면 비워 둡니다. 스타는 관심도를 나타내며 품질을 보장하지 않습니다.
README.md
Original🌟 EvoMO: Bridging Evolutionary Multiobjective Optimization and GPU Acceleration via Tensorization 🌟
Table of Contents
- Overview
- Key Features
- Installation Guide
- Examples
- Publications on EvoMO
- Community & Support
- Citing
- Contributors
Overview
EvoMO is a GPU-accelerated library for evolutionary multiobjective optimization (EMO) that leverages advanced tensorization techniques. By transforming key data structures and operations into tensor representations, EvoMO enables more efficient mathematical modeling and delivers significant performance improvements. Designed with scalability in mind, EvoMO can efficiently handle large populations and complex optimization tasks. Additionally, EvoMO includes MoRobtrol, a multiobjective robot control benchmark suite, providing a platform for testing tensorized EMO algorithms in real-world, black-box environments. EvoMO is a sister project of EvoX.
For more details, please refer to our Documentation / 文档.
[!NOTE] To use the JAX version of EvoMO, you can switch to the
v0.0.1-devbranch. This branch is fully compatible with EvoX version 0.9.0.
Key Features
💻 High-Performance Computing
🚀 General Tensorization Methodology
- EvoMO adopts a unified tensorization approach, restructuring EMO algorithms into tensor representations, enabling efficient GPU acceleration.
⚡ Ultra Performance
- Supports tensorized implementations of 57 multi-objective optimization algorithms, including NSGA-II, NSGA-III, MOEA/D, RVEA, and HypE, with 48 new algorithms added in v0.3.0, achieving up to 1113× speedup while preserving solution quality.
📈 Scalability
- Handles large populations, scaling to hundreds of thousands for complex optimization tasks, ensuring scalability for real-world applications.
📊 Benchmarking
🤖 MoRobtrol Benchmark
- Includes MoRobtrol, a multiobjective robot control benchmark, for testing tensorized EMO algorithms in challenging black-box environments.
🔧 Easy-to-Use Integration
📦 Standalone EvoMO Package
- EvoMO is now available as an independent repository, allowing users to easily access multiobjective optimization algorithms and benchmark problems via
import evomofor improved discoverability and usability.
Installation Guide
To install EvoMO, you need to install EvoX first.
- Install EvoX:
pip install evox
- Install EvoMO:
pip install evomo
For the latest development version, you can install from the source:
git clone https://github.com/EMI-Group/evomo.git
cd evomo
python -m pip install -e .
Examples
Numerical optimization problem
Solve the DTLZ2 problem using the TensorMOEA/D algorithm:
import time
import torch
from evox.metrics import igd
from evox.problems.numerical import DTLZ2
from evox.workflows import StdWorkflow
from evomo.algorithms import TensorMOEAD
if __name__ == "__main__":
torch.set_default_device("cuda" if torch.cuda.is_available() else "cpu")
algo = TensorMOEAD(pop_size=100, n_objs=3, lb=-torch.zeros(12), ub=torch.ones(12))
prob = DTLZ2(m=3)
pf = prob.pf()
workflow = StdWorkflow(algo, prob)
workflow.init_step()
jit_state_step = workflow.step
t = time.time()
for i in range(100):
print(i)
jit_state_step()
fit = workflow.algorithm.fit
fit = fit[~torch.any(torch.isnan(fit), dim=1)]
print(f"Generation {i + 1} IGD: {igd(fit, pf)}")
print(f"Total time: {time.time() - t} seconds")
Constrained multi-objective optimization
Solve the DOC1 constrained multi-objective problem using NSGA-II. A solution is feasible when all of its constraint-violation values are zero.
import torch
from evomo.algorithms import NSGA2
from evomo.problems.constrained import DOC1
from evomo.workflows import UnifiedWorkflow
if __name__ == "__main__":
device = "cuda" if torch.cuda.is_available() else "cpu"
torch.set_default_device(device)
problem = DOC1()
algorithm = NSGA2(
pop_size=100,
n_objs=problem.m,
lb=problem.lb,
ub=problem.ub,
device=device,
)
workflow = UnifiedWorkflow(algorithm, problem, device=device)
workflow.init_step()
compiled_step = torch.compile(workflow.step)
for _ in range(100):
compiled_step()
fitness = workflow.algorithm.fit
constraint_violation = workflow.algorithm.cv
feasible = constraint_violation.sum(dim=1) <= 0
print(f"Fitness shape: {tuple(fitness.shape)}")
print(f"Constraint violation shape: {tuple(constraint_violation.shape)}")
print(f"Feasible solutions: {feasible.sum().item()}/{feasible.numel()}")
print("Feasible objective values:")
print(fitness[feasible])
UnifiedWorkflow preserves the (fitness, constraint_violation) output returned by constrained
problems so that NSGA-II can apply constraint-aware selection.
MoRobtrol
MoRobtrol evaluates PyTorch policies on multiobjective control tasks using Brax
(default) or Playground/MJX. For Playground (Python 3.11+):
pip install 'evomo[playground]'
Solve the MoSwimmer problem in MoRobtrol using the TensorMOEA/D algorithm:
import time
import torch
import torch.nn as nn
from evox.utils import ParamsAndVector
from evox.workflows import EvalMonitor, StdWorkflow
from evomo.algorithms import TensorMOEAD
from evomo.problems.neuroevolution import MoRobtrol
class SimpleMLP(nn.Module):
def __init__(self):
super(SimpleMLP, self).__init__()
self.features = nn.Sequential(nn.Linear(8, 4), nn.Tanh(), nn.Linear(4, 2))
def forward(self, x):
return torch.tanh(self.features(x))
def setup_workflow(model, pop_size, max_episode_length, num_episodes, device):
adapter = ParamsAndVector(dummy_model=model)
model_params = dict(model.named_parameters())
pop_center = adapter.to_vector(model_params)
lower_bound = torch.full_like(pop_center, -5)
upper_bound = torch.full_like(pop_center, 5)
problem = MoRobtrol(
policy=model,
env_name="mo_swimmer",
max_episode_length=max_episode_length,
num_episodes=num_episodes,
pop_size=pop_size,
device=device,
num_obj=2,
observation_shape=8,
obs_norm=torch.tensor([5.0, 1e-6, 1e6], device=device),
)
algorithm = TensorMOEAD(pop_size=pop_size, lb=lower_bound, ub=upper_bound, n_objs=2, device=device)
monitor = EvalMonitor(device=device)
workflow = StdWorkflow(
algorithm=algorithm,
problem=problem,
monitor=monitor,
opt_direction="max",
solution_transform=adapter,
device=device,
)
return workflow
def run_workflow(workflow, compiled=False, generations=10):
workflow.init_step()
step_function = torch.compile(workflow.step) if compiled else workflow.step
for index in range(generations):
print(f"In generation {index}:")
t = time.time()
step_function()
print(f"\tFitness: {-workflow.algorithm.fit}.")
print(f"\tTime elapsed: {time.time() - t: .4f}(s).")
if __name__ == "__main__":
device = "cuda" if torch.cuda.is_available() else "cpu"
model = SimpleMLP().to(device)
workflow = setup_workflow(model, 12, 100, 2, device)
run_workflow(workflow)
Publications on EvoMO
- Hao Li, Zhenyu Liang, and Ran Cheng, “GPU-accelerated evolutionary many-objective optimization using tensorized NSGA-III,” in IEEE Congress on Evolutionary Computation, 2025. [📄 Paper] | [🧐 Read More]
- Zhenyu Liang, Tao Jiang, Kebin Sun, and Ran Cheng, “GPU-accelerated evolutionary multiobjective optimization using tensorized RVEA,” in Proceedings of the Genetic and Evolutionary Computation Conference, 2024, pp. 566–575. [📄 Paper] | [🧐 Read More]
Community & Support
We welcome contributions and look forward to your feedback!
- Engage in discussions and share your experiences on GitHub Issues.
- Join our QQ group (ID: 297969717).
Citing EvoMO
If you use EvoMO in your research and want to cite it in your work, please use:
@article{evomo,
title = {Bridging Evolutionary Multiobjective Optimization and {GPU} Acceleration via Tensorization},
author = {Liang, Zhenyu and Li, Hao and Yu, Naiwei and Sun, Kebin and Cheng, Ran},
journal = {IEEE Transactions on Evolutionary Computation},
year = 2025,
doi = {10.1109/TEVC.2025.3555605}
}
Contributors
Thanks to the following people who contributed to this project: Zhenyu2Liang, Nam-dada, LiHao-MS, XU-Boqing, sherry-zx, rotarygirl-zxy, BillHuang2001, ranchengcn.
관련 프로젝트 살펴보기
tensorflow/tensorflow
모두를 위한 오픈소스 머신러닝 프레임워크
201,584 스타huggingface/transformers
🤗 Transformers: 텍스트, 비전, 오디오, 멀티모달 분야의 최첨단 머신러닝 모델을 위한 모델 정의 프레임워크로, 추론과 학습을 모두 지원합니다.
168,917 스타AUTOMATIC1111/stable-diffusion-webui
Stable Diffusion 웹 UI
165,300 스타Comfy-Org/ComfyUI
그래프와 노드로 구성된 인터페이스를 갖춘, 가장 강력하고 모듈성이 뛰어난 확산 모델 GUI, API, 백엔드입니다. 세계에서 가장 빠른 로컬 추론 엔진입니다.
146,472 스타