- [2025-03-01] Released EvoX 1.1.0 - now switched to
torch.compile
(TorchDynamo) [Details] - [2025-02-03] Released EvoRL: A GPU-accelerated framework for Evolutionary Reinforcement Learning, powered by JAX ! [Paper] [Code]
- [2025-01-30] Released EvoGP: A GPU-accelerated framework for Genetic Programming, powered by PyTorch & CUDA! [Paper] [Code]
- [2025-01-14] Released EvoX 1.0.0 - now fully compatible with PyTorch, with full
torch.compile
support! Users of the previous JAX-based version can access it on the v0.9.0 branch.
- Overview
- Key Features
- Main Contents
- Installation Guide
- Quick Start
- Sister Projects
- Community & Support
EvoX is a distributed GPU-accelerated evolutionary computation framework compatible with PyTorch. With a user-friendly programming model, it offers a comprehensive suite of 50+ Evolutionary Algorithms (EAs) and a wide range of 100+ Benchmark Problems/Environments. For more details, please refer to our Paper and Documentation / 文档.
Note
Users of the previous JAX-based version can access it on the v0.9.0 branch.
- Supports acceleration on heterogeneous hardware, including both CPUs and GPUs, achieving over 100x speedups.
- Integrates distributed workflows that scale seamlessly across multiple nodes or devices.
- Includes 50+ algorithms for a wide range of use cases, fully supporting single- and multi-objective optimization.
- Provides a hierarchical architecture for complex tasks such as meta learning, hyperparameter optimization, and neuroevolution.
- Fully compatible with PyTorch and its ecosystem, simplifying algorithmic development with a tailored programming model.
- Ensures effortless setup with one-click installation for Windows users.
- Features 100+ benchmark problems spanning single-objective optimization, multi-objective optimization, and real-world engineering challenges.
- Integrates seamlessly with physics engines like Brax and other popular frameworks for reinforcement learning.
- Provides an encapsulated module for defining and evaluating custom problems tailored to user needs, with seamless integration into real-world applications and datasets.
- Offers a comprehensive set of visualization tools for analyzing evolutionary processes across various tasks.
- Enables users to integrate their own visualization code, allowing for tailored and flexible visualizations.
- Leverages the tailored .exv format to simplify and accelerate real-time data streaming.
Category | Subcategory | Notable Algorithms / Benchmark Problems |
---|---|---|
Single-objective Optimization | Differential Evolution | CoDE, JaDE, SaDE, SHADE, IMODE, ... |
Evolution Strategy | CMA-ES, PGPE, OpenES, CR-FM-NES, xNES, ... | |
Particle Swarm Optimization | FIPS, CSO, CPSO, CLPSO, SL-PSO, ... | |
Multi-objective Optimization | Dominance-based | NSGA-II, NSGA-III, SPEA2, BiGE, KnEA, ... |
Decomposition-based | MOEA/D, RVEA, t-DEA, MOEAD-M2M, EAG-MOEAD, ... | |
Indicator-based | IBEA, HypE, SRA, MaOEA-IGD, AR-MOEA, ... | |
Benchmark Problems / Environments | Numerical | DTLZ, LSMOP, MaF, ZDT, CEC'22, ... |
Neuroevolution / RL | Brax, TorchVision Dataset, ... |
For a comprehensive list and detailed descriptions of all algorithms, please check the Algorithms API, and for benchmark problems/environments, refer to the Problems API.
Install evox
effortlessly via pip
:
pip install evox
Install the latest version from the source code for testing or development:
git clone https://github.com/EMI-Group/evox.git
cd evox
pip install -e .
Tip
Windows users can use the win-install.bat script for installation.
Here are some examples to get you started with EvoX:
Solve the Ackley problem using the PSO algorithm:
import torch
from evox.algorithms import PSO
from evox.problems.numerical import Ackley
from evox.workflows import StdWorkflow, EvalMonitor
algorithm = PSO(pop_size=100, lb=-32 * torch.ones(10), ub=32 * torch.ones(10))
problem = Ackley()
monitor = EvalMonitor()
workflow = StdWorkflow(algorithm, problem, monitor)
workflow.init_step()
for i in range(100):
workflow.step()
monitor.plot()
Example Output

Solve the DTLZ2 problem using the RVEA algorithm:
import torch
from evox.algorithms import RVEA
from evox.metrics import igd
from evox.problems.numerical import DTLZ2
from evox.workflows import StdWorkflow, EvalMonitor
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)
workflow.init_step()
for i in range(100):
workflow.step()
monitor.plot()
Example Output

Evolving a simple MLP model to solve the Brax HalfCheetah environment:
import torch
import torch.nn as nn
from evox.algorithms import PSO
from evox.problems.neuroevolution.brax import BraxProblem
from evox.utils import ParamsAndVector
from evox.workflows import EvalMonitor, StdWorkflow
class SimpleMLP(nn.Module):
def __init__(self):
super().__init__()
# observation space is 17-dim, action space is 6-dim.
self.features = nn.Sequential(nn.Linear(17, 8), nn.Tanh(), nn.Linear(8, 6))
def forward(self, x):
return torch.tanh(self.features(x))
# Initialize the MLP model
model = SimpleMLP()
adapter = ParamsAndVector(dummy_model=model)
# Set the population size
POP_SIZE = 1024
# Get the bound of the PSO algorithm
model_params = dict(model.named_parameters())
pop_center = adapter.to_vector(model_params)
lb = torch.full_like(pop_center, -5)
ub = torch.full_like(pop_center, 5)
# Initialize the PSO, and you can also use any other algorithms
algorithm = PSO(pop_size=POP_SIZE, lb=lb, ub=ub, device=device)
# Initialize the Brax problem
problem = BraxProblem(
policy=model,
env_name="halfcheetah",
max_episode_length=1000,
num_episodes=3,
pop_size=POP_SIZE,
device=device,
)
# set an monitor, and it can record the top 3 best fitnesses
monitor = EvalMonitor(topk=3, device=device)
# Initiate an workflow
workflow = StdWorkflow(
algorithm=algorithm,
problem=problem,
monitor=monitor,
opt_direction="max",
solution_transform=adapter,
device=device,
)
workflow.init_step()
for i in range(50):
workflow.step()
Example Output

Note
For comprehensive guidance, please visit our Documentation, where you'll find detailed installation steps, tutorials, practical examples, and complete API references.
- EvoRL:GPU-accelerated framework for Evolutionary Reinforcement Learning. Check out here.
- EvoGP:GPU-accelerated framework for Genetic Programming. Check out here.
- TensorNEAT: Tensorized NeuroEvolution of Augmenting Topologies (NEAT) for GPU Acceleration. Check out here.
- TensorRVEA: Tensorized Reference Vector Guided Evolutionary Algorithm (RVEA) for GPU Acceleration. Check out here.
- TensorACO: Tensorized Ant Colony Optimization (ACO) for GPU Acceleration. Check out here.
- EvoXBench: A real-world benchmark platform for solving various optimization problems, such as Neural Architecture Search (NAS). It operates without the need for GPUs/PyTorch/TensorFlow and supports multiple programming environments. Check out here.
Stay tuned - more exciting developments are on the way! ✨
- Join discussions on the GitHub Discussion Board.
- Connect via Discord or QQ group (ID: 297969717).
- Visit Offical Website.
If EvoX contributes to your research, please cite it:
@article{evox,
title = {{EvoX}: {A} {Distributed} {GPU}-accelerated {Framework} for {Scalable} {Evolutionary} {Computation}},
author = {Huang, Beichen and Cheng, Ran and Li, Zhuozhao and Jin, Yaochu and Tan, Kay Chen},
journal = {IEEE Transactions on Evolutionary Computation},
year = 2024,
doi = {10.1109/TEVC.2024.3388550}
}
EvoX is licensed under the GNU General Public License v3.0 (GPL-3.0). For full terms and conditions, please refer to the LICENSE file.