Skip to main content

Overview

OpenEvolve Native is a faithful SkyDiscover port of the OpenEvolve algorithm, implementing MAP-Elites (a quality-diversity algorithm) with an island-based population model. It maintains a feature map that preserves diverse solutions across multiple behavioral dimensions.

MAP-Elites

Maintains archive of best programs in each region of feature space

Island Populations

Multiple independent populations with periodic migration

Quality-Diversity

Optimizes both fitness and behavioral diversity

Adaptive Sampling

Balances exploration, exploitation, and random search

Key Concepts

MAP-Elites Archive

MAP-Elites discretizes the behavior space into a grid and maintains the best solution in each cell:
This preserves diverse solutions instead of just the single best.

Feature Dimensions

OpenEvolve Native supports both built-in and custom feature dimensions: Built-in features:
  • complexity: Length of solution code
  • diversity: Average distance from reference set
  • score: Fitness value itself
Custom features: Any metric returned by your evaluator can be used as a feature dimension.

Island Architecture

Multiple independent populations (islands) evolve in parallel:
  • Each island has its own MAP-Elites grid
  • Islands evolve independently most of the time
  • Periodic migration exchanges top solutions between islands
  • Prevents premature convergence to single approach

Configuration

Basic Usage

Configuration File

Configuration Options

int
default:"5"
Number of independent island populations
int
default:"40"
Maximum total programs across all islands
int
default:"100"
Size of elite archive (best programs)
list
default:"['complexity', 'diversity']"
List of feature dimensions for MAP-Elites grid. Can be:
  • Built-in: "complexity", "diversity", "score"
  • Custom: Any metric name from your evaluator
Example with custom features:
int | dict
default:"10"
Number of bins per feature dimension.Single value (same for all dimensions):
Per-dimension (different resolution):
float
default:"0.2"
Fraction of iterations to sample random parent from island (exploration)
float
default:"0.7"
Fraction of iterations to sample elite parent from archive (exploitation)
int
default:"10"
Number of generations between island migrations
float
default:"0.1"
Fraction of island population to migrate (top programs)
float
default:"0.1"
Fraction of context programs to sample from island elite
int
default:"20"
Number of programs in reference set for diversity calculation

How It Works

Sampling Strategy

On each iteration, OpenEvolve selects a parent using a probabilistic strategy:
This balances:
  • Exploration (0.2): Try diverse approaches
  • Exploitation (0.7): Refine known good solutions
  • Global search (0.1): Avoid island isolation

MAP-Elites Insertion

When a new program is generated:
  1. Calculate features: Determine feature coordinates (e.g., complexity=5, diversity=3)
  2. Find cell: Locate corresponding grid cell
  3. Compare: Is new program better than current cell occupant?
  4. Update: If yes, replace cell occupant

Migration Process

Every migration_interval generations:
  1. Select migrants: Top migration_rate fraction from each island
  2. Ring topology: Island i sends to islands i+1 and i-1
  3. Copy programs: Migrants are copied (not moved)
  4. Prevent duplicates: Skip if target island already has identical solution

When to Use OpenEvolve Native

  • Problems with multiple complementary solutions
  • Need for behavioral diversity (not just fitness)
  • Multi-objective optimization with trade-offs
  • Long runs (150+ iterations) where quality-diversity pays off
  • Problems with custom feature dimensions
  • Single optimal solution exists
  • Short runs (< 50 iterations) - not enough time for MAP-Elites to fill
  • No meaningful behavioral dimensions
  • Need for maximum simplicity

Example: Algorithm Design

Custom Feature Dimensions

Optimize sorting algorithms with custom features:
Result: Discovers diverse sorting algorithms optimized for different input patterns.

Monitoring OpenEvolve Native

Island Status

MAP-Elites Coverage

Archive Quality

Feature Space Visualization

Visualize the MAP-Elites grid (2D example):

Advanced Usage

Custom Feature Bins per Dimension

Total cells = 20 × 10 × 5 = 1,000

Asymmetric Migration

Customize migration topology:

Comparison with Other Algorithms

Tips for Best Results

1

Choose Meaningful Features

Feature dimensions should capture behavioral differences that matter for your problem. Don’t just use complexity and diversity by default.
2

Balance Feature Bins

  • Too few bins (< 5): Insufficient diversity
  • Too many bins (> 20): Sparse coverage, slow fill
  • Sweet spot: 8-12 bins per dimension
3

Tune Exploration/Exploitation

Adjust based on problem:
  • Unknown landscape: Higher exploration (0.3-0.4)
  • Refinement needed: Higher exploitation (0.7-0.8)
4

Monitor Coverage

Track MAP-Elites coverage over time. If coverage plateaus early, features may be too correlated.
  • AdaEvolve - Island-based with adaptive intensity
  • GEPA Native - Pareto frontier instead of MAP-Elites
  • EvoX - Can evolve the OpenEvolve strategy itself