public void AgregujR(Rozklad rB)
 {
     double[] noweStany = new double[_v + 1];
     for (int lA = 0; lA <= _v; lA++)
     {
         if (lA > wiazka.q + tMax)
         {
             break;
         }
         for (int lB = 0; lA + lB <= _v; lB++)
         {
             if (lA + lB > wiazka.q + rB.tMax)
             {
                 break;
             }
             noweStany[lA + lB] += (stany[lA] * rB[lB]);
         }
     }
     for (int n = 0; n <= _v; n++)
     {
         stany[n] = noweStany[n];
     }
     foreach (trClass kRuchu in rB.zagregowaneKlasy)
     {
         zagregowaneKlasy.Add(kRuchu);
     }
 }
Exemple #2
0
        public override void Agreguj(Rozklad rB)
        {
            _v = (_v > rB.V) ? _v : rB.V;
            double[] noweStany = new double[_v + 1];
            for (int n = 0; n <= this.wiazka.q + 1; n++)
            {
                noweStany[n] = 0;
                for (int l = 0; l <= n; l++)
                {
                    noweStany[n] += this[n - l] * rB[l];
                }
            }
            for (int n = wiazka.q + 2; n <= _v; n++)
            {
                noweStany[n] = 0;
                for (int l = 0; l <= n; l++)
                {
                    double wspSigma = ((n - l) * OblGamma(this, n, (n - l)) + l * OblGamma(rB, n, l)) / (double)n;
                    noweStany[n] += wspSigma * this[n - l] * rB[l];
                }
            }
            for (int n = 0; n <= _v; n++)
            {
                stany[n] = noweStany[n];
            }

            foreach (trClass kRuchu in rB.zagregowaneKlasy)
            {
                zagregowaneKlasy.Add(kRuchu);
            }
        }
Exemple #3
0
        public override void Agreguj(Rozklad rB, sigmaPrzyjmZgl sigmy)
        {
            _v = (_v > rB.V) ? _v : rB.V;
            double[] noweStany = new double[_v + 1];


            noweStany[0] = this[0] * rB[0];
            for (int n = 1; n <= _v; n++)
            {
                noweStany[n] = 0;
                for (int l = 0; l <= n; l++)
                {
                    double sigmaA   = OblGamma(this, n, (n - l), sigmy);
                    double sigmaB   = OblGamma(rB, n, l, sigmy);
                    double wspSigma = ((n - l) * sigmaA + l * sigmaB) / (double)n;
                    noweStany[n] += wspSigma * this[n - l] * rB[l];
                }
            }
            for (int n = 0; n <= _v; n++)
            {
                stany[n] = noweStany[n];
            }

            foreach (trClass kRuchu in rB.zagregowaneKlasy)
            {
                zagregowaneKlasy.Add(kRuchu);
            }
        }
Exemple #4
0
 public void dodaj(Rozklad dodawany)
 {
     for (int n = 0; n <= _v; n++)
     {
         stany[n] += dodawany[n];
     }
 }
 public void Agreguj(Rozklad rB, Rozklad rPB, sigmaPrzyjmZgl sigmy)
 {
     pomocniczy.Agreguj(rB);
     double[] noweStany = new double[_v + 1];
     for (int lA = 0; lA <= _v; lA++)
     {
         if (lA > wiazka.q + tMax)
         {
             break;
         }
         for (int lB = 0; lA + lB <= _v; lB++)
         {
             double gamma = OblGamma(lA, lB, rB.zagregowaneKlasy, sigmy, rPB);
             noweStany[lA + lB] += (stany[lA] * rB[lB] * gamma);
         }
     }
     for (int n = 0; n <= _v; n++)
     {
         stany[n] = noweStany[n];
     }
     foreach (trClass kRuchu in rB.zagregowaneKlasy)
     {
         zagregowaneKlasy.Add(kRuchu);
     }
 }
Exemple #6
0
        public virtual Rozklad zagregujKlase(trClass klasa)
        {
            if (zagregowaneKlasy.Count == 0)
            {
                return(new Rozklad(wiazka, klasa));
            }

            Rozklad wynik = new Rozklad(this);
            Rozklad p     = new Rozklad(wiazka, klasa);


            double[] stany = new double[V + 1];
            double   suma  = 0;

            for (int n = 0; n <= V; n++)
            {
                for (int lC = 0; lC <= n; lC++)
                {
                    double tmp = this[lC] * p[n - lC];
                    suma     += tmp;
                    stany[n] += tmp;
                }
            }

            for (int n = 0; n <= V; n++)
            {
                wynik[n] = stany[n] / suma;
            }

            return(wynik);
        }
Exemple #7
0
        protected virtual void Splataj(Rozklad rA, Rozklad rB, int nowaDlugosc)
        {
            foreach (trClass kRuchu in rA.zagregowaneKlasy)
            {
                zagregowaneKlasy.Add(kRuchu);
            }
            foreach (trClass kRuchu in rB.zagregowaneKlasy)
            {
                zagregowaneKlasy.Add(kRuchu);
            }

            _v    = nowaDlugosc;
            stany = new double[_v + 1];
            for (int n = 0; n <= _v; n++)
            {
                stany[n] = 0;
                for (int l = 0; l <= n; l++)
                {
                    if ((l <= rB.V) && (n - l <= rA.V))
                    {
                        stany[n] += rB[l] * rA[n - l];
                    }
                }
            }
            wiazka = rA.wiazka;
        }
Exemple #8
0
        public override double OblGamma(Rozklad zrodlo, int nStan, int lZajPJP, sigmaPrzyjmZgl sigmy)
        {
            double licznik   = 0;
            double mianownik = 0;

            int x = nStan - zrodlo.wiazka.q;

            foreach (trClass kRuchu in zrodlo.zagregowaneKlasy)
            {
                int    globNrKlasy = zrodlo.wiazka.ListaKlasRuchu.IndexOf(kRuchu);
                double UdzKlasy    = kRuchu.PodajIntZgl(lZajPJP) * kRuchu.t;

                if (lZajPJP >= kRuchu.t)
                {
                    licznik += (UdzKlasy * sigmy[globNrKlasy, lZajPJP - kRuchu.t] * sigmy[globNrKlasy, nStan - kRuchu.t]);
                }
                if (lZajPJP >= kRuchu.t)
                {
                    mianownik += (UdzKlasy * sigmy[globNrKlasy, lZajPJP - kRuchu.t]);
                }
            }
            if (mianownik == 0)
            {
                return(0);
            }
            return(licznik / mianownik);
        }
        public void Agreguj(Rozklad rB, sigmaPrzyjmZgl sigmy, int nrKlasy)
        {
            int t          = wiazka.ListaKlasRuchu[nrKlasy].t;
            int tMaxMinusI = this.tMax;

            double[] noweStany = new double[_v + 1];
            for (int n = 0; n <= _v; n++)
            {
                noweStany[n] = 0;
                {
                    for (int l = 0; l <= n; l++)
                    {
                        double gamma = sigmy[nrKlasy, n - t] * sigmy[MaxInd, l - tMaxMinusI];
                        double tmp   = gamma * stany[l] * rB[n - l];
                        noweStany[n] += tmp;
                    }
                }
            }
            for (int n = 0; n <= _v; n++)
            {
                stany[n] = noweStany[n];
            }
            foreach (trClass kRuchu in rB.zagregowaneKlasy)
            {
                zagregowaneKlasy.Add(kRuchu);
            }
        }
Exemple #10
0
        public override double OblGamma(Rozklad zrodlo, int nStan, int lZajPJP)
        {
            double licznik   = 0;
            double mianownik = 0;

            int x = nStan - zrodlo.wiazka.q;

            foreach (trClass kRuchu in zrodlo.zagregowaneKlasy)
            {
                double UdzKlasy = kRuchu.PodajIntZgl(0) * kRuchu.t;
                //                double UdzKlasy = kRuchu.PodajIntZgl(lZajPJP) * kRuchu.t;
                if ((lZajPJP - kRuchu.t <= zrodlo.wiazka.q) && (lZajPJP >= kRuchu.t))
                {
                    mianownik += UdzKlasy;
                    if (kRuchu.t >= x)
                    {
                        licznik += UdzKlasy;
                    }
                }
            }
            if (mianownik == 0)
            {
                return(0);
            }
            return(licznik / mianownik);
        }
Exemple #11
0
        public static Rozklad operator *(Rozklad r1, Rozklad r2)
        {
            Rozklad wynik       = new Rozklad();
            int     nowaDlugosc = (r1.V + r2.V > r1.wiazka.V) ? r1.wiazka.V : r1.V + r2.V;

            wynik.Splataj(r1, r2, nowaDlugosc);
            return(wynik);
        }
Exemple #12
0
        /// <summary>
        /// Wyznacza prawdopodobieństwo dopuszczenia warunkowej kombinacji (l_C, l_D | C)
        /// dla wiązki pełnodostępnej z rezerwacją
        /// </summary>
        /// <param name="zrodlo">Rozkład zajętości klas ze zbioru C </param>
        /// <param name="nStan">l_C + l_D</param>
        /// <param name="lZajPJP">l_C</param>
        /// <returns>prawdopodobieńśtwo dopuszczenia warunkowej kombinacji</returns>
        public virtual double OblGamma(Rozklad zrodlo, int nStan, int lZajPJP)
        {
            int x = nStan - zrodlo.wiazka.q;

            if (x > zrodlo.tMax)
            {
                return(0);
            }
            return(1);
        }
Exemple #13
0
        /// <summary>
        /// Wyznacza nowy zagregowany rozkład na podstawie istniejącego oraz nowej klasy zgłoszeń
        /// </summary>
        /// <param name="klasa">Nowa, agregowana klasa zgłoszeń</param>
        /// <returns></returns>
        public override Rozklad zagregujKlase(trClass klasa)
        {
            if (zagregowaneKlasy.Count == 0)
            {
                return(new rGammaYc2(wiazka, klasa));
            }

            rGammaYc2 wynik = new rGammaYc2(this);
            Rozklad   p     = new Rozklad(wiazka, klasa, true);

            // Wyznaczanie średniej liczby obsługiwanych zgłoszeń
            liczYspl(wiazka.sigmy, wiazka.V);

            //Operacja splotu

            double[][] prDopKomb = rGammaYc2.wyznGamma(this, p, klasa, wiazka.sigmy, V, yi);
            double[]   stany     = new double[V + 1];
            double     suma      = 0;

            for (int n = 0; n <= V; n++)
            {
                for (int lC = 0; lC <= n; lC++)
                {
                    double tmp = this[lC] * p[n - lC] * prDopKomb[lC][n - lC];
                    suma     += tmp;
                    stany[n] += tmp;
                }
            }

            for (int n = 0; n <= V; n++)
            {
                wynik[n] = stany[n] / suma;
            }

            // Uaktualnianie rozkładów pomocniczych

            wynik.pi = new Rozklad[zagregowaneKlasy.Count + 1];
            for (int i = 0; i < zagregowaneKlasy.Count; i++)
            {
                wynik.pi[i] = this.pi[i];
            }
            wynik.pi[zagregowaneKlasy.Count] = p;

            wynik.Pmi = new Rozklad[zagregowaneKlasy.Count + 1];
            for (int i = 0; i < zagregowaneKlasy.Count; i++)
            {
                wynik.Pmi[i] = Pmi[i].zagregujKlase(klasa);
            }
            wynik.Pmi[zagregowaneKlasy.Count] = Pmi[0].zagregujKlase(wiazka.ListaKlasRuchu[0]);

            wynik.zagregowaneKlasy.Add(klasa);

            return(wynik);
        }
Exemple #14
0
        public rGammaYc1(Wiazka rWiazka, trClass klasa) : base(rWiazka, klasa, true)
        {
            zagregowaneKlasy = new List <trClass>();
            zagregowaneKlasy.Add(klasa);
            this.wiazka = rWiazka;

            qi     = new Rozklad[1];
            qi[0]  = new Rozklad(rWiazka, zagregowaneKlasy[0], true);
            Qmi    = new rGammaYc1[1];
            Qmi[0] = new rGammaYc1(rWiazka); //Ten rozkład jest pusty.
        }
Exemple #15
0
        /// <summary>
        /// Wyznacza średnią liczbę PJP zajętych przez obsługiwane zgłoszenia klas zagregowanych w rozkładzie ri dla systemu,
        /// któemu oferowane są klasy zagregowane w rozkładzie rM
        /// </summary>
        /// <param name="rM">Zagregowany rozkład klas obsługiwany w systemie</param>
        /// <param name="ri">rozkład, dla którego chcemy wyznaczyć średnie liczby zajętych PJP</param>
        /// <returns></returns>
        public static double[] liczYt(Rozklad rM, Rozklad ri)
        {
            double[] yt  = new double[rM._v];
            Rozklad  rMi = Rozklad.Rozplot(rM, ri);

            for (int n = 0; n <= rMi._v; n++)
            {
                for (int l = 0; l <= n; l++)
                {
                    yt[l] += l * ri[l] * rMi[n - l];
                }
            }

            return(yt);
        }
Exemple #16
0
 public Rozklad(Rozklad kopiowany)
 {
     zagregowaneKlasy = new List <trClass>();
     foreach (trClass kopiowana in kopiowany.zagregowaneKlasy)
     {
         zagregowaneKlasy.Add(kopiowana);
     }
     wiazka = kopiowany.wiazka;
     _v     = kopiowany.wiazka.V;
     stany  = new double[_v + 1];
     for (int n = 0; n <= _v; n++)
     {
         stany[n] = kopiowany[n];
     }
 }
Exemple #17
0
 public Rozklad(Rozklad kopiowany, int V, bool normalizacja)
 {
     zagregowaneKlasy = new List <trClass>();
     foreach (trClass kopiowana in kopiowany.zagregowaneKlasy)
     {
         zagregowaneKlasy.Add(kopiowana);
     }
     wiazka = kopiowany.wiazka;
     _v     = kopiowany.wiazka.V;
     stany  = new double[_v + 1];
     for (int n = 0; n <= _v; n++)
     {
         stany[n] = kopiowany[n];
     }
     zmienDlugosc(V, normalizacja);
 }
Exemple #18
0
        public Rozklad(Wiazka rozWiazka, trClass klZgloszen, bool procPrzyjmZglZalOdStanu)
        {
            zagregowaneKlasy = new List <trClass>();
            wiazka           = rozWiazka;
            _v = rozWiazka.V;
            if (klZgloszen != null)
            {
                zagregowaneKlasy.Add(klZgloszen);

                if (klZgloszen.progiKlasy == null)
                {
                    stany = klZgloszen.RozkladStanow(rozWiazka, procPrzyjmZglZalOdStanu);
                }
                else
                {
                    Rozklad[] temp = new Rozklad[klZgloszen.progiKlasy.liczbaPrzedziałow];
                    for (int i = 0; i < klZgloszen.progiKlasy.liczbaPrzedziałow; i++)
                    {
                        temp[i] = new Rozklad();
                        temp[i].zagregowaneKlasy = this.zagregowaneKlasy;
                        temp[i]._v     = rozWiazka.V;
                        temp[i].stany  = klZgloszen.RozkladStanow(rozWiazka, i);
                        temp[i].wiazka = rozWiazka;
                    }

                    Rozklad wynik = new Rozklad(temp[0]);
                    for (int i = 1; i < klZgloszen.progiKlasy.liczbaPrzedziałow; i++)
                    {
                        wynik.Agreguj(temp[i]);
                    }
                    this.stany = wynik.stany;
                }
            }
            else
            {
                stany    = new double[_v + 1];
                stany[0] = 1;
                for (int i = 1; i <= _v; i++)
                {
                    stany[i] = 0;
                }
            }
        }
Exemple #19
0
        /// <summary>
        /// Rozplata rozkłady. Od rozkładu rM zostanie odpleciony rozkład ri
        /// </summary>
        /// <param name="rM">Zagregowany rozkład M</param>
        /// <param name="ri">Składowa rozkładu i</param>
        /// <returns>Pozostała składowa rozkładu</returns>
        public static Rozklad Rozplot(Rozklad rM, Rozklad ri)
        {
            Rozklad wynik = new Rozklad(rM);

            foreach (trClass klasa in ri.zagregowaneKlasy)
            {
                wynik.zagregowaneKlasy.Remove(klasa);
            }

            for (int n = 0; n <= wynik.wiazka.V; n++)
            {
                double licznik = rM[n];
                for (int l = 0; l < n; l++)
                {
                    licznik -= (wynik[l] * ri[n - l]);
                }
                wynik[n] = licznik / ri[0];
            }
            wynik.normalizacja();
            return(wynik);
        }
 public override void Agreguj(Rozklad rB, sigmaPrzyjmZgl sigmy)
 {
     double[] noweStany = new double[_v + 1];
     for (int n = 0; n <= _v; n++)
     {
         double maxSigma = 0;
         for (int i = 0; i < rB.zagregowaneKlasy.Count; i++)
         {
             int     nrKlasy = wiazka.ListaKlasRuchu.IndexOf(rB.zagregowaneKlasy[i]);
             trClass klasa   = wiazka.ListaKlasRuchu[nrKlasy];
             if (n >= klasa.t)
             {
                 if (sigmy[nrKlasy, n - klasa.t] > maxSigma)
                 {
                     maxSigma = sigmy[nrKlasy, n - klasa.t];
                 }
             }
             else
             {
                 maxSigma = 1;
             }
         }
         noweStany[n] = 0;
         {
             for (int l = 0; l <= n; l++)
             {
                 noweStany[n] += (stany[n - l] * rB[l]);
             }
         }
         noweStany[n] *= maxSigma;
     }
     for (int n = 0; n <= _v; n++)
     {
         stany[n] = noweStany[n];
     }
     foreach (trClass kRuchu in rB.zagregowaneKlasy)
     {
         zagregowaneKlasy.Add(kRuchu);
     }
 }
Exemple #21
0
        public virtual void Agreguj(Rozklad rB, sigmaPrzyjmZgl sigmy)
        {
            foreach (trClass kRuchu in rB.zagregowaneKlasy)
            {
                zagregowaneKlasy.Add(kRuchu);
            }

            _v = (_v > rB.V) ? _v : rB.V;
            double[] noweStany = new double[_v + 1];
            for (int n = 0; n <= _v; n++)
            {
                noweStany[n] = 0;
                for (int l = 0; l <= n; l++)
                {
                    noweStany[n] += this[n - l] * rB[l];
                }
            }
            for (int n = 0; n <= _v; n++)
            {
                stany[n] = noweStany[n];
            }
        }
 public rAsLambdaT(Rozklad kopiowany)
     : base(kopiowany)
 {
 }
Exemple #23
0
        private Rozklad niezalezny;                 //Rozkład dla systemu niezależnego od stanu.

        #region konstruktory
        public rSigmaYt(Wiazka rozWiazka, trClass klZgloszen)
            : base(rozWiazka, klZgloszen)
        {
            niezalezny = new Rozklad(rozWiazka, klZgloszen);
        }
Exemple #24
0
 public rSigmaYt(Rozklad kopiowany)
     : base(kopiowany)
 {
     niezalezny = new Rozklad(kopiowany);
 }
 public rAsymetryczny(Rozklad kopiowany)
     : base(kopiowany)
 {
 }
 public rAsSa3(Rozklad kopiowany)
     : base(kopiowany)
 {
 }
 public rAsYT(Rozklad kopiowany)
     : base(kopiowany)
 {
     pomocniczy = new Rozklad(kopiowany);
 }
        public double OblGamma(int lC, int lD, List <trClass> zbiorD, sigmaPrzyjmZgl sigmy, Rozklad PD)
        {
            double licznik   = 0;
            double mianownik = 0;
            int    n         = lC + lD;

            foreach (trClass klasa in zbiorD)
            {
                if (lD >= klasa.t)
                {
                    double p_lZajPJP = PD[lD];
                    if (p_lZajPJP == 0)
                    {
                        continue;
                    }
                    double p_pop_lZajPJP = PD[lD - klasa.t];
                    double lambda        = klasa.PodajIntZgl(0);
                    double yPrim         = p_pop_lZajPJP * lambda / (p_lZajPJP * klasa.mu);
                    double y             = PD[lD - klasa.t] * klasa.PodajIntZgl(yPrim) /
                                           (PD[lD] * klasa.mu);
                    double UdzKlasy = y * klasa.t;

                    licznik   += (sigmy[klasa, n - klasa.t] * UdzKlasy);
                    mianownik += (sigmy[klasa, lD - klasa.t] * UdzKlasy);
                }
            }

            if (mianownik == 0)
            {
                return(0);
            }
            return(licznik / mianownik);
        }
 public rAsUogolniony(Rozklad kopiowany)
     : base(kopiowany)
 {
 }
 public rAsMax(Rozklad kopiowany)
     : base(kopiowany)
 {
 }