Scroll Down

GPU-accelerated Evolutionary Computation, PyTorch/JAX

The Foundation for Self-Evolving Agents

EvoX is All You Need

Get Started

November 6, 2025

EvoX v1.3.0 Release Note

New feature: Workflow now accepts a list of opt_direction. Plus several bug fixes.

Read More

April 5, 2026

EvoGO: GPU Compute × Generative Learning → A New Paradigm for Evolutionary Algorithms with 10-Generation Convergence

EvoGO is a fully data-driven evolutionary optimization framework that learns how to generate better solutions from past search experience and achieves fast, strong performance on complex high-dimensional tasks.

Read More

March 16, 2026

iStratDE: GPU Computing x Ultra-Large Populations Unlock the Full Potential of Differential Evolution

The EvoX team introduces iStratDE, a GPU-accelerated differential evolution method that assigns fixed strategies at the individual level, enabling communication-free large-scale parallel search with strong empirical performance and theoretical convergence guarantees.

Read More

<< Key Features >>

Ultra Performance

  • Supports acceleration on heterogeneous hardware (CPUs & GPUs), achieving over 100x speedups.
  • Integrated distributed workflows scaling across multiple nodes.

All-in-One Solution

  • Includes 50+ algorithms for single- and multi-objective optimization.
  • Hierarchical architecture for meta learning, hyperparameter optimization, and neuroevolution.

Easy-to-Use Design

  • Fully compatible with EvoX ecosystem with a tailored programming model.
  • Effortless setup with one-click installation.

Community

Join the EvoX developer community to contribute, learn, and get your questions answered.

import torch
from evox.algorithms.pso_variants import PSO
from evox.problems.numerical import Ackley
from evox.workflows import StdWorkflow, EvalMonitor

torch.set_default_device("cuda")
# Define the algorithm
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()