public void testRobotHMMInitialization() { Assert.AreEqual(0.5, robotHmm.prior().getProbabilityOf( HmmConstants.DOOR_OPEN), 0.001); Assert.AreEqual(0.5, robotHmm.prior().getProbabilityOf( HmmConstants.DOOR_CLOSED), 0.001); }
public void testFilteringWithParticleSetsWorksForRainmanHmm() { Randomizer r = new MockRandomizer(new double[] { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 }); ParticleSet starting = rainman.prior().toParticleSet(rainman, r, 100); Assert.AreEqual(56, starting .numberOfParticlesWithState(HmmConstants.RAINING)); Assert.AreEqual(44, starting .numberOfParticlesWithState(HmmConstants.NOT_RAINING)); ParticleSet afterSeeingUmbrella = starting.filter( HmmConstants.SEE_UMBRELLA, r); Assert.AreEqual(84, afterSeeingUmbrella .numberOfParticlesWithState(HmmConstants.RAINING)); Assert.AreEqual(16, afterSeeingUmbrella .numberOfParticlesWithState(HmmConstants.NOT_RAINING)); // or alternatively ParticleSet afterNotSeeingUmbrella = starting.filter( HmmConstants.SEE_NO_UMBRELLA, r); Assert.AreEqual(12, afterNotSeeingUmbrella .numberOfParticlesWithState(HmmConstants.RAINING)); Assert.AreEqual(88, afterNotSeeingUmbrella .numberOfParticlesWithState(HmmConstants.NOT_RAINING)); }
public RandomVariable smooth(String perception) { evidenceFromSmoothedStepToPresent.Add(perception); Matrix O_t = hmm.sensorModel().asMatrix(perception); Matrix transitionMatrix = hmm.transitionModel().asMatrix(); if (time > timelag) { forwardMessage = hmm.forward(forwardMessage, perception); // This // seems // WRONG // I think this should be // forwardMessage = hmm.forward(forwardMessage, // evidenceFromSmoothedStepToPresent.get(0)); // this the perception at t-d. the book's algorithm // uses the latest perception. evidenceFromSmoothedStepToPresent.RemoveAt(0); Matrix O_t_minus_d = hmm.sensorModel().asMatrix( evidenceFromSmoothedStepToPresent[0]); B = O_t_minus_d.inverse().times( transitionMatrix.inverse().times( B.times(transitionMatrix.times(O_t)))); } else { B = B.times(transitionMatrix.times(O_t)); } time += 1; if (time > timelag) { Matrix one = hmm.prior().createUnitBelief().asMatrix(); Matrix forwardMatrix = forwardMessage.asMatrix(); RandomVariable result = hmm.prior().duplicate(); Matrix backwardMessage = (B.times(one)); result.updateFrom(forwardMatrix.arrayTimes(backwardMessage)); result.normalize(); return(result); } else { return(null); } }
public FixedLagSmoothing(HiddenMarkovModel hmm, int timelag) { this.hmm = hmm; this.timelag = timelag; this.evidenceFromSmoothedStepToPresent = new List <String>(); this.time = 1; this.forwardMessage = hmm.prior(); this.B = hmm.transitionModel().unitMatrix(); }
public FixedLagSmoothing(HiddenMarkovModel hmm, int timelag) { this.hmm = hmm; this.timelag = timelag; this.evidenceFromSmoothedStepToPresent = new List<String>(); this.time = 1; this.forwardMessage = hmm.prior(); this.B = hmm.transitionModel().unitMatrix(); }