@@ -113,10 +113,8 @@ def strategy(self, strategy):
113
113
' strategy="npoints" is implemented.' )
114
114
115
115
def _ask_and_tell_based_on_loss_improvements (self , n ):
116
- chosen_points = []
117
- chosen_loss_improvements = []
118
- npoints = [l .npoints + len (l .pending_points )
119
- for l in self .learners ]
116
+ selected = [] # tuples ((learner_index, point), loss_improvement)
117
+ npoints = [l .npoints + len (l .pending_points ) for l in self .learners ]
120
118
for _ in range (n ):
121
119
improvements_per_learner = []
122
120
points_per_learner = []
@@ -136,17 +134,15 @@ def _ask_and_tell_based_on_loss_improvements(self, n):
136
134
zip (points_per_learner , improvements_per_learner ),
137
135
key = itemgetter (1 ))
138
136
npoints [index ] += 1
139
- chosen_points .append ((index , point ))
140
- chosen_loss_improvements .append (loss_improvement )
137
+ selected .append (((index , point ), loss_improvement ))
141
138
self .tell_pending ((index , point ))
142
139
143
- return chosen_points , chosen_loss_improvements
140
+ points , loss_improvements = map (list , zip (* selected ))
141
+ return points , loss_improvements
144
142
145
143
def _ask_and_tell_based_on_loss (self , n ):
146
- chosen_points = []
147
- chosen_loss_improvements = []
148
- npoints = [l .npoints + len (l .pending_points )
149
- for l in self .learners ]
144
+ selected = [] # tuples ((learner_index, point), loss_improvement)
145
+ npoints = [l .npoints + len (l .pending_points ) for l in self .learners ]
150
146
for _ in range (n ):
151
147
losses = self ._losses (real = False )
152
148
priority = zip (losses , (- n for n in npoints ))
@@ -158,15 +154,14 @@ def _ask_and_tell_based_on_loss(self, n):
158
154
self ._ask_cache [index ] = self .learners [index ].ask (n = 1 )
159
155
points , loss_improvements = self ._ask_cache [index ]
160
156
161
- chosen_points .append ((index , points [0 ]))
162
- chosen_loss_improvements .append (loss_improvements [0 ])
163
- return chosen_points , chosen_loss_improvements
157
+ selected .append (((index , points [0 ]), loss_improvements [0 ]))
158
+
159
+ points , loss_improvements = map (list , zip (* selected ))
160
+ return points , loss_improvements
164
161
165
162
def _ask_and_tell_based_on_npoints (self , n ):
166
- chosen_points = []
167
- chosen_loss_improvements = []
168
- npoints = [l .npoints + len (l .pending_points )
169
- for l in self .learners ]
163
+ selected = [] # tuples ((learner_index, point), loss_improvement)
164
+ npoints = [l .npoints + len (l .pending_points ) for l in self .learners ]
170
165
n_left = n
171
166
while n_left > 0 :
172
167
index = np .argmin (npoints )
@@ -176,9 +171,10 @@ def _ask_and_tell_based_on_npoints(self, n):
176
171
points , loss_improvements = self ._ask_cache [index ]
177
172
npoints [index ] += 1
178
173
n_left -= 1
179
- chosen_points .append ((index , points [0 ]))
180
- chosen_loss_improvements .append (loss_improvements [0 ])
181
- return chosen_points , chosen_loss_improvements
174
+ selected .append (((index , points [0 ]), loss_improvements [0 ]))
175
+
176
+ points , loss_improvements = map (list , zip (* selected ))
177
+ return points , loss_improvements
182
178
183
179
def ask (self , n , tell_pending = True ):
184
180
"""Chose points for learners."""
0 commit comments