Multi Processing?

This commit is contained in:
Varyngoth
2025-11-11 22:26:10 -04:00
parent c16c545bc8
commit fd0cb67812

View File

@@ -13,6 +13,7 @@ import shap
from deap import base, creator, tools, algorithms
from algorithms import lasso, random_forest, gradient_boosting, decision_tree_regressor, ridge_regressor, stacking_lasso
from multiprocessing import Pool, cpu_count
import argparse
creator.create("FitnessMin", base.Fitness, weights=(-1.0, -1.0)) # Minimize both objectives
@@ -162,28 +163,33 @@ def run_nsga_experiment(output_base_directory="./results_nsga",
start_time = time.time()
pop = toolbox.population(n=population_size)
# Evaluate the initial population
fits = toolbox.map(toolbox.evaluate, pop)
# Use a Pool to parallelize evaluations
with Pool(processes=cpu_count()) as pool:
# Evaluate the initial population in parallel
fits = list(pool.map(toolbox.evaluate, pop))
for fit, ind in zip(fits, pop):
ind.fitness.values = fit[:2]
ind.shap_values = fit[2]
# Use the number of parents and offspring in the evolution process
# Evolution loop
for gen in range(n_generations):
if time.time() - start_time > time_limit:
print("Time limit exceeded, stopping evolution.")
break
offspring = algorithms.varAnd(pop, toolbox, cxpb=0.7, mutpb=0.2)
fits = toolbox.map(toolbox.evaluate, offspring)
# Evaluate offspring in parallel
fits = list(pool.map(toolbox.evaluate, offspring))
for fit, ind in zip(fits, offspring):
ind.fitness.values = fit[:2] # Ensure only the first two values are assigned to fitness
ind.fitness.values = fit[:2]
ind.shap_values = fit[2]
# Select the next generation of parents from the combined pool of parents and offspring
# Select next generation
pop = toolbox.select(pop + offspring, k=population_size)
for ind in pop:
for fold_idx, shap_values in enumerate(ind.shap_values):
shap_output_path = os.path.join(output_directory, f"shap_values_{int(ind[0])}_fold_{fold_idx + 1}.npy")