Skip to content

Commit 1e7e385

Browse files
committed
Experiment Runner: Code Refactor
(1) Distinguishing memetic and standard GAs during optimizer class instantiation; (2) Replaced complex nested ifs
1 parent a0d22f6 commit 1e7e385

1 file changed

Lines changed: 17 additions & 19 deletions

File tree

scripts/run_experiment.py

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,24 @@ def get_optimizer(
108108
f"Available: {list(optimizer_map.keys())}"
109109
)
110110

111-
if optimizer_name.lower() in {"rs", "pso"} \
112-
or optimizer_name.lower().startswith("ga"):
111+
if optimizer_name.lower() in {"rs", "pso"}:
113112
return optimizer_class(
114113
param_space=param_space,
115114
evaluate_fn=evaluate_fn,
116115
metric_key="composite_fitness",
117116
seed=seed,
118117
n_jobs=n_jobs,
119118
)
119+
elif optimizer_name.lower().startswith("ga"):
120+
is_memetic: bool = optimizer_name.lower() == "ga-memetic"
121+
return optimizer_class(
122+
param_space=param_space,
123+
evaluate_fn=evaluate_fn,
124+
metric_key="composite_fitness",
125+
seed=seed,
126+
radius=0.15 if is_memetic else None,
127+
n_jobs=n_jobs,
128+
)
120129
else:
121130
return optimizer_class(
122131
param_space=param_space,
@@ -127,6 +136,7 @@ def get_optimizer(
127136

128137

129138
def extract_convergence_trace(history: list) -> Dict[str, list]:
139+
130140
"""Extract convergence trace (best-so-far fitness at each evaluation)."""
131141
best_so_far = float("-inf")
132142
convergence = []
@@ -322,23 +332,12 @@ def main() -> None:
322332
# Handle -1 for all CPUs
323333
n_jobs = args.n_jobs if args.n_jobs > 0 else None
324334

325-
if args.optimizer is None:
326-
# Assume running all optimizers
327-
for optimizer_name in ["rs", "ga-standard", "ga-memetic", "pso"]:
328-
run_experiment(
329-
model_key=args.model,
330-
optimizer_name=optimizer_name,
331-
num_runs=args.runs,
332-
# The paper did specify evaluations for GA differently
333-
evaluations=args.evaluations,
334-
base_seed=args.seed,
335-
n_jobs=n_jobs,
336-
)
337-
else:
338-
# Run a Specific Experiment based on optimizer's name
335+
optimizers = ["rs", "ga-standard", "ga-memetic", "pso"] if args.optimizer is None else [args.optimizer]
336+
337+
for optimizer_name in optimizers:
339338
run_experiment(
340339
model_key=args.model,
341-
optimizer_name=args.optimizer,
340+
optimizer_name=optimizer_name,
342341
num_runs=args.runs,
343342
evaluations=args.evaluations,
344343
base_seed=args.seed,
@@ -347,5 +346,4 @@ def main() -> None:
347346

348347

349348
if __name__ == "__main__":
350-
exit(main())
351-
349+
exit(main())

0 commit comments

Comments
 (0)