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