AIMA.Probability.Reasoning.HiddenMarkovModel.forward_backward C# (CSharp) Method

forward_backward() public method

public forward_backward ( List perceptions ) : List
perceptions List
return List
        public List<RandomVariable> forward_backward(List<String> perceptions)
        {
            RandomVariable[] forwardMessages = new RandomVariable[perceptions
                    .Count + 1];
            RandomVariable backwardMessage = priorDistribution.createUnitBelief();
            RandomVariable[] smoothedBeliefs = new RandomVariable[perceptions
                    .Count + 1];

            forwardMessages[0] = priorDistribution;
            smoothedBeliefs[0] = null;

            // populate forward messages
            for (int i = 0; i < perceptions.Count; i++)
            { // N.B i starts at 1,
                // not zero
                forwardMessages[i + 1] = forward(forwardMessages[i], perceptions[i]);
            }
            for (int i = perceptions.Count; i > 0; i--)
            {
                RandomVariable smoothed = priorDistribution.duplicate();
                smoothed.updateFrom(forwardMessages[i].asMatrix().arrayTimes(
                        backwardMessage.asMatrix()));
                smoothed.normalize();
                smoothedBeliefs[i] = smoothed;
                backwardMessage = calculate_next_backward_message(
                        forwardMessages[i], backwardMessage, perceptions[i - 1]);
            }

            return new List<RandomVariable>(smoothedBeliefs);
        }