def simulate(self):
     all_vals = []
     avg_vals = []
     pnt = get_best_point(self.population.points)
     all_vals.append(pnt.z)
     avg_vals.append(self.population.get_average_objective())
     print("Initial best value: " + str(pnt.z))
     while self.iteration < self.num_iterations:
         if self.print_status == True and self.iteration%50 == 0:
             pnt = get_best_point(self.population.points)
             print pnt.z, self.population.get_average_objective()
         self.iterate()
         all_vals.append(get_best_point(self.population.points).z)
         avg_vals.append(self.population.get_average_objective())
         if self.visualize == True and self.iteration%2==0:
             self.population.get_visualization()
     # sns.figure(0)
     plt.plot(all_vals, 'r', label='Best')
     plt.plot(avg_vals, 'g', label='Average')
     plt.legend()
     plt.xlabel('Iterations')
     plt.ylabel('Objective Function Value')
     plt.title(self.func.func_name + ', ' + str(self.population.dim) + '-D')
     plt.show()
     pnt = get_best_point(self.population.points)
     print("Final best value: " + str(pnt.z))
     return pnt.z
Beispiel #2
0
    def simulate(self):
        pnt = get_best_point(self.population.points)
        print("Initial best value: " + str(pnt.z))
        while self.iteration < self.num_iterations:
            self.iterate()

        pnt = get_best_point(self.population.points)
        print("Final best value: " + str(pnt.z))
        return pnt.z
    def simulate(self):
        pnt = get_best_point(self.population.points)
        print("Initial best value: " + str(pnt.z))
        while self.iteration < self.num_iterations:
            self.iterate()

        pnt = get_best_point(self.population.points)
        print("Final best value: " + str(pnt.z))
        return pnt.z
 def simulate(self):
     pnt = get_best_point(self.population.points)
     # print('best value of: ' + str(pnt.z) + ' at ' + str(pnt.coords)
     print('Initial best value of: ' + str(pnt.z))
     while self.iteration < self.numIterations:
         self.iterate()
     pnt = get_best_point(self.population.points)
     # print('best value of: ' + str(pnt.z) + ' at ' + str(pnt.coords)
     print('Final best value of: ' + str(pnt.z))
     print("")
     return pnt.z
Beispiel #5
0
 def simulate(self):
     pnt = get_best_point(self.population.points)
     # print('best value of: ' + str(pnt.z) + ' at ' + str(pnt.coords)
     print('Initial best value of: ' + str(pnt.z))
     while self.iteration < self.numIterations:
         self.iterate()
     pnt = get_best_point(self.population.points)
     # print('best value of: ' + str(pnt.z) + ' at ' + str(pnt.coords)
     print('Final best value of: ' + str(pnt.z))
     print("")
     return pnt.z
    def func_cluster(self):
        self.sol = []
        self.C = []
        C = []

        for j in range(0, int(self.population.num_points / self.M)):
            dist = []
            pnt = get_best_point(self.population.points)
            self.sol.append(pnt)
            for pt in self.population.points:
                p_dist = calc_dist(pt, pnt)
                dist.append([pt, p_dist])
                dist.sort(key=lambda i: i[1])
            if len(dist) > self.M:
                for i in range(0, self.M):
                    pt = dist[i][0]
                    self.C.append(pt.coords)
                    C.append(pt)
            else:
                for i in range(0, len(dist)):
                    pt = dist[i][0]
                    self.C.append(pt.coords)
                    C.append(pt)
            self.population.remove(C)
            self.jDE()

        self.iteration += 1
 def jDE(self):
     F_old = self.F
     CR_old = self.CR
     #IF  = random.random() < self.tau1;
     #ICR = random.random() < self.tau2;
     F_new = (
         0.1 +
         0.9 * random.random()) if random.random() < self.tau1 else self.F
     CR_new = (
         0.0 +
         1.0 * random.random()) if random.random() < self.tau2 else self.CR
     if (F_old == F_new) or (CR_old == CR_new):
         self.iterate()
     else:
         self.iterate()
         pnt = get_best_point(self.population.points)
         self.F = F_new
         self.CR = CR_new
         self.iterate()
         pnt_1 = get_best_point(self.population.points)
         if pnt_1.z >= pnt.z:
             self.F = F_old
             self.CR = CR_old
             self.iterate()
    def iterate(self):
        leader = self.get_leader()
        # print(leader.z)

        for ix in range(len(self.population.points)):
            curr_point = self.population.points[ix]
            path_value = 0
            p_vec = self.generate_perturbation()
            new_points = []
            while path_value <= self.pathLength:
                new_point = Point(dim=self.dim)
                for dx in range(new_point.dim):
                    new_point.coords[dx] = curr_point.coords[dx] + (leader.coords[dx] - curr_point.coords[
                        dx]) * path_value * p_vec[dx]
                new_point.evaluate_point()
                new_points.append(new_point)
                path_value += self.step
            self.population.points[ix] = get_best_point(new_points)
        self.iteration += 1
Beispiel #9
0
    def iterate(self):
        leader = self.get_leader()
        # print(leader.z)

        for ix in range(len(self.population.points)):
            curr_point = self.population.points[ix]
            path_value = 0
            p_vec = self.generate_perturbation()
            new_points = []
            while path_value <= self.pathLength:
                new_point = Point(dim=self.dim)
                for dx in range(new_point.dim):
                    new_point.coords[dx] = curr_point.coords[dx] + (
                        leader.coords[dx] -
                        curr_point.coords[dx]) * path_value * p_vec[dx]
                new_point.evaluate_point()
                new_points.append(new_point)
                path_value += self.step
            self.population.points[ix] = get_best_point(new_points)
        self.iteration += 1
    def simulate(self, plot=True):
        all_vals = []
        avg_vals = []
        solutions = []
        #pts = []
        sol_df = pd.DataFrame(columns=[
            'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11',
            'x12', 'x13', 'x14', 'x15', 'x16', 'x17', 'x18', 'x19', 'x20',
            'x21', 'x22', 'x23', 'x24', 'x25', 'x26', 'x27', 'x28', 'x29',
            'x30', 'x31', 'x32', 'x33', 'x34', 'x35', 'x36', 'x37', 'x38',
            'x39', 'x40', 'x41', 'x42', 'x43', 'x44', 'x45', 'x46', 'x47',
            'x48', 'x49', 'x50', 'cluster', 'gen', 'opp'
        ])
        pnt = get_best_point(self.population.points)
        all_vals.append(pnt.z)
        avg_vals.append(self.population.get_average_objective())
        print("Initial best value: " + str(pnt.z))
        if plot == True:
            print("Initial pop: ")
            self.population.get_visualization(plot_leaders=True)

        while self.iteration < self.num_iterations:
            self.func_cluster()
            solu = []
            opp = []
            for pt in self.sol:
                solu.append(pt.coords.tolist())
                opp.append(pt.z)
            sol_temp = pd.DataFrame(
                solu,
                columns=[
                    'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9',
                    'x10', 'x11', 'x12', 'x13', 'x14', 'x15', 'x16', 'x17',
                    'x18', 'x19', 'x20', 'x21', 'x22', 'x23', 'x24', 'x25',
                    'x26', 'x27', 'x28', 'x29', 'x30', 'x31', 'x32', 'x33',
                    'x34', 'x35', 'x36', 'x37', 'x38', 'x39', 'x40', 'x41',
                    'x42', 'x43', 'x44', 'x45', 'x46', 'x47', 'x48', 'x49',
                    'x50'
                ])
            sol_temp['cluster'] = [i for i in range(0, len(solu))]
            sol_temp['gen'] = [self.iteration for i in sol_temp.x1]
            sol_temp['opp'] = np.array(opp)
            sol_df = sol_df.append(sol_temp)
            self.population.prepare(self.C)
            if self.print_status == True and self.iteration % 100 == 0:
                pnt = get_best_point(self.population.points)
                print(pnt.z, self.population.get_average_objective())
            best = get_best_point(self.population.points)
            solutions.append(best.coords)
            #pts.append(best)
            all_vals.append(best.z)
            avg_vals.append(self.population.get_average_objective())

        # sns.figure(0)
        if plot == True:
            print('end pop:')
            self.population.get_visualization(plot_leaders=True)

            self.plot_contour_sol(solutions)

            plt.plot(all_vals, 'r', label='Best')
            plt.plot(avg_vals, 'g', label='Average')
            plt.legend()
            plt.xlabel('Iterations')
            plt.ylabel('Objective Function Value')
            plt.title(self.func.func_name + ', ' + str(self.population.dim) +
                      '-D')
            plt.show()
        pnt = get_best_point(self.population.points)
        print("Final best value: " + str(pnt.z))

        return sol_df, pnt.z