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; }
/// <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); }