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)); }
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 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 }); }
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)); }
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); }
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); }
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)); }
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)); }
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 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)); }
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()); } } }