public ParticleSet perceptionUpdate(String perception, Randomizer r)
{
// compute Particle Weight
foreach (Particle p in particles)
{
double particleWeight = hmm.sensorModel().get(p.getState(),
perception);
p.setWeight(particleWeight);
}
// weighted sample to create new ParticleSet
ParticleSet result = new ParticleSet(hmm);
while (result.size() != size())
{
foreach (Particle p in particles)
{
double probability = r.nextDouble();
if (probability <= p.getWeight())
{
if (result.size() < size())
{
result.add(new Particle(p.getState(), p.getWeight()));
}
}
}
}
return(result);
}