Skip to content

Commit 13d0e39

Browse files
committed
Reformatted function_optimization.py using black
1 parent 5aa3a97 commit 13d0e39

File tree

1 file changed

+29
-7
lines changed

1 file changed

+29
-7
lines changed

genetic_algorithm/function_optimization.py

+29-7
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
MUTATION_PROBABILITY = 0.1
1414
NUM_GENERATIONS = 50
1515

16+
1617
def evaluate(func: Callable, params: List[float]) -> float:
1718
"""
1819
Evaluate the fitness of an individual based on the provided function.
@@ -25,12 +26,14 @@ def evaluate(func: Callable, params: List[float]) -> float:
2526
"""
2627
return func(*params)
2728

29+
2830
def crossover(parent_1: List[float], parent_2: List[float]) -> List[float]:
2931
"""Perform crossover between two parents."""
3032
crossover_point = random.randint(1, len(parent_1) - 1)
3133
child = parent_1[:crossover_point] + parent_2[crossover_point:]
3234
return child
3335

36+
3437
def mutate(individual: List[float], mutation_rate: float) -> List[float]:
3538
"""Mutate an individual with a certain probability."""
3639
mutated_individual = []
@@ -43,21 +46,37 @@ def mutate(individual: List[float], mutation_rate: float) -> List[float]:
4346
mutated_individual.append(gene)
4447
return mutated_individual
4548

46-
def select(population: List[Tuple[List[float], float]], num_selected: int) -> List[List[float]]:
49+
50+
def select(
51+
population: List[Tuple[List[float], float]], num_selected: int
52+
) -> List[List[float]]:
4753
"""Select individuals based on their fitness scores."""
4854
sorted_population = sorted(population, key=lambda x: x[1])
49-
selected_parents = [individual[0] for individual in sorted_population[:num_selected]]
55+
selected_parents = [
56+
individual[0] for individual in sorted_population[:num_selected]
57+
]
5058
return selected_parents
5159

52-
def optimize(func: Callable, num_params: int, param_ranges: List[Tuple[float, float]], optimization_goal: str) -> Tuple[List[float], float]:
60+
61+
def optimize(
62+
func: Callable,
63+
num_params: int,
64+
param_ranges: List[Tuple[float, float]],
65+
optimization_goal: str,
66+
) -> Tuple[List[float], float]:
5367
"""Optimize the given function using a genetic algorithm."""
5468
# Initialize the population
55-
population = [[random.uniform(param_range[0], param_range[1]) for param_range in param_ranges] for _ in range(N_POPULATION)]
69+
population = [
70+
[random.uniform(param_range[0], param_range[1]) for param_range in param_ranges]
71+
for _ in range(N_POPULATION)
72+
]
5673

5774
# Main optimization loop
5875
for generation in range(NUM_GENERATIONS):
5976
# Evaluate the fitness of each individual in the population
60-
population_fitness = [(individual, evaluate(func, individual)) for individual in population]
77+
population_fitness = [
78+
(individual, evaluate(func, individual)) for individual in population
79+
]
6180

6281
# Select parents for crossover
6382
selected_parents = select(population_fitness, N_SELECTED)
@@ -79,16 +98,19 @@ def optimize(func: Callable, num_params: int, param_ranges: List[Tuple[float, fl
7998

8099
return best_individual, best_fitness
81100

101+
82102
if __name__ == "__main__":
83103
# Set random seed for reproducibility
84104
random.seed(123)
85105

86106
# Example usage:
87107
def quadratic_function(x, y):
88108
"""Example function to optimize."""
89-
return x ** 2 + y ** 2
109+
return x**2 + y**2
90110

91111
param_ranges = [(-10, 10), (-10, 10)]
92-
best_params, best_fitness = optimize(quadratic_function, 2, param_ranges, "minimize")
112+
best_params, best_fitness = optimize(
113+
quadratic_function, 2, param_ranges, "minimize"
114+
)
93115
print("Best parameters:", best_params)
94116
print("Best fitness:", best_fitness)

0 commit comments

Comments
 (0)