Esempio n. 1
0
        protected void okrB(int nrBad, liczbaY Y)
        {
            double[,] sigmy = new double[aWiazka.m, aWiazka.V + 1];

            foreach (trClass pojKlasa in aWiazka.ListaKlasRuchu)
            {
                double licznikB   = 0;
                double mianownikB = 0;

//                int stStan = (aWiazka.q < aWiazka.V - pojKlasa.t) ? aWiazka.q : aWiazka.V - pojKlasa.t;

                int nrKlasy = aWiazka.ListaKlasRuchu.IndexOf(pojKlasa);
                for (int n = 0; n <= aWiazka.V; n++)
                {
                    double sStr = sigmaProcObslugi[nrKlasy, n];
                    sigmy[nrKlasy, n] = pojKlasa.sigmaZgl(Y[nrKlasy, n]);
                    mianownikB       += stany[n] * pojKlasa.sigmaZgl(Y[nrKlasy, n]);
//                    if (n > stStan)
//                        licznikB += stany[n] * pojKlasa.sigmaZgl(Y[nrKlasy, n]);
//                    else
                    licznikB += stany[n] * pojKlasa.sigmaZgl(Y[nrKlasy, n]) * (1 - sStr);
                }
                wynikiAlg.UstawB(nrBad, pojKlasa, licznikB / mianownikB);
            }
            aWiazka.debug.logIterSigma(sigmy);
        }
Esempio n. 2
0
 public override void Inicjacja(int LiczbaBadan, int LiczbaSerii)
 {
     lBadan             = LiczbaBadan;
     lSerii             = LiczbaSerii;
     Y                  = new liczbaY(aWiazka);
     wynikiAlg          = new WynikiKlas(lBadan, aWiazka.ListaKlasRuchu, true, false);
     sigmaProcPrzyjmZgl = new sigmaPrzyjmZgl(aWiazka);
 }
Esempio n. 3
0
        protected double[,] okrRozklad(Rozklad stany, liczbaY Y)
        {
            double[,] sigmy = new double[aWiazka.m, aWiazka.V + 1];
            stany[0]        = 1;
            double suma = 1;

            for (int n = 1; n <= aWiazka.V; n++)
            {
                stany[n] = 0;

                for (int i = 0; i < aWiazka.m; i++)
                {
                    trClass klasaTemp = aWiazka.ListaKlasRuchu[i];
                    if (klasaTemp.progiKlasy == null)
                    {
                        int t       = aWiazka.ListaKlasRuchu[i].t;
                        int PopStan = n - t;
                        if (PopStan >= 0)
                        {
                            sigmy[i, PopStan] = aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, PopStan]);
                            double temp = stany[PopStan] * klasaTemp.at;
                            temp     *= sigmaProcPrzyjmZgl[i, PopStan];
                            temp     *= aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, PopStan]);
                            stany[n] += temp;
                        }
                    }
                    else
                    {
                        for (int nrPrzedz = 0; nrPrzedz < klasaTemp.progiKlasy.liczbaPrzedziałow; nrPrzedz++)
                        {
                            int t       = aWiazka.ListaKlasRuchu[i].progiKlasy[nrPrzedz].t;
                            int PopStan = n - t;

                            if (PopStan >= 0)
                            {
                                if (klasaTemp.progiKlasy.nrPrzedzialu(PopStan) == nrPrzedz)
                                {
                                    sigmy[i, PopStan] = aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, PopStan]);
                                    double at = klasaTemp.atProgi(PopStan);
                                    stany[n] += (at * stany[PopStan] * aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, PopStan]) * sigmaProcPrzyjmZgl[i, PopStan]);
                                }
                            }
                        }
                    }
                }
                stany[n] /= n;
                suma     += stany[n];
            }
            for (int n = 0; n <= aWiazka.V; n++)
            {
                stany[n] = stany[n] / suma;
            }
            return(sigmy);
        }
Esempio n. 4
0
        protected void okrE(int nrBad, liczbaY Y)
        {
            foreach (trClass pojKlasa in aWiazka.ListaKlasRuchu)
            {
                int    i = aWiazka.ListaKlasRuchu.IndexOf(pojKlasa);
                double E = 0;

                double licznik   = 0;
                double mianownik = 0;
                for (int n = 0; n <= aWiazka.V; n++)
                {
                    licznik   += stany[n] * (1 - sigmaProcPrzyjmZgl[i, n]);
                    mianownik += stany[n];
                }
                E = licznik / mianownik;
                wynikiAlg.UstawE(nrBad, pojKlasa, E);
            }
        }
Esempio n. 5
0
        protected void okrB(int nrBad, liczbaY Y)
        {
            double[,] sigmy = new double[aWiazka.m, aWiazka.V + 1];

            foreach (trClass pojKlasa in aWiazka.ListaKlasRuchu)
            {
                double licznikB   = 0;
                double mianownikB = 0;

                int nrKlasy = aWiazka.ListaKlasRuchu.IndexOf(pojKlasa);
                for (int n = 0; n <= aWiazka.V; n++)
                {
                    double sStr = sigmaProcPrzyjmZgl[nrKlasy, n];
                    sigmy[nrKlasy, n] = pojKlasa.sigmaZgl(Y[nrKlasy, n]);
                    mianownikB       += stany[n] * pojKlasa.sigmaZgl(Y[nrKlasy, n]);
                    licznikB         += stany[n] * pojKlasa.sigmaZgl(Y[nrKlasy, n]) * (1 - sStr);
                }
                wynikiAlg.UstawB(nrBad, pojKlasa, licznikB / mianownikB);
            }
            aWiazka.debug.logIterSigma(sigmy);
        }
Esempio n. 6
0
        /// <summary>
        /// Określa rozkład zajętości na podstawie przejść w przód i wstecz
        /// </summary>
        /// <param name="stany"></param>
        /// <param name="Y"></param>
        /// <returns></returns>
        protected double[,] okrRozkladBF(Rozklad stany, liczbaY Y)
        {
            double[] noweStany = new double[aWiazka.V + 1];
            double[,] sigmy = new double[aWiazka.m, aWiazka.V + 1];
            double suma = 0;

            for (int i = 0; i < aWiazka.m; i++)
            {
                sigmy[i, 0] = aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, 0]);
            }

            for (int n = 0; n <= aWiazka.V; n++)
            {
                double licznik   = 0;
                double mianownik = 0;


                for (int i = 0; i < aWiazka.m; i++)
                {
                    trClass klasaTemp = aWiazka.ListaKlasRuchu[i];
                    sigmy[i, n] = klasaTemp.sigmaZgl(Y[i, n]);

                    if (klasaTemp.progiKlasy == null)
                    {
                        int t        = aWiazka.ListaKlasRuchu[i].t;
                        int PopStan  = n - t;
                        int NastStan = n + t;
                        if (PopStan >= 0)
                        {
                            double temp = stany[PopStan] * klasaTemp.PodajIntZgl(0);
                            temp    *= sigmaProcPrzyjmZgl[i, PopStan];
                            temp    *= klasaTemp.sigmaZgl(Y[i, PopStan]);
                            licznik += temp;
                        }
                        if (NastStan <= aWiazka.V)
                        {
                            double temp = Y[i, NastStan] * klasaTemp.mu * stany[NastStan];
                            licznik   += temp;
                            mianownik += klasaTemp.PodajIntZgl(0) * klasaTemp.sigmaZgl(Y[i, n]) * sigmaProcPrzyjmZgl[i, n];
                        }
                        if (n >= t)
                        {
                            mianownik += klasaTemp.mu * Y[i, n];
                        }
                    }
                    //else
                    //{
                    //    for (int nrPrzedz = 0; nrPrzedz < klasaTemp.progiKlasy.liczbaPrzedziałow; nrPrzedz++)
                    //    {
                    //        int t = aWiazka.ListaKlasRuchu[i].progiKlasy[nrPrzedz].t;
                    //        int PopStan = n - t;

                    //        if (PopStan >= 0)
                    //        {
                    //            if (klasaTemp.progiKlasy.nrPrzedzialu(PopStan) == nrPrzedz)
                    //            {
                    //                sigmy[i, PopStan] = aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, PopStan]);
                    //                double at = klasaTemp.atProgi(PopStan);
                    //                stany[n] += (at * stany[PopStan] * aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, PopStan]) * sigmaProcObslugi[i, PopStan]);
                    //            }
                    //        }
                    //    }
                    //}
                }
                noweStany[n] = licznik / mianownik;
                suma        += noweStany[n];
            }
            for (int n = 0; n <= aWiazka.V; n++)
            {
                stany[n] = noweStany[n] / suma;
            }
            return(sigmy);
        }