Particle filtering is an application of likelihood weighting to a dynamic Bayesian network. In particular, it is an approximate inference algorithm for estimating the state of a dynamic Bayesian network at time t given evidence up to that point in time.
PARTICLE-FILTERING(bn, e1:t, N)
S ← randomly sample N times from the prior p(X0)
for i=1...t
S ← PARTICLE-FILTERING-HELPER(ei, N, S, bn)
end
return S
end
PARTICLE-FILTERING-HELPER(e, N, S, bn)
weighted_set ← {} // Use this to compute a distribution over the state
for s=1...N
old_sample = S(s)
// Sample an updated state
new_sample ← randomly sample from p(Xi | Xi-1 = old_sample)
// Weight the sample according to the likelihood of the evidence
weight ← p(e| X = new_sample)
weighted_set{new_sample} += weight
end
weighted_set.normalize()
// Here we resample according to the weights
for s=1...N
S(s) = weighted_set.sample()
end
return S
end