@@ -113,6 +113,112 @@ def test_score_with_weights(self):
113113
114114 self .assertEqual (best [0 ].__repr__ (), best_params )
115115
116+ def test_score_with_sample_count (self ):
117+ name = "score"
118+ turns = 10
119+ noise = 0
120+ repetitions = 5
121+ num_states = 2
122+ mutation_rate = .1
123+ opponents = [s () for s in axl .demo_strategies ]
124+ size = 10
125+
126+ objective = dojo .prepare_objective (name = name ,
127+ turns = turns ,
128+ noise = noise ,
129+ repetitions = repetitions )
130+
131+ population = dojo .Population (params_class = dojo .FSMParams ,
132+ params_args = (num_states , mutation_rate ),
133+ size = size ,
134+ objective = objective ,
135+ output_filename = self .temporary_file .name ,
136+ opponents = opponents ,
137+ sample_count = 2 , # Randomly sample 2 opponents at each step
138+ bottleneck = 2 ,
139+ processes = 1 )
140+
141+ generations = 4
142+ axl .seed (0 )
143+ population .run (generations )
144+ self .assertEqual (population .generation , 4 )
145+
146+ # Manually read from tempo file to find best strategy
147+ best_score , best_params = 0 , None
148+ with open (self .temporary_file .name , "r" ) as f :
149+ reader = csv .reader (f )
150+ for row in reader :
151+ _ , mean_score , sd_score , max_score , arg_max = row
152+ if float (max_score ) > best_score :
153+ best_score = float (max_score )
154+ best_params = arg_max
155+
156+ # Test the load params function
157+ for num in range (1 , 4 + 1 ):
158+ best = dojo .load_params (params_class = dojo .FSMParams ,
159+ filename = self .temporary_file .name ,
160+ num = num )
161+ self .assertEqual (len (best ), num )
162+
163+ for parameters in best :
164+ self .assertIsInstance (parameters , dojo .FSMParams )
165+
166+ self .assertEqual (best [0 ].__repr__ (), best_params )
167+
168+
169+ def test_score_with_sample_count_and_weights (self ):
170+ name = "score"
171+ turns = 10
172+ noise = 0
173+ repetitions = 5
174+ num_states = 2
175+ mutation_rate = .1
176+ opponents = [s () for s in axl .demo_strategies ]
177+ size = 10
178+
179+ objective = dojo .prepare_objective (name = name ,
180+ turns = turns ,
181+ noise = noise ,
182+ repetitions = repetitions )
183+
184+ population = dojo .Population (params_class = dojo .FSMParams ,
185+ params_args = (num_states , mutation_rate ),
186+ size = size ,
187+ objective = objective ,
188+ output_filename = self .temporary_file .name ,
189+ opponents = opponents ,
190+ sample_count = 2 , # Randomly sample 2 opponents at each step
191+ weights = [5 , 1 , 1 , 1 , 1 ],
192+ bottleneck = 2 ,
193+ processes = 1 )
194+
195+ generations = 4
196+ axl .seed (0 )
197+ population .run (generations )
198+ self .assertEqual (population .generation , 4 )
199+
200+ # Manually read from tempo file to find best strategy
201+ best_score , best_params = 0 , None
202+ with open (self .temporary_file .name , "r" ) as f :
203+ reader = csv .reader (f )
204+ for row in reader :
205+ _ , mean_score , sd_score , max_score , arg_max = row
206+ if float (max_score ) > best_score :
207+ best_score = float (max_score )
208+ best_params = arg_max
209+
210+ # Test the load params function
211+ for num in range (1 , 4 + 1 ):
212+ best = dojo .load_params (params_class = dojo .FSMParams ,
213+ filename = self .temporary_file .name ,
214+ num = num )
215+ self .assertEqual (len (best ), num )
216+
217+ for parameters in best :
218+ self .assertIsInstance (parameters , dojo .FSMParams )
219+
220+ self .assertEqual (best [0 ].__repr__ (), best_params )
221+
116222 def test_score_with_particular_players (self ):
117223 """
118224 These are players that are known to be difficult to pickle
0 commit comments