Example #1
0
 private int GetMinPeriod(int stateNumber)
 {
     return(MatrixUtils.GetRow(Model.F, stateNumber)
            .Select((value, index) => new { value, index })
            .Where(item => !DoubleUtils.EqualsZero(item.value))
            .OrderBy(item => item.index)
            .First()
            .index);
 }
Example #2
0
        private double CalculateScaledWordProbability(int startIndex, int endIndex, int state, int duration)
        {
            double prod = CalculateWordProbability(startIndex, endIndex, state, duration);

            if (!DoubleUtils.EqualsZero(prod))
            {
                prod *= CalculateProbability(startIndex - 1);
            }
            if (!DoubleUtils.EqualsZero(prod))
            {
                prod /= CalculateProbability(endIndex);
            }
            return(prod);
        }
Example #3
0
        public int RealizeBinaryProbability(double probability)
        {
            if (DoubleUtils.EqualsZero(probability))
            {
                return(0);
            }
            double x = generator.GetValue();

            if (x < probability)
            {
                return(1);
            }
            else
            {
                return(0);
            }
        }
Example #4
0
        private double CalculateProbability(int endIndex)
        {
            Console.WriteLine("Prob_" + endIndex);
            if (endIndex <= 0)
            {
                Console.WriteLine("0 Prob_" + endIndex + "=" + 1);
                return(1);
            }
            else
            {
                if (probabilityLookup.ContainsKey(endIndex))
                {
                    Console.WriteLine("L Prob_" + endIndex + "=" + probabilityLookup[endIndex]);
                    return(probabilityLookup[endIndex]);
                }
                else
                {
                    double sum = 0;
                    for (int i = 0; i < Model.N; i++)
                    {
                        for (int d = 1; d < Model.Dmax; d++)
                        {
                            for (int d1 = 1; d1 <= d; d1++)
                            {
                                double prod = CalculateProbability(endIndex - d1);

                                if (!DoubleUtils.EqualsZero(prod))
                                {
                                    prod *= CalculateForwardVariable(endIndex - d1 + d, i, d);
                                }
                                if (!DoubleUtils.EqualsZero(prod))
                                {
                                    prod *= CalculateWordProbability(endIndex - d1 + 1, endIndex - d1 + d, i, d);
                                }
                                sum += prod;
                            }
                        }
                    }
                    probabilityLookup[endIndex] = sum;
                    Console.WriteLine("S Prob_" + endIndex + "=" + sum);
                    return(sum);
                }
            }
        }
Example #5
0
        private double CalculateForwardVariable(int endIndex, int state, int duration)
        {
            Console.WriteLine("Alpha_" + endIndex + "(" + state + "," + duration + ")");

            if (endIndex <= 0)
            {
                Console.WriteLine("0_Alpha_" + endIndex + "(" + state + "," + duration + ")=" + Model.Pi[state] * Model.F[state, duration - 1]);
                return(Model.Pi[state] * Model.F[state, duration]);
            }
            else
            {
                Tuple <int, int, int> key = Tuple.Create(endIndex, state, duration);
                if (forwardVariableLookup.ContainsKey(key))
                {
                    Console.WriteLine("l_Alpha_" + endIndex + "(" + state + "," + duration + ")=" + forwardVariableLookup[key]);
                    return(forwardVariableLookup[key]);
                }
                else
                {
                    double sum = 0;
                    for (int i = 0; i < Model.N; i++)
                    {
                        for (int d = 1; d < Model.Dmax; d++)
                        {
                            double prod = Model.A[i, state] * Model.F[state, duration];

                            if (!DoubleUtils.EqualsZero(prod))
                            {
                                prod *= CalculateForwardVariable(endIndex - duration, i, d);
                            }
                            if (!DoubleUtils.EqualsZero(prod))
                            {
                                prod *= CalculateScaledWordProbability(endIndex - duration - d + 1, endIndex - duration, i, d);
                            }
                            sum += prod;
                        }
                    }
                    forwardVariableLookup[key] = sum;
                    Console.WriteLine("s_Alpha_" + endIndex + "(" + state + "," + duration + ")=" + sum);
                    return(sum);
                }
            }
        }