def init_arms(self, cluster_positions, cluster_fitnesses): # Default matrix that translate and shrink search space to [0,1]^D matrices = [ Matrix(positions, fitnesses, self.min_bounds, self.max_bounds) for positions, fitnesses in zip( cluster_positions, cluster_fitnesses) ] if self.plot > 0: draw_optimization(function_id - 1, cluster_positions, matrices, fig_name='initial.png', **self.fig_config) # Random sample n_samples to represent search space for non-overlapped optimization trans_samples = np.random.uniform(0, 1, size=(self.n_samples, self.dimension)) k = len(cluster_positions) for i in range(k): exclude = [] for j in range(k): if i != j: samples = matrices[j].inverse_transform(trans_samples) exclude.extend(samples) exclude = np.array(exclude) if self.verbose: print('optimizing matrix for arm %d' % i) arm = Arm(self.obj, self.n_points, cluster_positions[i], cluster_fitnesses[i], algo_type=self.algo_type, exclude=exclude, min_bounds=self.min_bounds, max_bounds=self.max_bounds) self.arms.append(arm) matrices[i] = self.arms[i].matrix if self.plot > 0: opt_points = [] for j in range(k): if i == j: opt_points.append(cluster_positions[i]) else: samples = matrices[j].inverse_transform(trans_samples) opt_points.append(samples) draw_optimization(function_id - 1, opt_points, matrices, fig_name='initial_optimize_%d.png' % i, **self.fig_config) if self.plot > 0: opt_points = [arm.get_positions() for arm in self.arms] opt_matrices = [arm.matrix for arm in self.arms] draw_optimization(function_id - 1, opt_points, opt_matrices, fig_name='initial_optimized.png', **self.fig_config)