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
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
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
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