Exemple #1
0
 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);
 }
Exemple #2
0
        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));
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
 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();
 }