diff --git a/tracking/inference.py b/tracking/inference.py index 0c3ad9f..c1bb7e3 100644 --- a/tracking/inference.py +++ b/tracking/inference.py @@ -648,7 +648,10 @@ class ParticleFilter(InferenceModule): """ self.particles = [] "*** YOUR CODE HERE ***" - raiseNotDefined() + num_positions = len(self.legalPositions) + num_particles = self.numParticles + for i in range(num_particles): + self.particles.append(self.legalPositions[i % num_positions]) "*** END YOUR CODE HERE ***" def getBeliefDistribution(self): @@ -660,7 +663,11 @@ class ParticleFilter(InferenceModule): This function should return a normalized distribution. """ "*** YOUR CODE HERE ***" - raiseNotDefined() + belief = DiscreteDistribution() + for particle in self.particles: + belief[particle] += 1 + belief.normalize() + return belief "*** END YOUR CODE HERE ***" ########### ########### ########### @@ -680,7 +687,14 @@ class ParticleFilter(InferenceModule): the DiscreteDistribution may be useful. """ "*** YOUR CODE HERE ***" - raiseNotDefined() + belief = DiscreteDistribution() + for particle in self.particles: + belief[particle] += self.getObservationProb(observation, gameState.getPacmanPosition(), particle, self.getJailPosition()) + belief.normalize() + if belief.total() == 0: + self.initializeUniformly(gameState) + else: + self.particles = [belief.sample() for _ in range(self.numParticles)] "*** END YOUR CODE HERE ***" ########### ########### ########### @@ -693,6 +707,9 @@ class ParticleFilter(InferenceModule): gameState. """ "*** YOUR CODE HERE ***" - raiseNotDefined() + new_particles = [] + for particle in self.particles: + new_particles.append(self.getPositionDistribution(gameState, particle).sample()) + self.particles = new_particles "*** END YOUR CODE HERE ***"