Skip to content

Commit 180be03

Browse files
authored
Merge pull request #152 from yyh-sjtu/MAP-Elite
modify for MAP-Elite Algorithm
2 parents 7591d04 + 8b6f53b commit 180be03

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

openevolve/config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ class DatabaseConfig:
166166
diversity_metric: str = "edit_distance" # Options: "edit_distance", "feature_based"
167167

168168
# Feature map dimensions for MAP-Elites
169-
feature_dimensions: List[str] = field(default_factory=lambda: ["score", "complexity"])
169+
# feature_dimensions: List[str] = field(default_factory=lambda: ["score", "complexity"])
170+
feature_dimensions: List[str] = field(default_factory=lambda: ["complexity"])
170171
feature_bins: int = 10
171172

172173
# Migration parameters for island-based evolution

openevolve/database.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ def __init__(self, config: DatabaseConfig):
105105

106106
# Feature grid for MAP-Elites
107107
self.feature_map: Dict[str, str] = {}
108-
self.feature_bins = config.feature_bins
108+
self.feature_bins = max(config.feature_bins,
109+
int(pow(config.archive_size, 1 / len(config.feature_dimensions)) + 0.99))
109110

110111
# Island populations
111112
self.islands: List[Set[str]] = [set() for _ in range(config.num_islands)]
@@ -210,6 +211,11 @@ def add(
210211
existing_fitness = safe_numeric_average(existing_program.metrics)
211212
logger.info("MAP-Elites cell improved: %s (fitness: %.3f -> %.3f)",
212213
coords_dict, existing_fitness, new_fitness)
214+
215+
# use MAP-Elites to manage archive
216+
if existing_program_id in self.archive:
217+
self.archive.discard(existing_program_id)
218+
self.archive.add(program.id)
213219

214220
self.feature_map[feature_key] = program.id
215221

0 commit comments

Comments
 (0)