Skip to main content

Overview

The search section controls the evolutionary search algorithm, database backend, and context program selection strategy.

Basic Configuration

search:
  type: "topk"              # Search algorithm type
  num_context_programs: 4   # Number of examples in prompt
  output_dir: null          # Override output directory
  database:                 # Algorithm-specific settings
    db_path: null
    log_prompts: true

Search Types

SkyDiscover supports multiple search algorithms, each with different strategies for exploring the solution space. Simple best-first search that maintains the top-k programs by fitness.
search:
  type: "topk"
  num_context_programs: 4
  database:
    db_path: "outputs/database.db"
    log_prompts: true
db_path
str
default:"None"
Path to SQLite database for storing results
log_prompts
bool
default:"true"
Whether to log prompts to the database

AdaEvolve (Adaptive Multi-Island)

Adaptive evolutionary algorithm with multiple islands that adjust search intensity based on improvement history.
configs/adaevolve.yaml
search:
  type: "adaevolve"
  num_context_programs: 4
  database:
    # Population settings
    population_size: 20
    num_islands: 2
    
    # Adaptive search intensity
    decay: 0.9
    intensity_min: 0.15
    intensity_max: 0.5
    
    # Feature flags
    use_adaptive_search: true
    use_ucb_selection: true
    use_migration: true
    use_unified_archive: true
    
    # Migration
    migration_interval: 15
    migration_count: 5
    
    # Archive settings
    fitness_weight: 1.0
    novelty_weight: 0.0
    diversity_strategy: "code"  # code, metric, or hybrid
    
    # Dynamic islands
    use_dynamic_islands: true
    max_islands: 5
    spawn_productivity_threshold: 0.015
    spawn_cooldown_iterations: 30
    
    # Paradigm breakthrough
    use_paradigm_breakthrough: true
    paradigm_window_size: 10
    paradigm_improvement_threshold: 0.12
    paradigm_max_uses: 2
    paradigm_max_tried: 10
    paradigm_num_to_generate: 3
Defined in skydiscover/config.py:380-432
population_size
int
default:"20"
Number of programs per island
num_islands
int
default:"2"
Initial number of islands
archive_size
int
default:"100"
Maximum size of the unified archive
use_ucb_selection
bool
default:"true"
Use UCB (Upper Confidence Bound) for island selection
use_migration
bool
default:"true"
Enable inter-island migration
migration_interval
int
default:"15"
Migrate every N iterations
migration_count
int
default:"5"
Number of top programs to migrate
use_unified_archive
bool
default:"true"
Use quality-diversity archive
fitness_weight
float
default:"1.0"
Weight for fitness rank in elite score
novelty_weight
float
default:"0.0"
Weight for novelty rank in elite score
diversity_strategy
str
default:"code"
Diversity metric: code, metric, or hybrid
k_neighbors
int
default:"5"
Number of neighbors for novelty calculation
use_dynamic_islands
bool
default:"true"
Enable dynamic island spawning
max_islands
int
default:"5"
Maximum number of islands
spawn_productivity_threshold
float
default:"0.015"
Spawn new island if productivity drops below this
spawn_cooldown_iterations
int
default:"30"
Wait N iterations between island spawns
use_paradigm_breakthrough
bool
default:"true"
Generate new high-level strategies during stagnation
paradigm_window_size
int
default:"10"
Window for improvement rate calculation
paradigm_improvement_threshold
float
default:"0.12"
Trigger paradigm breakthrough below this improvement rate
paradigm_max_uses
int
default:"2"
Maximum uses per paradigm
paradigm_num_to_generate
int
default:"3"
Number of paradigms to generate per trigger
paradigm_max_tried
int
default:"10"
Maximum tried paradigms to track

OpenEvolve Native (MAP-Elites)

Quality-diversity search using MAP-Elites grids with island-based populations.
configs/openevolve_native.yaml
search:
  type: "openevolve_native"
  num_context_programs: 5
  database:
    num_islands: 5
    population_size: 40
    archive_size: 100
    
    # Selection strategies
    exploration_ratio: 0.2    # P(explore) - random from island
    exploitation_ratio: 0.7   # P(exploit) - archive elite
    # remaining 0.1 = P(random)
    
    elite_selection_ratio: 0.1
    
    # MAP-Elites features
    feature_dimensions: ["complexity", "diversity"]
    feature_bins: 10
    diversity_reference_size: 20
    
    # Migration
    migration_interval: 10
    migration_rate: 0.1
    
    random_seed: 42
Defined in skydiscover/config.py:435-450
num_islands
int
default:"5"
Number of islands in the population
population_size
int
default:"40"
Total population size across all islands
archive_size
int
default:"100"
Size of the MAP-Elites archive
exploration_ratio
float
default:"0.2"
Probability of exploration (random parent from current island)
exploitation_ratio
float
default:"0.7"
Probability of exploitation (elite from archive)
elite_selection_ratio
float
default:"0.1"
Fraction of context programs from top elites
feature_dimensions
List[str]
default:"[\"complexity\", \"diversity\"]"
Behavioral dimensions for MAP-Elites grid
feature_bins
int
default:"10"
Number of bins per feature dimension

GEPA Native

Guided Evolution for Program Adaptation with elite pool, epsilon-greedy selection, and LLM-mediated merge.
search:
  type: "gepa_native"
  num_context_programs: 4
  database:
    population_size: 40
    
    # Selection
    candidate_selection_strategy: "epsilon_greedy"  # epsilon_greedy, best, pareto
    epsilon: 0.1
    max_rejection_history: 20
    
    # Controller settings
    acceptance_gating: true
    use_merge: true
    merge_after_stagnation: 15
    max_merge_attempts: 10
    max_recent_failures: 5
    
    random_seed: 42
Defined in skydiscover/config.py:453-472 Beam search with diversity weighting.
search:
  type: "beam_search"
  num_context_programs: 4
  database:
    beam_width: 5
    beam_selection_strategy: "diversity_weighted"
    beam_diversity_weight: 0.3
    beam_temperature: 1.0
    beam_depth_penalty: 0.0
Defined in skydiscover/config.py:362-370

Best-of-N

Generate N candidates and select the best one.
search:
  type: "best_of_n"
  num_context_programs: 4
  database:
    best_of_n: 5
Defined in skydiscover/config.py:373-377

EvoX (Co-Evolution)

Label-guided co-evolutionary search.
configs/evox.yaml
search:
  type: "evox"
  database:
    database_file_path: null  # Auto-configured
    evaluation_file: null     # Auto-configured
    config_path: null         # Auto-configured
    auto_generate_variation_operators: true
Defined in skydiscover/config.py:339-359

SearchConfig Parameters

Defined in skydiscover/config.py:485-493
type
str
default:"topk"
Search algorithm: topk, adaevolve, openevolve_native, gepa_native, beam_search, best_of_n, or evox
num_context_programs
int
default:"4"
Number of example programs to include in generation prompts
output_dir
str
default:"None"
Override output directory. If None, auto-generates based on search type and timestamp
database
DatabaseConfig
default:"DatabaseConfig()"
Algorithm-specific database configuration

CLI Overrides

Override search type from command line:
# Use AdaEvolve
skydiscover-run program.py evaluator.py -s adaevolve

# Use OpenEvolve Native
skydiscover-run program.py evaluator.py -s openevolve_native

# Use beam search
skydiscover-run program.py evaluator.py -s beam_search

Choosing a Search Algorithm

Top-K

Best for: Quick experiments, simple optimizationPros: Fast, simple, low overheadCons: Limited exploration

AdaEvolve

Best for: Complex optimization, long runsPros: Adaptive, robust, handles stagnationCons: More computational overhead

OpenEvolve Native

Best for: Quality-diversity, exploring trade-offsPros: Diverse solutions, explores full spaceCons: Requires good feature dimensions

GEPA

Best for: Merging diverse solutionsPros: LLM-mediated combination, smart gatingCons: Higher LLM token usage

Next Steps

LLM Configuration

Configure models for search

Evaluator Configuration

Set up program evaluation