示例#1
0
        public DaneORuchu(Czas czas)
        {
            this.czas = czas;

            aktualne = new List <DaneORuchuOdcinka>();

            dane24 = new List <DaneOruchuOdcinka24h>();
        }
示例#2
0
        // Usun nieaktualne (starsze niz godzina) zajerestrowane wjazdy i zjazdy
        public void UsunStare()
        {
            Czas wiek = new Czas(0, 0, 1);

            foreach (DaneORuchuOdcinka odcinek in aktualne)
            {
                odcinek.UsunNieAktualne(czas, wiek);
            }
        }
示例#3
0
        Boolean trybKontrolny;              // true - 2 symulacje, false - 1 symulaja

        public Emulator()
        {
            czas                = new Czas();
            daneORuchu          = new DaneORuchu(czas);
            daneORuchuKontrolne = new DaneORuchu(czas);
            mapa                = new Mapa();
            si = new SterowanieSi();

            trybKontrolny = true;
        }
示例#4
0
        // zaladowanie probnych ustawien emulatora
        public void EmulatorTestowy()
        {
            mapa.MapaTestowa();

            czas                = new Czas();
            daneORuchu          = new DaneORuchu(czas);
            daneORuchuKontrolne = new DaneORuchu(czas);

            symulacja = new Symulacja(czas, daneORuchu, daneORuchuKontrolne, mapa, si);
            kontrolna = new Symulacja(czas, daneORuchuKontrolne, daneORuchuKontrolne, mapa);

            mapa.PrzekazListePolaczenDoBazy(daneORuchu);
            mapa.PrzekazListePolaczenDoBazy(daneORuchuKontrolne);
            si = new SterowanieSi();
        }
示例#5
0
        public void UczZKontrolnymi(DaneORuchu bazaKontrolna, Czas czas)
        {
            List <double[]> wejscie = new List <double[]>();
            List <double[]> wyjscie = new List <double[]>();

            foreach (ZestawDanychSieci zestaw in zestawyUczace)
            {
                zestaw.SprawdxPoprawnosc(
                    bazaKontrolna.PodajSumeSrednichSkrzyzowania(zestaw.NrSkrzyzowania, czas)
                    );
                wejscie.Add(zestaw.TablicaWejscia());
                wyjscie.Add(zestaw.TablicaWyjscia());
            }
            ewolutor.RunEpoch(wejscie.ToArray(), wyjscie.ToArray());
            zestawyUczace.Clear();
        }
示例#6
0
        /*
         * Zapisanie czasu przejazdu jeśli zajerejstrowano wjazd
         */
        public void ZajerejstrujZjazd(Czas czas, int rejestracja)
        {
            // wyszukanie czasu Wjazdu na odcinek
            CzasPrzejazdu cz = wjazdy.FirstOrDefault(c => c.rejerstracja == rejestracja);

            if (cz != null)
            {
                czasy.Add(new CzasPrzejazdu(czas, cz.PodajGodzine()));

                // dla uproszczenia poxniejszych obliczen
                // dodanie czas do puli
                suma += czasy.Last().PodajDlugoscPrzejazdu();

                // usunięcie zajerejstrowanego czasu Wjazdu
                wjazdy.Remove(cz);
            }
            // jesli nie znalexlismy czasu Wjazdu to nic nie robimy
        }
示例#7
0
        /*
         * Usuwanie nieaktualnych danych
         * Czasy zjazdów starsze niż wiek [Czas]
         * Czasy wjazdów starsze niż x krotność średniej nie mniej niz wiek
         * (aby usunac pojazdy ktore opuscily ruch na tym odcinku)
         */
        public void UsunNieAktualne(Czas czas, Czas wiek, int x = 4)
        {
            List <CzasPrzejazdu> usun = new List <CzasPrzejazdu>();
            double srednia            = PodajSredniCzas() * x;

            if (srednia < wiek.PodajWSekundach())
            {
                srednia = wiek.PodajWSekundach();
            }

            foreach (CzasPrzejazdu wjazd in wjazdy)
            {
                if (Czas.RoznicaWSekundach(czas, wjazd.PodajGodzine()) > srednia)
                {
                    usun.Add(wjazd);
                }
                else
                {
                    break;  // czasy sa dodawane w kolejnosci wiec nastepne zostaja
                }
            }
            foreach (CzasPrzejazdu u in usun)
            {
                wjazdy.Remove(u);
            }
            usun = new List <CzasPrzejazdu>();

            foreach (CzasPrzejazdu cz in czasy)
            {
                if (Czas.RoznicaWSekundach(czas, cz.PodajGodzine()) > wiek.PodajWSekundach())
                {
                    usun.Add(cz);
                }
                else
                {
                    break;  // czasy sa dodawane w kolejnosci wiec nastepne zostaja
                }
            }
            foreach (CzasPrzejazdu u in usun)
            {
                suma -= u.PodajDlugoscPrzejazdu();
                czasy.Remove(u);
            }
        }
示例#8
0
        public void ZaladujMapeZPliku(string plik)
        {
            using (StreamReader r = new StreamReader(plik))
            {
                string json = r.ReadToEnd();
                mapa = JsonConvert.DeserializeObject <Mapa>(json);
            }

            czas                = new Czas();
            daneORuchu          = new DaneORuchu(czas);
            daneORuchuKontrolne = new DaneORuchu(czas);

            symulacja = new Symulacja(czas, daneORuchu, daneORuchuKontrolne, mapa, si);
            kontrolna = new Symulacja(czas, daneORuchuKontrolne, daneORuchuKontrolne, mapa);

            mapa.PrzekazListePolaczenDoBazy(daneORuchu);
            mapa.PrzekazListePolaczenDoBazy(daneORuchuKontrolne);
            si = new SterowanieSi();
        }
示例#9
0
        public Symulacja(Czas czas, DaneORuchu bazaDanych, DaneORuchu bazaDanychKontrolna, Mapa mapa, SterowanieSi si = null)
        {
            this.mapa                = new Mapa(mapa);
            this.pojazdy             = new List <Pojazd>();
            this.czas                = czas;
            this.bazaDanych          = bazaDanych;
            this.bazaDanychKontrolna = bazaDanychKontrolna;

            if (si == null)
            {
                this.czyKontrolne = true;
                this.si           = null;
            }
            else
            {
                this.czyKontrolne = false;
                this.si           = si;
            }
        }
示例#10
0
        public double PodajSumeSrednichSkrzyzowania(int skrzyzwoanie, Czas czas)
        {
            double suma    = 0;
            int    godzina = czas.godziny;

            godzina--;
            if (godzina == -1)
            {
                godzina = 23;
            }

            List <DaneOruchuOdcinka24h> dane = dane24.Where(d => d.koniec == skrzyzwoanie).ToList();

            foreach (DaneOruchuOdcinka24h odcinek in dane)
            {
                suma += odcinek.srednie[godzina];
            }
            return(suma);
        }
示例#11
0
        public SchematSwiatel GenSchemat(int nr, Mapa mapa, DaneORuchu baza, DaneORuchu kontrolne, Czas czas)
        {
            ZestawDanychSieci zestaw = new ZestawDanychSieci(nr);

            Skrzyzowanie sk = mapa.PodajSkrzyzowanie(nr);

            // Pobranie danych o ruchu wejsciowym na skrzyzowanie
            int nrDrogiSkrzyzowania = 0;

            foreach (int zrodlo in sk.PodajZrodla4Strony())
            {
                if (zrodlo == -1)
                {
                    zestaw.UstawDanePasa(nrDrogiSkrzyzowania, 0, 0, 0, 0, 0, false, false, false);
                }
                else
                {
                    zestaw.UstawDanePasa(
                        nrDrogiSkrzyzowania,
                        sk.CzasDojazdu(zrodlo),
                        baza.PodajSredniCzas(zrodlo, sk.PodajId()),
                        kontrolne.PodajSredniCzas(zrodlo, sk.PodajId(), czas.godziny),
                        baza.PojazdowNaOdcinku(zrodlo, sk.PodajId()),
                        kontrolne.PodajIlePojazdowWgodzine(zrodlo, sk.PodajId(), czas.godziny),
                        sk.CzyOczekujeWKierunku(zrodlo, 0),
                        sk.CzyOczekujeWKierunku(zrodlo, 1),
                        sk.CzyOczekujeWKierunku(zrodlo, 2)
                        );
                }
                nrDrogiSkrzyzowania++;
            }

            // Kiedy byla zmiana swiatel na dana pozycje
            int[] zmianySwiatel = sk.PodajKiedZmienionoSwiatlaNaPozycje().ToArray();
            zestaw.UstawZmianyCzasow(new double[] {
                zmianySwiatel[0],
                zmianySwiatel[1],
                zmianySwiatel[2],
                zmianySwiatel[3],
                zmianySwiatel[4],
                zmianySwiatel[5]
            }
                                     );

            // Pobranie danych o ruchu na sasiednich skrzyzowanaich
            int nrSasiadaSkrzyzowania = 0;

            foreach (int saId in sk.PodajKierunki())
            {
                nrDrogiSkrzyzowania = 0;
                if (saId == -1)
                {
                    for (int i = 0; i < 4; i++)
                    {
                        zestaw.UstawPasSasiada(
                            nrSasiadaSkrzyzowania * 4 + nrDrogiSkrzyzowania,
                            0,
                            0,
                            0
                            );
                        nrDrogiSkrzyzowania++;
                    }
                }
                else
                {
                    Skrzyzowanie sa = mapa.PodajSkrzyzowanie(saId);

                    foreach (int zr in sa.PodajZrodla4Strony())
                    {
                        if (zr == -1)
                        {
                            zestaw.UstawPasSasiada(
                                nrSasiadaSkrzyzowania * 4 + nrDrogiSkrzyzowania,
                                0,
                                0,
                                0
                                );
                        }
                        else
                        {
                            zestaw.UstawPasSasiada(
                                nrSasiadaSkrzyzowania * 4 + nrDrogiSkrzyzowania,
                                sa.CzasDojazdu(zr),
                                baza.PodajSredniCzas(zr, saId),
                                baza.PodajIlePojazdowWgodzine(zr, saId, czas.godziny)
                                );
                        }
                        nrDrogiSkrzyzowania++;
                    }
                }
                nrSasiadaSkrzyzowania++;
            }

            // WRZUCENIE NA SIEĆ
            zestaw.NormalizujWejscie();
            double[] wyjscie = siecNeuronowa.Compute(zestaw.TablicaWejscia());
            zestaw.UstawWyjscie(wyjscie);
            zestawyUczace.Add(zestaw);

            double max   = 0;
            int    wynik = 0;

            for (int i = 0; i < 6; i++)
            {
                if (wyjscie[i] >= max)
                {
                    wynik = i;
                    max   = wyjscie[i];
                }
            }

            SchematSwiatel schemat;

            switch (wynik)
            {
            case 0:
                schemat = new SchematSwiatel(new List <int> {
                    0
                }, new List <int> {
                    60
                });
                break;

            case 1:
                schemat = new SchematSwiatel(new List <int> {
                    1
                }, new List <int> {
                    60
                });
                break;

            case 2:
                schemat = new SchematSwiatel(new List <int> {
                    2
                }, new List <int> {
                    60
                });
                break;

            case 3:
                schemat = new SchematSwiatel(new List <int> {
                    3
                }, new List <int> {
                    60
                });
                break;

            case 4:
                schemat = new SchematSwiatel(new List <int> {
                    4
                }, new List <int> {
                    60
                });
                break;

            default:
                schemat = new SchematSwiatel(new List <int> {
                    5
                }, new List <int> {
                    60
                });
                break;
            }

            return(schemat);

            //return new SchematSwiatel(new List<int> { }, new List<int> { });
        }
示例#12
0
 public void UstawSi(int id, DaneORuchu baza, DaneORuchu bazaKontrolna, SterowanieSi si, Czas czas)
 {
     skrzyzowania.First(s => s.PodajId() == id).UstawSchematSi(si.GenSchemat(id, this, baza, bazaKontrolna, czas));
 }
示例#13
0
 public void UstawNoweSchematySi(DaneORuchu baza, DaneORuchu bazaKontrolna, SterowanieSi si, Czas czas)
 {
     foreach (Skrzyzowanie skrzyzowanie in skrzyzowania)
     {
         if (skrzyzowanie.CzySi() && skrzyzowanie.PodajKiedyOstatniaZmianaSwiatel() >= SterowanieSi.CO_ILE_ZMIANA_SWIATEL)
         {
             skrzyzowanie.UstawSchematSi(si.GenSchemat(skrzyzowanie.PodajId(), this, baza, bazaKontrolna, czas));
         }
     }
 }
示例#14
0
 public void ZajerejstrujWjazd(Czas czas, int rejestracja)
 {
     wjazdy.Add(new CzasPrzejazdu(czas, rejestracja));
 }