Skip to content

Commit 14e0de0

Browse files
authored
Merge pull request #44 from codelion/fix-islands-map-elites
Fix islands implementation
2 parents 153f5a7 + 84b5845 commit 14e0de0

File tree

11 files changed

+1313
-659
lines changed

11 files changed

+1313
-659
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ black openevolve tests examples
2929

3030
## Pull Request Process
3131

32-
1. Create a new branch for your feature or bugfix: `git checkout -b feature/your-feature-name`
32+
1. Create a new branch for your feature or bugfix: `git checkout -b feat-your-feature-name`
3333
2. Make your changes
3434
3. Add tests for your changes
3535
4. Run the tests to make sure everything passes: `python -m unittest discover tests`

configs/README.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# OpenEvolve Configuration Files
2+
3+
This directory contains configuration files for OpenEvolve with examples for different use cases.
4+
5+
## Configuration Files
6+
7+
### `default_config.yaml`
8+
The main configuration file containing all available options with sensible defaults. This file includes:
9+
- Complete documentation for all configuration parameters
10+
- Default values for all settings
11+
- **Island-based evolution parameters** for proper evolutionary diversity
12+
13+
Use this file as a template for your own configurations.
14+
15+
### `island_config_example.yaml`
16+
A practical example configuration demonstrating proper island-based evolution setup. Shows:
17+
- Recommended island settings for most use cases
18+
- Balanced migration parameters
19+
- Complete working configuration
20+
21+
### `island_examples.yaml`
22+
Multiple example configurations for different scenarios:
23+
- **Maximum Diversity**: Many islands, frequent migration
24+
- **Focused Exploration**: Few islands, rare migration
25+
- **Balanced Approach**: Default recommended settings
26+
- **Quick Exploration**: Small-scale rapid testing
27+
- **Large-Scale Evolution**: Complex optimization runs
28+
29+
Includes guidelines for choosing parameters based on your problem characteristics.
30+
31+
## Island-Based Evolution Parameters
32+
33+
The key new parameters for proper evolutionary diversity are:
34+
35+
```yaml
36+
database:
37+
num_islands: 5 # Number of separate populations
38+
migration_interval: 50 # Migrate every N generations
39+
migration_rate: 0.1 # Fraction of top programs to migrate
40+
```
41+
42+
### Parameter Guidelines
43+
44+
- **num_islands**: 3-10 for most problems (more = more diversity)
45+
- **migration_interval**: 25-100 generations (higher = more independence)
46+
- **migration_rate**: 0.05-0.2 (5%-20%, higher = faster knowledge sharing)
47+
48+
### When to Use What
49+
50+
- **Complex problems** → More islands, less frequent migration
51+
- **Simple problems** → Fewer islands, more frequent migration
52+
- **Long runs** → More islands to maintain diversity
53+
- **Short runs** → Fewer islands for faster convergence
54+
55+
## Usage
56+
57+
Copy any of these files as a starting point for your configuration:
58+
59+
```bash
60+
cp configs/default_config.yaml my_config.yaml
61+
# Edit my_config.yaml for your specific needs
62+
```
63+
64+
Then use with OpenEvolve:
65+
66+
```python
67+
from openevolve import OpenEvolve
68+
evolve = OpenEvolve(
69+
initial_program_path="program.py",
70+
evaluation_file="evaluator.py",
71+
config_path="my_config.yaml"
72+
)
73+
```

configs/default_config.yaml

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,7 @@ prompt:
5555
- "I suggest the following improvements:"
5656
- "We can enhance this code by:"
5757

58-
# Meta-prompting (experimental)
59-
use_meta_prompting: false # Use LLM to generate parts of the prompt
60-
meta_prompt_weight: 0.1 # Weight for meta-prompting influence
58+
# Note: meta-prompting features are not yet implemented
6159

6260
# Database configuration
6361
database:
@@ -68,13 +66,19 @@ database:
6866
# Evolutionary parameters
6967
population_size: 1000 # Maximum number of programs to keep in memory
7068
archive_size: 100 # Size of elite archive
71-
num_islands: 5 # Number of islands for island model
69+
num_islands: 5 # Number of islands for island model (separate populations)
70+
71+
# Island-based evolution parameters
72+
# Islands provide diversity by maintaining separate populations that evolve independently.
73+
# Migration periodically shares the best solutions between adjacent islands.
74+
migration_interval: 50 # Migrate between islands every N generations
75+
migration_rate: 0.1 # Fraction of top programs to migrate (0.1 = 10%)
7276

7377
# Selection parameters
7478
elite_selection_ratio: 0.1 # Ratio of elite programs to select
7579
exploration_ratio: 0.2 # Ratio of exploration vs exploitation
7680
exploitation_ratio: 0.7 # Ratio of exploitation vs random selection
77-
diversity_metric: "edit_distance" # Diversity metric (edit_distance, feature_based)
81+
# Note: diversity_metric is fixed to "edit_distance" (feature_based not implemented)
7882

7983
# Feature map dimensions for MAP-Elites
8084
feature_dimensions: # Dimensions for MAP-Elites feature map
@@ -88,9 +92,7 @@ evaluator:
8892
timeout: 300 # Maximum evaluation time in seconds
8993
max_retries: 3 # Maximum number of retries for evaluation
9094

91-
# Resource limits
92-
memory_limit_mb: null # Memory limit for evaluation (null = no limit)
93-
cpu_limit: null # CPU limit for evaluation (null = no limit)
95+
# Note: resource limits (memory_limit_mb, cpu_limit) are not yet implemented
9496

9597
# Evaluation strategies
9698
cascade_evaluation: true # Use cascade evaluation to filter bad solutions early
@@ -101,7 +103,7 @@ evaluator:
101103

102104
# Parallel evaluation
103105
parallel_evaluations: 4 # Number of parallel evaluations
104-
distributed: false # Use distributed evaluation
106+
# Note: distributed evaluation is not yet implemented
105107

106108
# LLM-based feedback (experimental)
107109
use_llm_feedback: false # Use LLM to evaluate code quality

configs/island_config_example.yaml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# OpenEvolve Island-Based Evolution Configuration
2+
# This configuration demonstrates the proper use of island-based evolution
3+
4+
# General settings
5+
max_iterations: 1000
6+
checkpoint_interval: 100
7+
log_level: "INFO"
8+
9+
# LLM configuration
10+
llm:
11+
primary_model: "gemini-2.0-flash-lite"
12+
primary_model_weight: 0.8
13+
secondary_model: "gemini-2.0-flash"
14+
secondary_model_weight: 0.2
15+
temperature: 0.7
16+
top_p: 0.95
17+
max_tokens: 4096
18+
19+
# Database configuration with proper island settings
20+
database:
21+
population_size: 500
22+
archive_size: 100
23+
24+
# Island-based evolution settings
25+
num_islands: 5 # Number of separate populations
26+
migration_interval: 50 # Migrate every 50 generations
27+
migration_rate: 0.1 # Migrate 10% of top programs
28+
29+
# Selection parameters
30+
elite_selection_ratio: 0.1
31+
exploration_ratio: 0.3
32+
exploitation_ratio: 0.7
33+
# Note: diversity_metric fixed to "edit_distance"
34+
35+
# Feature map dimensions for MAP-Elites
36+
feature_dimensions: ["score", "complexity"]
37+
feature_bins: 10
38+
39+
# Prompt configuration
40+
prompt:
41+
num_top_programs: 3
42+
num_diverse_programs: 2
43+
use_template_stochasticity: true
44+
45+
# Evaluator configuration
46+
evaluator:
47+
timeout: 300
48+
max_retries: 3
49+
cascade_evaluation: true
50+
parallel_evaluations: 4
51+
52+
# Evolution settings
53+
diff_based_evolution: true
54+
allow_full_rewrites: false
55+
max_code_length: 10000

configs/island_examples.yaml

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# OpenEvolve Island-Based Evolution Configuration Examples
2+
# Different configurations for various use cases
3+
4+
# Configuration for Maximum Diversity (Many Islands, Frequent Migration)
5+
# Use this when you want to explore the search space thoroughly
6+
# Good for: Complex problems, avoiding local optima, long runs
7+
max_diversity:
8+
database:
9+
num_islands: 10 # More islands = more diversity
10+
migration_interval: 25 # More frequent migration
11+
migration_rate: 0.2 # Higher migration rate
12+
population_size: 1000
13+
archive_size: 200
14+
15+
# Configuration for Focused Exploration (Few Islands, Rare Migration)
16+
# Use this when you want deeper exploration within each island
17+
# Good for: Problems with clear structure, shorter runs
18+
focused_exploration:
19+
database:
20+
num_islands: 3 # Fewer islands = deeper exploration
21+
migration_interval: 100 # Less frequent migration
22+
migration_rate: 0.05 # Lower migration rate
23+
population_size: 500
24+
archive_size: 50
25+
26+
# Configuration for Balanced Approach (Default Settings)
27+
# Use this as a starting point for most problems
28+
# Good for: General use, medium-length runs
29+
balanced:
30+
database:
31+
num_islands: 5 # Balanced number of islands
32+
migration_interval: 50 # Moderate migration frequency
33+
migration_rate: 0.1 # Moderate migration rate
34+
population_size: 1000
35+
archive_size: 100
36+
37+
# Configuration for Quick Exploration (Small Scale)
38+
# Use this for rapid prototyping and testing
39+
# Good for: Small problems, quick experiments
40+
quick_exploration:
41+
database:
42+
num_islands: 3
43+
migration_interval: 20
44+
migration_rate: 0.15
45+
population_size: 200
46+
archive_size: 30
47+
48+
# Configuration for Large-Scale Evolution (High Performance)
49+
# Use this for complex problems requiring extensive search
50+
# Good for: Complex optimization, long evolutionary runs
51+
large_scale:
52+
database:
53+
num_islands: 15 # Many islands for parallel exploration
54+
migration_interval: 75 # Balanced migration timing
55+
migration_rate: 0.08 # Conservative migration rate
56+
population_size: 2000 # Large populations
57+
archive_size: 300
58+
59+
# Guidelines for choosing parameters:
60+
#
61+
# num_islands:
62+
# - More islands = more diversity, slower convergence
63+
# - Fewer islands = faster convergence, risk of premature convergence
64+
# - Recommended: 3-10 for most problems
65+
#
66+
# migration_interval:
67+
# - Lower values = more frequent knowledge sharing
68+
# - Higher values = more independent evolution
69+
# - Recommended: 25-100 generations
70+
#
71+
# migration_rate:
72+
# - Higher values = faster knowledge propagation
73+
# - Lower values = preserve island diversity longer
74+
# - Recommended: 0.05-0.2 (5%-20%)
75+
#
76+
# Rule of thumb:
77+
# - Complex problems → More islands, less frequent migration
78+
# - Simple problems → Fewer islands, more frequent migration
79+
# - Long runs → More islands to maintain diversity
80+
# - Short runs → Fewer islands for faster convergence

openevolve/config.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ class DatabaseConfig:
8080
feature_dimensions: List[str] = field(default_factory=lambda: ["score", "complexity"])
8181
feature_bins: int = 10
8282

83+
# Migration parameters for island-based evolution
84+
migration_interval: int = 50 # Migrate every N generations
85+
migration_rate: float = 0.1 # Fraction of population to migrate
86+
87+
# Random seed for reproducible sampling
88+
random_seed: Optional[int] = None
89+
8390

8491
@dataclass
8592
class EvaluatorConfig:
@@ -188,8 +195,9 @@ def to_dict(self) -> Dict[str, Any]:
188195
"num_diverse_programs": self.prompt.num_diverse_programs,
189196
"use_template_stochasticity": self.prompt.use_template_stochasticity,
190197
"template_variations": self.prompt.template_variations,
191-
"use_meta_prompting": self.prompt.use_meta_prompting,
192-
"meta_prompt_weight": self.prompt.meta_prompt_weight,
198+
# Note: meta-prompting features not implemented
199+
# "use_meta_prompting": self.prompt.use_meta_prompting,
200+
# "meta_prompt_weight": self.prompt.meta_prompt_weight,
193201
},
194202
"database": {
195203
"db_path": self.database.db_path,
@@ -200,19 +208,25 @@ def to_dict(self) -> Dict[str, Any]:
200208
"elite_selection_ratio": self.database.elite_selection_ratio,
201209
"exploration_ratio": self.database.exploration_ratio,
202210
"exploitation_ratio": self.database.exploitation_ratio,
203-
"diversity_metric": self.database.diversity_metric,
211+
# Note: diversity_metric fixed to "edit_distance"
212+
# "diversity_metric": self.database.diversity_metric,
204213
"feature_dimensions": self.database.feature_dimensions,
205214
"feature_bins": self.database.feature_bins,
215+
"migration_interval": self.database.migration_interval,
216+
"migration_rate": self.database.migration_rate,
217+
"random_seed": self.database.random_seed,
206218
},
207219
"evaluator": {
208220
"timeout": self.evaluator.timeout,
209221
"max_retries": self.evaluator.max_retries,
210-
"memory_limit_mb": self.evaluator.memory_limit_mb,
211-
"cpu_limit": self.evaluator.cpu_limit,
222+
# Note: resource limits not implemented
223+
# "memory_limit_mb": self.evaluator.memory_limit_mb,
224+
# "cpu_limit": self.evaluator.cpu_limit,
212225
"cascade_evaluation": self.evaluator.cascade_evaluation,
213226
"cascade_thresholds": self.evaluator.cascade_thresholds,
214227
"parallel_evaluations": self.evaluator.parallel_evaluations,
215-
"distributed": self.evaluator.distributed,
228+
# Note: distributed evaluation not implemented
229+
# "distributed": self.evaluator.distributed,
216230
"use_llm_feedback": self.evaluator.use_llm_feedback,
217231
"llm_feedback_weight": self.evaluator.llm_feedback_weight,
218232
},

0 commit comments

Comments
 (0)