@@ -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
129138def 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
349348if __name__ == "__main__" :
350- exit (main ())
351-
349+ exit (main ())
0 commit comments