GA Engine API Reference¶
Complete documentation for genetic algorithm components.
Module: ga_trees.ga.engine¶
GAConfig¶
Configuration dataclass for genetic algorithm.
Attributes:
population_size(int): Number of individuals per generation (default: 100)n_generations(int): Number of evolution cycles (default: 50)crossover_prob(float): Crossover probability [0, 1] (default: 0.7)mutation_prob(float): Mutation probability [0, 1] (default: 0.2)tournament_size(int): Tournament selection size (default: 3)elitism_ratio(float): Fraction of elite preserved [0, 1] (default: 0.1)mutation_types(dict): Mutation operator probabilities (must sum to 1.0)
Example:
from ga_trees.ga.engine import GAConfig
config = GAConfig(
population_size=80,
n_generations=40,
crossover_prob=0.72,
mutation_prob=0.18,
tournament_size=4,
elitism_ratio=0.12,
mutation_types={
"threshold_perturbation": 0.45,
"feature_replacement": 0.25,
"prune_subtree": 0.25,
"expand_leaf": 0.05,
},
)
TreeInitializer¶
Initialize random decision trees.
Constructor¶
TreeInitializer(
n_features,
n_classes,
max_depth,
min_samples_split,
min_samples_leaf,
task_type="classification",
)
Parameters:
n_features(int): Number of input featuresn_classes(int): Number of target classesmax_depth(int): Maximum tree depthmin_samples_split(int): Minimum samples to splitmin_samples_leaf(int): Minimum samples in leaftask_type(str): 'classification' or 'regression'
Methods¶
create_random_tree(X, y)¶
Create a random valid tree.
Parameters:
X(np.ndarray): Training featuresy(np.ndarray): Training labels
Returns:
TreeGenotype: Random tree respecting constraints
Example:
from ga_trees.ga.engine import TreeInitializer
import numpy as np
X = np.random.rand(100, 4)
y = np.random.randint(0, 2, 100)
initializer = TreeInitializer(
n_features=4, n_classes=2, max_depth=5, min_samples_split=10, min_samples_leaf=5
)
tree = initializer.create_random_tree(X, y)
print(f"Created tree: depth={tree.get_depth()}, nodes={tree.get_num_nodes()}")
GAEngine¶
Main genetic algorithm engine.
Constructor¶
Parameters:
config(GAConfig): GA configurationinitializer(TreeInitializer): Tree initializerfitness_function(callable): Function to evaluate fitnessmutation(Mutation): Mutation operator
Methods¶
evolve(X, y, verbose=True)¶
Run the evolution process.
Parameters:
X(np.ndarray): Training featuresy(np.ndarray): Training labelsverbose(bool): Print progress
Returns:
TreeGenotype: Best individual found
Example:
from ga_trees.ga.engine import GAEngine, GAConfig, TreeInitializer, Mutation
from ga_trees.fitness.calculator import FitnessCalculator
# Setup components
ga_config = GAConfig(population_size=80, n_generations=40)
initializer = TreeInitializer(
n_features=4, n_classes=2, max_depth=5, min_samples_split=10, min_samples_leaf=5
)
fitness_calc = FitnessCalculator()
mutation = Mutation(n_features=4, feature_ranges={i: (0, 1) for i in range(4)})
# Create engine
ga_engine = GAEngine(
config=ga_config,
initializer=initializer,
fitness_function=fitness_calc.calculate_fitness,
mutation=mutation,
)
# Train
best_tree = ga_engine.evolve(X_train, y_train, verbose=True)
print(f"Best fitness: {best_tree.fitness_:.4f}")
get_history()¶
Get evolution history.
Returns:
dict: History with keys:best_fitness: List of best fitness per generationavg_fitness: List of average fitness per generationdiversity: List of population diversity (if tracked)
Example:
history = ga_engine.get_history()
import matplotlib.pyplot as plt
plt.plot(history["best_fitness"], label="Best")
plt.plot(history["avg_fitness"], label="Average")
plt.xlabel("Generation")
plt.ylabel("Fitness")
plt.legend()
plt.show()
See Genotype API for tree structure documentation.