5
5
"""
6
6
7
7
import random
8
- from typing import Callable , Tuple , List
8
+ from collections . abc import Callable
9
9
10
10
# Define the parameters for the genetic algorithm
11
11
N_POPULATION = 100
14
14
NUM_GENERATIONS = 50
15
15
16
16
17
- def evaluate (func : Callable , params : List [float ]) -> float :
17
+ def evaluate (func : Callable , params : list [float ]) -> float :
18
18
"""
19
19
Evaluate the fitness of an individual based on the provided function.
20
20
@@ -27,14 +27,14 @@ def evaluate(func: Callable, params: List[float]) -> float:
27
27
return func (* params )
28
28
29
29
30
- def crossover (parent_1 : List [float ], parent_2 : List [float ]) -> List [float ]:
30
+ def crossover (parent_1 : list [float ], parent_2 : list [float ]) -> list [float ]:
31
31
"""Perform crossover between two parents."""
32
32
crossover_point = random .randint (1 , len (parent_1 ) - 1 )
33
33
child = parent_1 [:crossover_point ] + parent_2 [crossover_point :]
34
34
return child
35
35
36
36
37
- def mutate (individual : List [float ], mutation_rate : float ) -> List [float ]:
37
+ def mutate (individual : list [float ], mutation_rate : float ) -> list [float ]:
38
38
"""Mutate an individual with a certain probability."""
39
39
mutated_individual = []
40
40
for gene in individual :
@@ -48,8 +48,8 @@ def mutate(individual: List[float], mutation_rate: float) -> List[float]:
48
48
49
49
50
50
def select (
51
- population : List [ Tuple [ List [float ], float ]], num_selected : int
52
- ) -> List [ List [float ]]:
51
+ population : list [ tuple [ list [float ], float ]], num_selected : int
52
+ ) -> list [ list [float ]]:
53
53
"""Select individuals based on their fitness scores."""
54
54
sorted_population = sorted (population , key = lambda x : x [1 ])
55
55
selected_parents = [
@@ -60,10 +60,8 @@ def select(
60
60
61
61
def optimize (
62
62
func : Callable ,
63
- num_params : int ,
64
- param_ranges : List [Tuple [float , float ]],
65
- optimization_goal : str ,
66
- ) -> Tuple [List [float ], float ]:
63
+ param_ranges : list [tuple [float , float ]],
64
+ ) -> tuple [list [float ], float ]:
67
65
"""Optimize the given function using a genetic algorithm."""
68
66
# Initialize the population
69
67
population = [
@@ -72,7 +70,7 @@ def optimize(
72
70
]
73
71
74
72
# Main optimization loop
75
- for generation in range (NUM_GENERATIONS ):
73
+ for _generation in range (NUM_GENERATIONS ):
76
74
# Evaluate the fitness of each individual in the population
77
75
population_fitness = [
78
76
(individual , evaluate (func , individual )) for individual in population
@@ -83,7 +81,7 @@ def optimize(
83
81
84
82
# Generate offspring through crossover and mutation
85
83
offspring = []
86
- for i in range (N_POPULATION ):
84
+ for _i in range (N_POPULATION ):
87
85
parent_1 = random .choice (selected_parents )
88
86
parent_2 = random .choice (selected_parents )
89
87
child = crossover (parent_1 , parent_2 )
@@ -109,8 +107,6 @@ def quadratic_function(x, y):
109
107
return x ** 2 + y ** 2
110
108
111
109
param_ranges = [(- 10 , 10 ), (- 10 , 10 )]
112
- best_params , best_fitness = optimize (
113
- quadratic_function , 2 , param_ranges , "minimize"
114
- )
110
+ best_params , best_fitness = optimize (quadratic_function , param_ranges )
115
111
print ("Best parameters:" , best_params )
116
112
print ("Best fitness:" , best_fitness )
0 commit comments