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