public DaneORuchu(Czas czas) { this.czas = czas; aktualne = new List <DaneORuchuOdcinka>(); dane24 = new List <DaneOruchuOdcinka24h>(); }
// 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); } }
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; }
// 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(); }
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(); }
/* * 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 }
/* * 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); } }
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(); }
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; } }
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); }
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> { }); }
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)); }
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)); } } }
public void ZajerejstrujWjazd(Czas czas, int rejestracja) { wjazdy.Add(new CzasPrzejazdu(czas, rejestracja)); }