Esempio n. 1
0
    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)