Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc87641b

Browse files
authored
Reuse parents' fitness value.
The fitness values of the parents in one generation i is used rather than recalculated in the next generation i+1. Thanks for this issue:ahmedfgad#54
1 parent196a034 commitc87641b

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

‎pygad.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,7 +1145,17 @@ def cal_pop_fitness(self):
11451145
pop_fitness= []
11461146
# Calculating the fitness value of each solution in the current population.
11471147
forsol_idx,solinenumerate(self.population):
1148-
fitness=self.fitness_func(sol,sol_idx)
1148+
1149+
# Check if the parent's fitness value is already calculated. If so, use it instead of calling the fitness function.
1150+
ifnot (self.last_generation_parentsisNone)andlen(numpy.where(numpy.all(self.last_generation_parents==sol,axis=1))[0]>0):
1151+
# Index of the parent in the parents array (self.last_generation_parents). This is not its index within the population.
1152+
parent_idx=numpy.where(numpy.all(self.last_generation_parents==sol,axis=1))[0][0]
1153+
# Index of the parent in the population.
1154+
parent_idx=self.last_generation_parents_indices[parent_idx]
1155+
# Use the parent's index to return its pre-calculated fitness value.
1156+
fitness=self.last_generation_fitness[parent_idx]
1157+
else:
1158+
fitness=self.fitness_func(sol,sol_idx)
11491159
pop_fitness.append(fitness)
11501160

11511161
pop_fitness=numpy.array(pop_fitness)
@@ -1174,7 +1184,7 @@ def run(self):
11741184
# Appending the best solution in the initial population to the best_solutions list.
11751185
ifself.save_best_solutions:
11761186
self.best_solutions.append(best_solution)
1177-
1187+
11781188
# Appending the solutions in the initial population to the solutions list.
11791189
ifself.save_solutions:
11801190
self.solutions.extend(self.population.copy())
@@ -1377,7 +1387,7 @@ def tournament_selection(self, fitness, num_parents):
13771387
parents=numpy.empty((num_parents,self.population.shape[1]),dtype=self.gene_type[0])
13781388
else:
13791389
parents=numpy.empty((num_parents,self.population.shape[1]),dtype=object)
1380-
1390+
13811391
parents_indices= []
13821392

13831393
forparent_numinrange(num_parents):

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp