示例#1
0
        protected override void okrRozklad()
        {
            base.okrRozklad();
            double[] stanyY = new double[aWiazka.V + 1];
            stanyY[0] = 1;
            double suma = 1;

            for (int n = 1; n <= aWiazka.V; n++)
            {
                for (int i = 0; i < aWiazka.m; i++)
                {
                    trClass zKlasa = aWiazka.ListaKlasRuchu[i];
                    if (n - zKlasa.t >= 0)
                    {
                        double y = 0;
                        if ((n - 2 * zKlasa.t >= 0) && (stany[n - zKlasa.t] != 0))
                        {
                            y = stany[n - 2 * zKlasa.t] * zKlasa.PodajIntZgl(0)
                                / (stany[n - zKlasa.t] * zKlasa.mu);
                        }
                        stanyY[n] += (zKlasa.t * zKlasa.PodajIntZgl(y) / zKlasa.mu
                                      * stanyY[n - zKlasa.t] * pobSigma(n - zKlasa.t, i));
                    }
                }
                stanyY[n] /= n;
                suma      += stanyY[n];
            }

            for (int n = 0; n <= aWiazka.V; n++)
            {
                stany[n] = stanyY[n] / suma;
            }
        }
 public SimClass(trClass badana, SimGroup sWiazka, agenda listaZd, aSimulation algSymulacji)
 {
     klasaRuchu    = badana;
     Symulacja     = algSymulacji;
     this._sWiazka = sWiazka;
     lZdarzen      = listaZd;
     generator     = new Random(badana.GetHashCode());
     _lambda       = badana.PodajIntZgl(0);
     if (badana.progiKlasy == null)
     {
         _mu = badana.mu;
     }
     _uprzyw         = badana.uprzywilejowana;
     lStraconychZgl  = 0;
     lObsluzonychZgl = 0;
 }
示例#3
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);
        }