def solve_iters(self, no_iters, verbose=True, out=True, randomname=False): # pdb.set_trace() # self.psodatalogger = stlog.statelogger(self.datafilename,self.datalogfilename,self.current_pos,self.centroid,self.spread,self.globalmin) if randomname: randomname = str(randint(100000, 999999)) self.psodatalogger = stlog.statelogger(randomname, self.datalogfilename, self.current_pos, self.centroid, self.spread, self.globalmin) else: self.psodatalogger = stlog.statelogger(self.datafilename, self.datalogfilename, self.current_pos, self.centroid, self.spread, self.globalmin) self.initialize_swarm() for i in range(no_iters): self.update_pos() self.update_currscores() self.update_selfmin() self.update_globalmin() self.update_velocities() if verbose: (centroid, spread) = self.calc_swarm_props() print('\n \n \n \n \n') print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') print("The running index is " + str(i) + "\n") # print(str(psoslr.globalminlocation)) self.report() print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') # curr_score = curr_arena.get_score(point) self.psodatalogger.add_state(self.current_pos, self.centroid, self.spread, self.globalmin) # point = gdsolver.get_descented_point(point) # descented_score = curr_arena.get_score(point) # deltascore = descented_score - curr_score # curr_score = descented_score # gdsolver.report() # pdb.set_trace() self.psodatalogger.close_logger() if out: if randomname: output = dict([('extremum value', self.globalmin), ('extremum location', self.globalminlocation), ('filename', randomname)]) else: output = dict([('extremum value', self.globalmin), ('extremum location', self.globalminlocation)]) return output else: return
def solve_iters(self, no_iters, verbose=True, out=True, randomname=False): # pdb.set_trace() # self.psodatalogger = stlog.statelogger(self.datafilename,self.datalogfilename,self.current_pos,self.centroid,self.spread,self.globalmin) if randomname: randomname = str(randint(100000, 999999)) self.psodatalogger = stlog.statelogger(randomname, self.datalogfilename, self.current_pos, self.centroid, self.spread, self.globalmin) else: self.psodatalogger = stlog.statelogger(self.datafilename, self.datalogfilename, self.current_pos, self.centroid, self.spread, self.globalmin) self.initialize_swarm() for i in range(no_iters): self.update_pos() self.update_currscores() self.update_selfmin() self.update_globalmin() self.update_velocities() if verbose: (centroid, spread) = self.calc_swarm_props() print('\n \n \n \n \n') print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') print("The running index is " + str(i) + "\n") # print(str(psoslr.globalminlocation)) self.report() print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') # curr_score = curr_arena.get_score(point) self.psodatalogger.add_state(self.current_pos,self.centroid,self.spread,self.globalmin) # point = gdsolver.get_descented_point(point) # descented_score = curr_arena.get_score(point) # deltascore = descented_score - curr_score # curr_score = descented_score # gdsolver.report() # pdb.set_trace() self.psodatalogger.close_logger() if out: if randomname: output = dict([('extremum value', self.globalmin), ('extremum location', self.globalminlocation), ('filename', randomname)]) else: output = dict([('extremum value', self.globalmin), ('extremum location', self.globalminlocation)]) return output else: return
def solveforlocation(): sensorloc_array = create_sensorlocarray(ndim, no_sensors) target_loc = create_target(ndim) curr_arena = ar.arena(no_sensors, ndim, sensorloc_array,target_loc) # curr_arena = localize(no_sensors,np.load('psosolsens.npy')); # curr_arena = localize(no_sensors,np.load('gdssolsens.npy')); # curr_arena = localize(no_sensors,np.load('fr.npy')); # indx = 0; # lst_score = float("inf"); # pos_tracker = np.empty(np.shape(pso.current_pos)); # spread = 0; # centroid = np.empty(pso.no_dim); ExampleSolSpacePoint = np.random.random((1, ndim)) iterindx = 1 gdsolver = gds.GDS(curr_arena.get_score, curr_arena.gradient_score, ExampleSolSpacePoint) psosolver = psos.PSO(curr_arena.get_score, 10, ndim, 1, 1.5, 1, ExampleSolSpacePoint, [-10 * np.ones(ndim), 10 * np.ones(ndim)]) psodata = stlog.statelogger('localize_psodata', 'localize_psolog', np.vstack((psosolver.current_pos, curr_arena.sensor_loc, curr_arena.target_loc)), psosolver.centroid, psosolver.spread, psosolver.globalmin) # Plotter is just expecting these. # gddata = stlog.statelogger('gddata2', 'gdslog',np.vstack((gdsolver.new_point, curr_arena.sensor_loc, curr_arena.target_loc)), # gdsolver.new_point, 0,gdsolver.curr_arena.get_score(gdsolver.new_point)) #Combined position data of moving point sensors and sensor target, i.e the object to be localized, in the first vstack array. # Dummy gdsolver.new_point to replace centroid that the plotter is expecting in the second term. indx = 0 # while np.abs(np.amin(pso.curr_score)-lst_score)>.001: point = ExampleSolSpacePoint while indx < 300: psosolver.update_pos() psosolver.update_currscores() psosolver.update_selfmin() psosolver.update_globalmin() psosolver.update_velocities() (centroid, spread) = psosolver.calc_swarm_props() print('\n \n \n \n \n') print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') print("The running index is " + str(indx) + "\n") print(str(psosolver.globalminlocation)) indx += 1 if psosolver.no_particles < 20: psosolver.report() print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') curr_score = curr_arena.get_score(point) point = gdsolver.get_descented_point(point) descented_score = curr_arena.get_score(point) deltascore = descented_score - curr_score curr_score = descented_score gdsolver.report() psodata.add_state(np.vstack((psosolver.current_pos, curr_arena.sensor_loc, curr_arena.target_loc)), psosolver.centroid, psosolver.spread, psosolver.globalmin)
def solve_convergence(self, convergencelimit, iterbound=1000, verbose=False, out=True, checkiters=10, randomname=True): if randomname: randomname = str(randint(100000, 999999)) self.psodatalogger = stlog.statelogger(randomname, self.datalogfilename, self.current_pos, self.centroid, self.spread, self.globalmin) else: self.psodatalogger = stlog.statelogger(self.datafilename, self.datalogfilename, self.current_pos, self.centroid, self.spread, self.globalmin) self.initialize_swarm() iter = 0 cur_score = self.globalmin # diff = np.inf errorlist = [np.inf for i in range(checkiters)] # pdb.set_trace() while ((np.any(np.abs(errorlist[-checkiters::]) > convergencelimit)) & (iter < iterbound)): # iter = 0 # cur_score = self.globalmin iter += 1 self.update_pos() self.update_currscores() self.update_selfmin() self.update_globalmin() self.update_velocities() if verbose: (centroid, spread) = self.calc_swarm_props() print('\n \n \n \n \n') print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') print("The running index is " + str(iter) + "\n") # print(str(psoslr.globalminlocation)) self.report() print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') # curr_score = curr_arena.get_score(point) self.psodatalogger.add_state(self.current_pos, self.centroid, self.spread, self.globalmin) diff = cur_score - self.globalmin errorlist.append(diff) cur_score = self.globalmin # point = gdsolver.get_descented_point(point) # descented_score = curr_arena.get_score(point) # deltascore = descented_score - curr_score # curr_score = descented_score # gdsolver.report() self.psodatalogger.close_logger() if iter == iterbound: print('Iterations bound exceeded') if out: if randomname: output = dict([('extremum value', self.globalmin), ('extremum location', self.globalminlocation), ('Number of iterations', iter), ('filename', randomname)]) else: output = dict([('extremum value', self.globalmin), ('extremum location', self.globalminlocation), ('Number of iterations', iter)]) print errorlist return output else: return
def solveforlocation(): sensorloc_array = create_sensorlocarray(ndim, no_sensors) target_loc = create_target(ndim) curr_arena = ar.arena(no_sensors, ndim, sensorloc_array, target_loc) # curr_arena = localize(no_sensors,np.load('psosolsens.npy')); # curr_arena = localize(no_sensors,np.load('gdssolsens.npy')); # curr_arena = localize(no_sensors,np.load('fr.npy')); # indx = 0; # lst_score = float("inf"); # pos_tracker = np.empty(np.shape(pso.current_pos)); # spread = 0; # centroid = np.empty(pso.no_dim); ExampleSolSpacePoint = np.random.random((1, ndim)) iterindx = 1 gdsolver = gds.GDS(curr_arena.get_score, curr_arena.gradient_score, ExampleSolSpacePoint) psosolver = psos.PSO(curr_arena.get_score, 10, ndim, 1, 1.5, 1, ExampleSolSpacePoint, [-10 * np.ones(ndim), 10 * np.ones(ndim)]) psodata = stlog.statelogger( 'localize_psodata', 'localize_psolog', np.vstack( (psosolver.current_pos, curr_arena.sensor_loc, curr_arena.target_loc)), psosolver.centroid, psosolver.spread, psosolver.globalmin) # Plotter is just expecting these. # gddata = stlog.statelogger('gddata2', 'gdslog',np.vstack((gdsolver.new_point, curr_arena.sensor_loc, curr_arena.target_loc)), # gdsolver.new_point, 0,gdsolver.curr_arena.get_score(gdsolver.new_point)) #Combined position data of moving point sensors and sensor target, i.e the object to be localized, in the first vstack array. # Dummy gdsolver.new_point to replace centroid that the plotter is expecting in the second term. indx = 0 # while np.abs(np.amin(pso.curr_score)-lst_score)>.001: point = ExampleSolSpacePoint while indx < 300: psosolver.update_pos() psosolver.update_currscores() psosolver.update_selfmin() psosolver.update_globalmin() psosolver.update_velocities() (centroid, spread) = psosolver.calc_swarm_props() print('\n \n \n \n \n') print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') print("The running index is " + str(indx) + "\n") print(str(psosolver.globalminlocation)) indx += 1 if psosolver.no_particles < 20: psosolver.report() print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') curr_score = curr_arena.get_score(point) point = gdsolver.get_descented_point(point) descented_score = curr_arena.get_score(point) deltascore = descented_score - curr_score curr_score = descented_score gdsolver.report() psodata.add_state( np.vstack((psosolver.current_pos, curr_arena.sensor_loc, curr_arena.target_loc)), psosolver.centroid, psosolver.spread, psosolver.globalmin)
def solve_convergence(self, convergencelimit, iterbound=1000, verbose=False, out=True, checkiters=10, randomname=True): if randomname: randomname = str(randint(100000, 999999)) self.psodatalogger = stlog.statelogger(randomname, self.datalogfilename, self.current_pos, self.centroid, self.spread, self.globalmin) else: self.psodatalogger = stlog.statelogger(self.datafilename, self.datalogfilename, self.current_pos, self.centroid, self.spread, self.globalmin) self.initialize_swarm() iter = 0 cur_score = self.globalmin # diff = np.inf errorlist = [np.inf for i in range(checkiters)] # pdb.set_trace() while ((np.any(np.abs(errorlist[-checkiters::]) > convergencelimit)) & (iter<iterbound) ): # iter = 0 # cur_score = self.globalmin iter += 1 self.update_pos() self.update_currscores() self.update_selfmin() self.update_globalmin() self.update_velocities() if verbose: (centroid, spread) = self.calc_swarm_props() print('\n \n \n \n \n') print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') print("The running index is " + str(iter) + "\n") # print(str(psoslr.globalminlocation)) self.report() print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') # curr_score = curr_arena.get_score(point) self.psodatalogger.add_state(self.current_pos,self.centroid,self.spread,self.globalmin) diff = cur_score - self.globalmin errorlist.append(diff) cur_score = self.globalmin # point = gdsolver.get_descented_point(point) # descented_score = curr_arena.get_score(point) # deltascore = descented_score - curr_score # curr_score = descented_score # gdsolver.report() self.psodatalogger.close_logger() if iter == iterbound: print ('Iterations bound exceeded') if out: if randomname: output = dict([('extremum value', self.globalmin), ('extremum location', self.globalminlocation), ('Number of iterations', iter), ('filename', randomname)]) else: output = dict([('extremum value', self.globalmin), ('extremum location', self.globalminlocation), ('Number of iterations', iter)]) print errorlist return output else: return
i += 1 return 0-gradient/i # def score_glb(sensorloc): # return currscript_score(sensorloc,avgspace,no_sensors,dim,alpha,sigma) # # def gradient_glb(sensorloc): # return # psol = pssol.PSO(currscript_score, 20, no_sensors*dim,.5,.5,1,-50+np.random.random(no_sensors*dim)*100,[-10*np.ones(no_sensors*dim),10*np.ones(no_sensors*dim)]) point = np.random.random(no_sensors*dim) gdssol = gdslr.GDS(currscript_score,currscript_gradient,point) rec_obj_pso = stlg.statelogger('optms_pso','optmspsolog',psol.curr_score,psol.globalmin,psol.current_pos) rec_obj_gds = stlg.statelogger('optms_gds','optmsgdslog',gdssol.score_func(point)) for i in range(100): psol.update_pos() psol.update_currscores() psol.update_selfmin() psol.update_globalmin() psol.update_velocities() (centroid, spread) = psol.calc_swarm_props() print('\n\n\n') print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n') print('PARTICLE SWARM OPTIMIZER REPORT')