11from typing import List , Tuple
22import numpy as np
3- import numpy .random as random
43from axelrod .action import Action
54from axelrod .load_data_ import load_weights
65from axelrod .evolvable_player import EvolvablePlayer , InsufficientParametersError , crossover_lists
@@ -229,7 +228,9 @@ def __init__(
229228 weights : List [float ] = None ,
230229 mutation_probability : float = None ,
231230 mutation_distance : int = 5 ,
231+ seed : int = None
232232 ) -> None :
233+ self .set_seed (seed = seed )
233234 num_features , num_hidden , weights , mutation_probability = self ._normalize_parameters (
234235 num_features , num_hidden , weights , mutation_probability )
235236 ANN .__init__ (self ,
@@ -245,25 +246,23 @@ def __init__(
245246 weights = weights ,
246247 mutation_probability = mutation_probability )
247248
248- @classmethod
249- def _normalize_parameters (cls , num_features = None , num_hidden = None , weights = None , mutation_probability = None ):
249+ def _normalize_parameters (self , num_features = None , num_hidden = None , weights = None , mutation_probability = None ):
250250 if not (num_features and num_hidden ):
251251 raise InsufficientParametersError ("Insufficient Parameters to instantiate EvolvableANN" )
252252 size = num_weights (num_features , num_hidden )
253253 if not weights :
254- weights = [random .uniform (- 1 , 1 ) for _ in range (size )]
254+ weights = [self . _random .uniform (- 1 , 1 ) for _ in range (size )]
255255 if mutation_probability is None :
256256 mutation_probability = 10. / size
257257 return num_features , num_hidden , weights , mutation_probability
258258
259- @staticmethod
260- def mutate_weights (weights , num_features , num_hidden , mutation_probability ,
259+ def mutate_weights (self , weights , num_features , num_hidden , mutation_probability ,
261260 mutation_distance ):
262261 size = num_weights (num_features , num_hidden )
263- randoms = random .random (size )
262+ randoms = self . _random .random (size )
264263 for i , r in enumerate (randoms ):
265264 if r < mutation_probability :
266- p = 1 + random .uniform (- 1 , 1 ) * mutation_distance
265+ p = 1 + self . _random .uniform (- 1 , 1 ) * mutation_distance
267266 weights [i ] *= p
268267 return weights
269268
@@ -276,7 +275,7 @@ def mutate(self):
276275 def crossover (self , other ):
277276 if other .__class__ != self .__class__ :
278277 raise TypeError ("Crossover must be between the same player classes." )
279- weights = crossover_lists (self .weights , other .weights )
278+ weights = crossover_lists (self .weights , other .weights , self . _random )
280279 return self .create_new (weights = weights )
281280
282281
0 commit comments