Exemplo n.º 1
0
        static void forwardBackWardDemo()
        {
            System.Console.WriteLine("DEMO: Forward-BackWard");
            System.Console.WriteLine("======================");

            System.Console.WriteLine("Umbrella World");
            System.Console.WriteLine("--------------");
            ForwardBackward uw = new ForwardBackward(
                GenericTemporalModelFactory.getUmbrellaWorldTransitionModel(),
                GenericTemporalModelFactory.getUmbrellaWorld_Xt_to_Xtm1_Map(),
                GenericTemporalModelFactory.getUmbrellaWorldSensorModel());

            ICategoricalDistribution prior = new ProbabilityTable(new double[] {
                0.5, 0.5
            }, ExampleRV.RAIN_t_RV);

            // Day 1
            ICollection <ICollection <AssignmentProposition> > evidence = CollectionFactory.CreateQueue <ICollection <AssignmentProposition> >();
            ICollection <AssignmentProposition> e1 = CollectionFactory.CreateQueue <AssignmentProposition>();

            e1.Add(new AssignmentProposition(ExampleRV.UMBREALLA_t_RV, true));
            evidence.Add(e1);

            ICollection <ICategoricalDistribution> smoothed = uw.forwardBackward(evidence, prior);

            System.Console.WriteLine("Day 1 (Umbrealla_t=true) smoothed:\nday 1 = " + smoothed.Get(0));

            // Day 2
            ICollection <AssignmentProposition> e2 = CollectionFactory.CreateQueue <AssignmentProposition>();

            e2.Add(new AssignmentProposition(ExampleRV.UMBREALLA_t_RV, true));
            evidence.Add(e2);

            smoothed = uw.forwardBackward(evidence, prior);

            System.Console.WriteLine("Day 2 (Umbrealla_t=true) smoothed:\nday 1 = "
                                     + smoothed.Get(0) + "\nday 2 = " + smoothed.Get(1));

            // Day 3
            ICollection <AssignmentProposition> e3 = CollectionFactory.CreateQueue <AssignmentProposition>();

            e3.Add(new AssignmentProposition(ExampleRV.UMBREALLA_t_RV, false));
            evidence.Add(e3);

            smoothed = uw.forwardBackward(evidence, prior);

            System.Console.WriteLine("Day 3 (Umbrealla_t=false) smoothed:\nday 1 = "
                                     + smoothed.Get(0) + "\nday 2 = " + smoothed.Get(1)
                                     + "\nday 3 = " + smoothed.Get(2));

            System.Console.WriteLine("======================");
        }
Exemplo n.º 2
0
        public List <CategoricalDistribution> DoForwardBackward(object owner, IContextLookup globalVars)
        {
            var randomVariables   = TemporalModel.TransitionModel.GetRandomVariables(owner, globalVars);
            var transitionalModel = new FiniteBayesModel(TemporalModel.TransitionModel.GetNetwork(randomVariables));

            randomVariables = TemporalModel.SensorModel.GetRandomVariables(owner, globalVars, randomVariables);
            var sensoryModel = new FiniteBayesModel(TemporalModel.SensorModel.GetNetwork(randomVariables));

            var temporalMap = TemporalModel.GetReverseTemporalMap(randomVariables);

            var forwardBackwardAlgorithm = new ForwardBackward(transitionalModel, temporalMap, sensoryModel);

            var objEvidences = new java.util.ArrayList(Evidences.Count);

            foreach (List <PropositionInfo> propositions in Evidences)
            {
                var stepEvidences = new java.util.ArrayList(propositions.Count);
                foreach (PropositionInfo proposition in propositions)
                {
                    stepEvidences.add(proposition.GetProposition(owner, globalVars, randomVariables));
                }
                objEvidences.add(stepEvidences);
            }

            CategoricalDistribution objPrior = Prior.GetProbabilityTable(randomVariables);

            return(forwardBackwardAlgorithm.forwardBackward(objEvidences, objPrior).toArray().Select(o => (CategoricalDistribution)o).ToList());
        }