Exemplo n.º 1
0
    def replace(self, worst):
        """
        Replace the worst particle.
        """
        # Threshold
        threshold = self.distances[worst]

        # Copy a survivor
        if self.num_particles > 1:
            while True:
                copy = rng.randint(self.num_particles)
                if copy != worst:
                    break
            self.particles[worst] = deepcopy(self.particles[copy])

        # Do mcmc
        for i in range(0, self.mcmc_steps):
            # Generate proposal
            proposal = deepcopy(self.particles[worst])
            logA = proposal.perturb()
            proposal_distance = distance(self.reference_particle, proposal)
            if logA > 0.0:
                logA = 0.0

            # Acceptance
            if proposal_distance < threshold and rng.rand() <= np.exp(logA):
                self.particles[worst] = proposal
                self.distances[worst] = proposal_distance
Exemplo n.º 2
0
 def compute_distances(self):
     """
     Compute the distance from the reference particle to each
     comparison particle.
     """
     self.distances = [ distance(self.reference_particle, p)
                             for p in self.particles ]
     self.distances = np.array(self.distances)