AIMA.Core.Probability.Reasoning.HMMFactory.createRobotHMM C# (CSharp) Method

createRobotHMM() public static method

public static createRobotHMM ( ) : HiddenMarkovModel
return HiddenMarkovModel
        public static HiddenMarkovModel createRobotHMM()
        {

            // Example adopted from Sebastian Thrun's "Probabilistic Robotics"
            // Chapter 2
            // A robot faces a door. The state of the door (open or closed)
            // constitutes the "hidden state"
            // The robot's sensor detects a "closed" or "open" state.
            // (Perception may be out of synch with reality because sensors are
            // probabilistic).
            // The robot can either "do nothing" or "push" the door. These are the
            // possible actions.

            List<String> states = new List<String>{
				HmmConstants.DOOR_OPEN, HmmConstants.DOOR_CLOSED };
            List<String> actions = new List<String> {
				HmmConstants.DO_NOTHING, HmmConstants.PUSH_DOOR };
            List<String> perceptions = new List<String> {
				HmmConstants.SEE_DOOR_OPEN, HmmConstants.SEE_DOOR_CLOSED };

            RandomVariable prior = new RandomVariable(states);
            TransitionModel tm = new TransitionModel(states, actions);
            // tm.setTransitionProbability(start_state, action, end_state,
            // probability)
            // given a start state and an action the probability of the end state is
            // probability
            //tm.setTransitionProbability(HmmConstants.DOOR_OPEN,
            //        HmmConstants.DO_NOTHING, HmmConstants.DOOR_OPEN, 1.0);
            tm.setTransitionProbability(HmmConstants.DOOR_OPEN,
                    HmmConstants.DO_NOTHING, HmmConstants.DOOR_OPEN, 1.0);
            tm.setTransitionProbability(HmmConstants.DOOR_OPEN,
                    HmmConstants.DO_NOTHING, HmmConstants.DOOR_CLOSED, 0.0);
            tm.setTransitionProbability(HmmConstants.DOOR_CLOSED,
                    HmmConstants.DO_NOTHING, HmmConstants.DOOR_CLOSED, 1.0);
            tm.setTransitionProbability(HmmConstants.DOOR_CLOSED,
                    HmmConstants.DO_NOTHING, HmmConstants.DOOR_OPEN, 0.0);

            tm.setTransitionProbability(HmmConstants.DOOR_OPEN,
                    HmmConstants.PUSH_DOOR, HmmConstants.DOOR_OPEN, 1.0);
            tm.setTransitionProbability(HmmConstants.DOOR_OPEN,
                    HmmConstants.PUSH_DOOR, HmmConstants.DOOR_CLOSED, 0.0);
            tm.setTransitionProbability(HmmConstants.DOOR_CLOSED,
                    HmmConstants.PUSH_DOOR, HmmConstants.DOOR_CLOSED, 0.2);
            tm.setTransitionProbability(HmmConstants.DOOR_CLOSED,
                    HmmConstants.PUSH_DOOR, HmmConstants.DOOR_OPEN, 0.8);

            SensorModel sm = new SensorModel(states, perceptions);
            // sm.setSensingProbaility(state,perception,p); given a state the
            // probability of a perception is p
            sm.setSensingProbability(HmmConstants.DOOR_OPEN,
                    HmmConstants.SEE_DOOR_CLOSED, 0.4);
            sm.setSensingProbability(HmmConstants.DOOR_OPEN,
                    HmmConstants.SEE_DOOR_OPEN, 0.6);
            sm.setSensingProbability(HmmConstants.DOOR_CLOSED,
                    HmmConstants.SEE_DOOR_OPEN, 0.2);
            sm.setSensingProbability(HmmConstants.DOOR_CLOSED,
                    HmmConstants.SEE_DOOR_CLOSED, 0.8);

            HiddenMarkovModel hmm = new HiddenMarkovModel(prior, tm, sm);
            return hmm;
        }