Пример #1
0
        public void testFilteringWithParticleSetsForRobotHmm()
        {
            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 = robot.prior().toParticleSet(robot, r, 100);
            Assert.AreEqual(56, starting
                    .numberOfParticlesWithState(HmmConstants.DOOR_OPEN));
            Assert.AreEqual(44, starting
                    .numberOfParticlesWithState(HmmConstants.DOOR_CLOSED));

            // step one = robot takes no action but senses open door
            ParticleSet afterStepOne = starting.filter(HmmConstants.SEE_DOOR_OPEN,
                    r);
            Assert.AreEqual(66, afterStepOne
                    .numberOfParticlesWithState(HmmConstants.DOOR_OPEN));
            Assert.AreEqual(34, afterStepOne
                    .numberOfParticlesWithState(HmmConstants.DOOR_CLOSED));

            // step two = robot pushes the door and then senses open door
            ParticleSet afterStepTwo = starting.filter(HmmConstants.PUSH_DOOR,
                    HmmConstants.SEE_DOOR_OPEN, r);
            Assert.AreEqual(100, afterStepTwo
                    .numberOfParticlesWithState(HmmConstants.DOOR_OPEN));
            Assert.AreEqual(0, afterStepTwo
                    .numberOfParticlesWithState(HmmConstants.DOOR_CLOSED));
        }
Пример #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));
        }
Пример #3
0
	public void setUp() {
		cw = new CellWorld(3, 4, -0.04);

		cw.markBlocked(2, 2);

		cw.setTerminalState(2, 4);
		cw.setReward(2, 4, -1);

		cw.setTerminalState(3, 4);
		cw.setReward(3, 4, 1);

		alwaysLessThanEightyPercent = new MockRandomizer(new double[] { 0.7 });
		betweenEightyAndNinetyPercent = new MockRandomizer(
				new double[] { 0.85 });
		greaterThanNinetyPercent = new MockRandomizer(new double[] { 0.95 });
	}
Пример #4
0
        public void testPriorSample_basic()
        {
            // AIMA3e pg. 530
            IBayesianNetwork bn = BayesNetExampleFactory
                                  .constructCloudySprinklerRainWetGrassNetwork();
            IRandom r = new MockRandomizer(
                new double[] { 0.5, 0.5, 0.5, 0.5 });

            PriorSample ps = new PriorSample(r);
            IMap <IRandomVariable, object> even = ps.priorSample(bn);

            Assert.AreEqual(4, even.GetKeys().Size());
            Assert.AreEqual(true, even.Get(ExampleRV.CLOUDY_RV));
            Assert.AreEqual(false, even.Get(ExampleRV.SPRINKLER_RV));
            Assert.AreEqual(true, even.Get(ExampleRV.RAIN_RV));
            Assert.AreEqual(true, even.Get(ExampleRV.WET_GRASS_RV));
        }
Пример #5
0
        public void testParticleSetForPredictedStateGeneratedFromOldStateParticleSet()
        {
            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 ps = rainman.prior().toParticleSet(rainman, r, 10);

            Assert.AreEqual(6, ps
                            .numberOfParticlesWithState(HmmConstants.RAINING));
            Assert.AreEqual(4, ps
                            .numberOfParticlesWithState(HmmConstants.NOT_RAINING));

            ParticleSet nps = ps.generateParticleSetForPredictedState(r);

            Assert.AreEqual(7, nps
                            .numberOfParticlesWithState(HmmConstants.RAINING));
            Assert.AreEqual(3, nps
                            .numberOfParticlesWithState(HmmConstants.NOT_RAINING));
        }
        public void testQLearningAgent()
        {
            QLearningAgent <CellWorldPosition, String> qla = new QLearningAgent <CellWorldPosition, string>(
                fourByThree);
            Randomizer r = new MockRandomizer(new double[] { 0.1, 0.9, 0.2, 0.8,
                                                             0.3, 0.7, 0.4, 0.6, 0.5 });

            // Randomizer r = new JavaRandomizer();
            Dictionary <Pair <CellWorldPosition, String>, Double> q = null;
            QTable <CellWorldPosition, String> qTable = null;

            for (int i = 0; i < 100; i++)
            {
                qla.executeTrial(r);
                q      = qla.getQ();
                qTable = qla.getQTable();
            }
            // qTable.normalize();
            // System.Console.WriteLine(qTable);
            // System.Console.WriteLine(qTable.getPolicy());
        }
        public void testPassiveTDAgent()
        {
            PassiveTDAgent <CellWorldPosition, String> agent = new PassiveTDAgent <CellWorldPosition, String>(
                fourByThree, policy);
            // Randomizer r = new JavaRandomizer();
            Randomizer r = new MockRandomizer(new double[] { 0.1, 0.9, 0.2, 0.8,
                                                             0.3, 0.7, 0.4, 0.6, 0.5 });
            MDPUtilityFunction <CellWorldPosition> uf = null;

            for (int i = 0; i < 200; i++)
            {
                agent.executeTrial(r);
                uf = agent.getUtilityFunction();
                // System.Console.WriteLine(uf);
            }

            Assert.AreEqual(0.662, uf.getUtility(new CellWorldPosition(1, 1)),
                            0.001);
            Assert.AreEqual(0.610, uf.getUtility(new CellWorldPosition(1, 2)),
                            0.001);
            Assert.AreEqual(0.553, uf.getUtility(new CellWorldPosition(1, 3)),
                            0.001);
            Assert.AreEqual(0.496, uf.getUtility(new CellWorldPosition(1, 4)),
                            0.001);

            Assert.AreEqual(0.735, uf.getUtility(new CellWorldPosition(2, 1)),
                            0.001);
            Assert.AreEqual(0.835, uf.getUtility(new CellWorldPosition(2, 3)),
                            0.001);
            // AreEqual(-1.0, uf.getUtility(new
            // CellWorldPosition(2,4)),0.001);//the pseudo random genrator never
            // gets to this square

            Assert.AreEqual(0.789, uf.getUtility(new CellWorldPosition(3, 1)),
                            0.001);
            Assert.AreEqual(0.889, uf.getUtility(new CellWorldPosition(3, 3)),
                            0.001);
            Assert.AreEqual(1.0, uf.getUtility(new CellWorldPosition(3, 4)),
                            0.001);
        }
        public void testPassiveADPAgent()
        {
            PassiveADPAgent <CellWorldPosition, String> agent = new PassiveADPAgent <CellWorldPosition, String>(
                fourByThree, policy);

            // Randomizer r = new JavaRandomizer();
            Randomizer r = new MockRandomizer(new double[] { 0.1, 0.9, 0.2, 0.8,
                                                             0.3, 0.7, 0.4, 0.6, 0.5 });
            MDPUtilityFunction <CellWorldPosition> uf = null;

            for (int i = 0; i < 100; i++)
            {
                agent.executeTrial(r);
                uf = agent.getUtilityFunction();
            }

            Assert.AreEqual(0.676, uf.getUtility(new CellWorldPosition(1, 1)),
                            0.001);
            Assert.AreEqual(0.626, uf.getUtility(new CellWorldPosition(1, 2)),
                            0.001);
            Assert.AreEqual(0.573, uf.getUtility(new CellWorldPosition(1, 3)),
                            0.001);
            Assert.AreEqual(0.519, uf.getUtility(new CellWorldPosition(1, 4)),
                            0.001);

            Assert.AreEqual(0.746, uf.getUtility(new CellWorldPosition(2, 1)),
                            0.001);
            Assert.AreEqual(0.865, uf.getUtility(new CellWorldPosition(2, 3)),
                            0.001);
            // AreEqual(-1.0, uf.getUtility(new
            // CellWorldPosition(2,4)),0.001);//the pseudo random genrator never
            // gets to this square

            Assert.AreEqual(0.796, uf.getUtility(new CellWorldPosition(3, 1)),
                            0.001);
            Assert.AreEqual(0.906, uf.getUtility(new CellWorldPosition(3, 3)),
                            0.001);
            Assert.AreEqual(1.0, uf.getUtility(new CellWorldPosition(3, 4)),
                            0.001);
        }
Пример #9
0
        public List <AssignmentProposition[][]> AskParticleFiltering(object owner, IContextLookup globalVars)
        {
            var randomVars = DynamicBayesianNetwork.GetRandomVariables(owner, globalVars);
            var model      = DynamicBayesianNetwork.GetNetwork(randomVars);

            Randomizer objRandomizer;

            switch (RandomizerType)
            {
            case RandomizerType.Random:
                objRandomizer = new JavaRandomizer();
                break;

            case RandomizerType.Mock:
                objRandomizer = new MockRandomizer(RandomizerValues.ToArray());
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var objAlgorithm = new ParticleFiltering(SampleNb, (DynamicBayesianNetwork)model, objRandomizer);

            var objEvidences = new java.util.ArrayList(Evidences.Count);
            var toReturn     = new List <AssignmentProposition[][]>();

            foreach (List <PropositionInfo> propositions in Evidences)
            {
                var stepEvidences = new List <AssignmentProposition>(propositions.Count);
                foreach (PropositionInfo proposition in propositions)
                {
                    stepEvidences.Add((AssignmentProposition)proposition.GetProposition(owner, globalVars, randomVars));
                }
                toReturn.Add(objAlgorithm.particleFiltering(stepEvidences.Cast <AssignmentProposition>().ToArray()));
            }
            return(toReturn);
        }
Пример #10
0
        public void testParticleSetForPerceptionUpdatedStateGeneratedFromPredictedStateParticleSetGivenPerception()
        {
            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, 10);
            ParticleSet predicted = starting
                                    .generateParticleSetForPredictedState(r);

            ParticleSet updatedWithPerceptionOfUmbrella = predicted
                                                          .perceptionUpdate(HmmConstants.SEE_UMBRELLA, r);

            Assert.AreEqual(9, updatedWithPerceptionOfUmbrella
                            .numberOfParticlesWithState(HmmConstants.RAINING));
            Assert.AreEqual(1, updatedWithPerceptionOfUmbrella
                            .numberOfParticlesWithState(HmmConstants.NOT_RAINING));

            ParticleSet updatedWithPerceptionOfNoUmbrella = predicted
                                                            .perceptionUpdate(HmmConstants.SEE_NO_UMBRELLA, r);

            Assert.AreEqual(2, updatedWithPerceptionOfNoUmbrella
                            .numberOfParticlesWithState(HmmConstants.RAINING));
            Assert.AreEqual(8, updatedWithPerceptionOfNoUmbrella
                            .numberOfParticlesWithState(HmmConstants.NOT_RAINING));
        }
Пример #11
0
        public void testParticleSetForPerceptionUpdatedStateGeneratedFromPredictedStateParticleSetGivenPerception()
        {
            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, 10);
            ParticleSet predicted = starting
                    .generateParticleSetForPredictedState(r);

            ParticleSet updatedWithPerceptionOfUmbrella = predicted
                    .perceptionUpdate(HmmConstants.SEE_UMBRELLA, r);
            Assert.AreEqual(9, updatedWithPerceptionOfUmbrella
                    .numberOfParticlesWithState(HmmConstants.RAINING));
            Assert.AreEqual(1, updatedWithPerceptionOfUmbrella
                    .numberOfParticlesWithState(HmmConstants.NOT_RAINING));

            ParticleSet updatedWithPerceptionOfNoUmbrella = predicted
                    .perceptionUpdate(HmmConstants.SEE_NO_UMBRELLA, r);
            Assert.AreEqual(2, updatedWithPerceptionOfNoUmbrella
                    .numberOfParticlesWithState(HmmConstants.RAINING));
            Assert.AreEqual(8, updatedWithPerceptionOfNoUmbrella
                    .numberOfParticlesWithState(HmmConstants.NOT_RAINING));
        }
Пример #12
0
        public void testParticleSetForPredictedStateGeneratedFromOldStateParticleSet()
        {
            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 ps = rainman.prior().toParticleSet(rainman, r, 10);
            Assert.AreEqual(6, ps
                    .numberOfParticlesWithState(HmmConstants.RAINING));
            Assert.AreEqual(4, ps
                    .numberOfParticlesWithState(HmmConstants.NOT_RAINING));

            ParticleSet nps = ps.generateParticleSetForPredictedState(r);
            Assert.AreEqual(7, nps
                    .numberOfParticlesWithState(HmmConstants.RAINING));
            Assert.AreEqual(3, nps
                    .numberOfParticlesWithState(HmmConstants.NOT_RAINING));
        }
Пример #13
0
        public void testRoundTripConversion()
        {
            RandomVariable rv = particleSet.toRandomVariable();
            Randomizer r = new MockRandomizer(new double[] { 0.1, 0.2, 0.3, 0.4,
				0.9 });
            ParticleSet ps2 = rv.toParticleSet(rainman, r, 10);
            Assert.AreEqual(8, ps2
                    .numberOfParticlesWithState(HmmConstants.RAINING));
            Assert.AreEqual(2, ps2
                    .numberOfParticlesWithState(HmmConstants.NOT_RAINING));
        }
Пример #14
0
        public void test_AIMA3e_Fig15_18()
        {
            IRandom mr = new MockRandomizer(new double[] {
                // Prior Sample:
                // 8 with Rain_t-1=true from prior distribution
                0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
                // 2 with Rain_t-1=false from prior distribution
                0.6, 0.6,
                // (a) Propagate 6 samples Rain_t=true
                0.7, 0.7, 0.7, 0.7, 0.7, 0.7,
                // 4 samples Rain_t=false
                0.71, 0.71, 0.31, 0.31,
                // (b) Weight should be for first 6 samples:
                // Rain_t-1=true, Rain_t=true, Umbrella_t=false = 0.1
                // Next 2 samples:
                // Rain_t-1=true, Rain_t=false, Umbrealla_t=false= 0.8
                // Final 2 samples:
                // Rain_t-1=false, Rain_t=false, Umbrella_t=false = 0.8
                // gives W[] =
                // [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.8, 0.8, 0.8, 0.8]
                // normalized =
                // [0.026, ...., 0.211, ....] is approx. 0.156 = true
                // the remainder is false
                // (c) Resample 2 Rain_t=true, 8 Rain_t=false
                0.15, 0.15, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
                //
                // Next Sample:
                // (a) Propagate 1 samples Rain_t=true
                0.7,
                // 9 samples Rain_t=false
                0.71, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31,
                // (c) resample 1 Rain_t=true, 9 Rain_t=false
                0.0001, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2
            });

            int N = 10;
            ParticleFiltering pf = new ParticleFiltering(N, DynamicBayesNetExampleFactory.getUmbrellaWorldNetwork(), mr);

            AssignmentProposition[] e = new AssignmentProposition[] { new AssignmentProposition(ExampleRV.UMBREALLA_t_RV, false) };

            AssignmentProposition[][] S = pf.particleFiltering(e);

            Assert.AreEqual(N, S.Length);
            for (int i = 0; i < N; ++i)
            {
                Assert.AreEqual(1, S[i].Length);
                AssignmentProposition ap = S[i][0];
                Assert.AreEqual(ExampleRV.RAIN_t_RV, ap.getTermVariable());
                if (i < 2)
                {
                    Assert.AreEqual(true, ap.getValue());
                }
                else
                {
                    Assert.AreEqual(false, ap.getValue());
                }
            }

            // Generate next sample to ensure everything roles forward ok
            // in this case with prefixed probabilities only expect 1 Rain_t=true
            S = pf.particleFiltering(e);
            Assert.AreEqual(N, S.Length);
            for (int i = 0; i < N; ++i)
            {
                Assert.AreEqual(1, S[i].Length);
                AssignmentProposition ap = S[i][0];
                Assert.AreEqual(ExampleRV.RAIN_t_RV, ap.getTermVariable());
                if (i < 1)
                {
                    Assert.AreEqual(true, ap.getValue());
                }
                else
                {
                    Assert.AreEqual(false, ap.getValue());
                }
            }
        }