OpenEvolve
Island-model MAP-Elites evolutionary search with diff mutation (the open AlphaEvolve).
# OpenEvolve — faithful port of the real OpenEvolve (open AlphaEvolve) defaults.
# Sections mirror the six core components; only the components OpenEvolve tunes appear here.
seed: 42 # OpenEvolve DatabaseConfig.random_seed default
general:
max_iterations: 100
max_solution_length: 10000 # OpenEvolve Config.max_code_length default (over-length children rejected)
population: # MapElitesIslandsPopulation
num_islands: 5
archive_size: 100
population_size: 1000
feature_dimensions: [complexity, diversity]
feature_bins: 10
migration_interval: 50 # migrate every N island generations
migration_rate: 0.1 # fraction of each island migrated to ring neighbours
diversity_reference_size: 20
selection_policy: # OpenEvolveSelectionPolicy
# (also reads population.num_islands + population.feature_dimensions)
exploration_ratio: 0.2 # P(uniform-random parent from current island)
exploitation_ratio: 0.7 # P(fitness-weighted parent from the archive)
elite_selection_ratio: 0.1 # top fraction of island used as inspirations
num_inspirations: 3 # prompt.num_top_programs (the PromptBuilder reuses this count)
num_diverse: 2 # prompt.num_diverse_programs
proposer: # OpenEvolve LLMConfig defaults (apply only to a model built from this preset)
top_p: 0.95
max_tokens: 4096
timeout: 60
# OpenEvolve's default is a weighted 2-model ensemble; galapagos uses your injected model by default.
# To replicate the upstream default, uncomment a `models:` list — build_model samples one model per
# generate() by normalized weight (EnsembleModel). Provider/host/keys are yours to set:
# models:
# - {name: gemini-2.0-flash-lite, weight: 0.8, host: openrouter}
# - {name: gemini-2.0-flash, weight: 0.2, host: openrouter}
# NOTE: upstream `diff_based` / `allow_full_rewrite` / `max_code_length` are NOT exposed:
# OpenEvolveProposer is hard-wired to whole-line SEARCH/REPLACE diffs (apply_diff), no full-rewrite
# fallback — a response with no valid diff block is a no-op, as the reference discards it in diff mode.
# Cascade evaluation is task-owned (runs evaluate_stageN when the task defines them); the scaffold
# applies OpenEvolve's cascade_thresholds [0.5, 0.75, 0.9] unless the task card sets its own.