コード例 #1
0
        protected override double gammaX(rGamma rX, int lX, int n)
        {
            double gammaX = 0;

            double mianownik = 0;

            for (int i = 0; i < rX.klasy.Length; i++)
            {
                int t = rX.klasy[i].t;
                if (t > lX)
                {
                    continue;
                }
                if (rX.q[lX - t] == 0)
                {
                    continue;
                }

                double mu = rX.wiazka.ListaKlasRuchu[rX.klasy[i].i].mu;
                double x  = rX.klasy[i].waga * mu; // / rX.delta(lX - t);

                //Licznik
                gammaX    += (x * rX.wiazka.sigmy[rX.klasy[i].i, n - t]);
                mianownik += (x * rX.wiazka.sigmy[rX.klasy[i].i, lX - t]);
            }
            gammaX = (mianownik == 0) ? 0 : gammaX / mianownik;

            return(gammaX);
        }
コード例 #2
0
        protected virtual double gammaX(rGamma rX, int lX, int n)
        {
            double gammaX = 0;

            double mianownik = 0;

            for (int i = 0; i < rX.klasy.Length; i++)
            {
                int t = rX.klasy[i].t;
                if (t > lX)
                {
                    continue;
                }
                if (rX.q[lX - t] == 0)
                {
                    continue;
                }

                double x = rX.q[lX - t] * rX.klasy[i].waga / rX.delta(lX - t);
                mianownik += x;
                gammaX    += (x * rX.wiazka.sigmy[rX.klasy[i].i, n - t]);
            }
            gammaX = (mianownik == 0) ? 0 : gammaX / mianownik;

            return(gammaX);
        }
コード例 #3
0
        public void Agreguj(rGamma agregowany)
        {
            int V = p.Length - 1;

            double[] pNowy = new double[V + 1];
            double[] qNowy = new double[V + 1];

            int m  = klasy.Length + agregowany.klasy.Length;
            int m1 = klasy.Length;
            int m2 = agregowany.klasy.Length;

            klasaUpr [] klasyNowe = new klasaUpr[m];
            for (int i = 0; i < m1; i++)
            {
                klasyNowe[i] = klasy[i];
            }
            for (int i = 0; i < m2; i++)
            {
                klasyNowe[i + m1] = agregowany.klasy[i];
            }

            for (int n = 0; n <= V; n++)
            {
                for (int l = 0; l <= n; l++)
                {
                    pNowy[n] += p[l] * agregowany.p[n - l];
                    qNowy[n] += q[l] * agregowany.q[n - l] * gamma(this, l, agregowany, n - l);
                }
            }

            p     = pNowy;
            q     = qNowy;
            klasy = klasyNowe;
        }
コード例 #4
0
        /// <summary>
        /// Współczynnik warunkowego dopuszczenia kombinacji
        /// </summary>
        /// <param name="rC">Rozkład zajętości przez zgłoszenia klas ze zbioru C</param>
        /// <param name="lC">Liczba zajętych PJP przez zgłoszenia klas ze zbioru C</param>
        /// <param name="rD">Rozkład zajętości przez zgłoszenia klas ze zbioru C</param>
        /// <param name="lD">Liczba zajętych PJP przez zgłoszenia klas ze zbioru C</param>
        /// <returns>Prawdopodobieńśtwo dopuszczenia kombinacji</returns>
        protected double gamma(rGamma rC, int lC, rGamma rD, int lD)
        {
            if (lC + lD == 0)
            {
                return(1);
            }

            double gammaC = gammaX(rC, lC, lC + lD);
            double gammaD = gammaX(rD, lD, lC + lD);

            return((lC * gammaC + lD * gammaD) / (lC + lD));
        }