예제 #1
0
        public LikelihoodFerguson(int[] o, FergusonModel model)
        {
            O     = o;
            Model = model;
            int D = model.MaxPeriodOverall();

            alpha = new double[model.n, D + 1, o.Length + Model.MaxPeriodOverall()];
            P     = new double[o.Length + Model.MaxPeriodOverall()];
            for (int r = 0; r < o.Length + Model.MaxPeriodOverall(); r++)
            {
                for (int i = 0; i < model.n; i++)
                {
                    for (int d = 0; d <= D; d++)
                    {
                        alpha[i, d, r] = -1;
                    }
                }
                P[r] = -1;
            }
        }
예제 #2
0
        /// <summary>
        /// Вероятность наблюдать последовательность O_{1:T} при предположении, что
        /// 1) Первое состояние началось в момент времени 1 или до этого
        /// 2) Последнее состояние закончилось в момент времени T или после него.
        /// </summary>
        /// <param name="t">T</param>
        /// <returns></returns>
        public double FullProbability(int t)
        {
            double sum   = 0;
            int    count = 0;

            for (int j = 0; j < Model.n; j++)
            {
                for (int d = 1; d <= Model.MaxPeriodOverall(); d++)
                {
                    if (Model.ProbabilityByValueAndState(d, j) != 0F)
                    {
                        for (int d1 = 1; d1 <= d; d1++)
                        {
                            double prod = (1D / d) * Probability(t - d1);
                            if (prod != 0F)
                            {
                                prod *= Alpha(j, d, t - d1 + d);
                            }
                            if (prod != 0F)
                            {
                                //                      Debug.WriteLine("fullprod(" + j + ", " + d1 + ", " + t + "): ");
                                prod *= b(j, d, t - d1 + d);
                            }
                            Debug.WriteLine("prod(" + j + ", " + d + ", " + d1 + "): " + prod);
                            count++;
                            Debug.WriteLine("count= " + count);
                            sum += prod;
                            if (sum > 1)
                            {
                            }
                        }
                    }
                }
            }
            return(sum);
        }