public Skrzyzowanie(Skrzyzowanie sk) { this.id = sk.id; this.pasyRuchu = new List <PasRuchu>(); foreach (PasRuchu pas in sk.pasyRuchu) { this.pasyRuchu.Add(new PasRuchu(pas)); } this.swiatla = new Swiatla(sk.swiatla); this.generowany = sk.generowany; this.usuwany = sk.usuwany; }
private Trasa PodajTrase(Trasa trasaPoczatkowa, int skad, int przez, int koniec, List <int> koszty) { Trasa trasa = new Trasa(trasaPoczatkowa); Skrzyzowanie sk = skrzyzowania.First(s => s.PodajId() == przez); trasa.DodajSkrzyzowanie(przez, sk.WagaOdcinka(skad)); // jestli to koneic trasy if (przez == koniec) { koszty.Add((int)trasa.koszt); return(trasa); } // jesli znaleziono szybsza trase kasujemy if (koszty.Count() > 0 && trasa.koszt > koszty.Min()) { return(null); } // jesli trasa jest cyklem trase kasujemy if (trasa.CzyCykl()) { return(null); } List <Trasa> mozliwe = new List <Trasa>(); foreach (int kierunek in sk.PodajKierunki()) { if (kierunek != -1) { Trasa tmp = PodajTrase(trasa, przez, kierunek, koniec, koszty); if (tmp != null) { mozliwe.Add(tmp); } } } if (mozliwe.Count() > 0) { Trasa tmp = mozliwe.OrderBy(m => m.koszt).First(); koszty.Add((int)tmp.koszt); return(tmp); } return(null); }
public Trasa PodajTrase(int poczatek, int koniec) { // sprawdzenie czy wyznaczylismy juz taka trase Trasa trasa = ZapisanaTrasa(poczatek, koniec); if (trasa != null) { return(trasa); } List <Trasa> mozliwe = new List <Trasa>(); trasa = new Trasa(poczatek); List <int> koszty = new List <int>(); Skrzyzowanie sk = skrzyzowania.First(s => s.PodajId() == poczatek); foreach (int kierunek in sk.PodajKierunki()) { if (kierunek != -1) { Trasa tmp = PodajTrase(trasa, poczatek, kierunek, koniec, koszty); if (tmp != null) { mozliwe.Add(tmp); } } } if (mozliwe.Count() > 0) { Trasa tmp = mozliwe.OrderBy(m => m.koszt).First(); zapisaneTrasy.Add(tmp); return(tmp); } return(null); }
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 Trasa LosujSztywnaTrase() * { * List<Trasa> trasy = new List<Trasa>(); * Trasa tmp; * * tmp = new Trasa(9); * tmp.DodajSkrzyzowanie(1, 1); * tmp.DodajSkrzyzowanie(2, 1); * tmp.DodajSkrzyzowanie(6, 1); * tmp.DodajSkrzyzowanie(4, 1); * tmp.DodajSkrzyzowanie(5, 1); * trasy.Add(tmp); * * tmp = new Trasa(1); * tmp.DodajSkrzyzowanie(7, 1); * tmp.DodajSkrzyzowanie(5, 1); * tmp.DodajSkrzyzowanie(4, 1); * tmp.DodajSkrzyzowanie(3, 1); * tmp.DodajSkrzyzowanie(8, 1); * tmp.DodajSkrzyzowanie(2, 1); * trasy.Add(tmp); * * tmp = new Trasa(7); * tmp.DodajSkrzyzowanie(6, 1); * tmp.DodajSkrzyzowanie(2, 1); * tmp.DodajSkrzyzowanie(3, 1); * tmp.DodajSkrzyzowanie(4, 1); * tmp.DodajSkrzyzowanie(5, 1); * trasy.Add(tmp); * * tmp = new Trasa(4); * tmp.DodajSkrzyzowanie(6, 1); * tmp.DodajSkrzyzowanie(2, 1); * tmp.DodajSkrzyzowanie(8, 1); * tmp.DodajSkrzyzowanie(9, 1); * tmp.DodajSkrzyzowanie(1, 1); * trasy.Add(tmp); * * tmp = new Trasa(5); * tmp.DodajSkrzyzowanie(4, 1); * tmp.DodajSkrzyzowanie(8, 1); * tmp.DodajSkrzyzowanie(3, 1); * tmp.DodajSkrzyzowanie(6, 1); * tmp.DodajSkrzyzowanie(7, 1); * tmp.DodajSkrzyzowanie(1, 1); * tmp.DodajSkrzyzowanie(9, 1); * tmp.DodajSkrzyzowanie(5, 1); * tmp.DodajSkrzyzowanie(7, 1); * trasy.Add(tmp); * * tmp = new Trasa(9); * tmp.DodajSkrzyzowanie(5, 1); * tmp.DodajSkrzyzowanie(7, 1); * tmp.DodajSkrzyzowanie(6, 1); * tmp.DodajSkrzyzowanie(3, 1); * tmp.DodajSkrzyzowanie(8, 1); * tmp.DodajSkrzyzowanie(9, 1); * trasy.Add(tmp); * * tmp = new Trasa(2); * tmp.DodajSkrzyzowanie(8, 1); * tmp.DodajSkrzyzowanie(4, 1); * tmp.DodajSkrzyzowanie(6, 1); * tmp.DodajSkrzyzowanie(3, 1); * tmp.DodajSkrzyzowanie(8, 1); * trasy.Add(tmp); * * tmp = new Trasa(4); * tmp.DodajSkrzyzowanie(8, 1); * tmp.DodajSkrzyzowanie(2, 1); * tmp.DodajSkrzyzowanie(6, 1); * tmp.DodajSkrzyzowanie(7, 1); * tmp.DodajSkrzyzowanie(5, 1); * tmp.DodajSkrzyzowanie(4, 1); * tmp.DodajSkrzyzowanie(8, 1); * trasy.Add(tmp); * * tmp = new Trasa(1); * tmp.DodajSkrzyzowanie(7, 1); * tmp.DodajSkrzyzowanie(6, 1); * tmp.DodajSkrzyzowanie(3, 1); * tmp.DodajSkrzyzowanie(8, 1); * tmp.DodajSkrzyzowanie(2, 1); * tmp.DodajSkrzyzowanie(1, 1); * trasy.Add(tmp); * * tmp = new Trasa(5); * tmp.DodajSkrzyzowanie(4, 1); * tmp.DodajSkrzyzowanie(8, 1); * tmp.DodajSkrzyzowanie(3, 1); * tmp.DodajSkrzyzowanie(4, 1); * tmp.DodajSkrzyzowanie(6, 1); * trasy.Add(tmp); * * tmp = new Trasa(6); * tmp.DodajSkrzyzowanie(2, 1); * tmp.DodajSkrzyzowanie(8, 1); * tmp.DodajSkrzyzowanie(3, 1); * tmp.DodajSkrzyzowanie(4, 1); * tmp.DodajSkrzyzowanie(6, 1); * tmp.DodajSkrzyzowanie(3, 1); * tmp.DodajSkrzyzowanie(8, 1); * trasy.Add(tmp); * * Random rand = new Random(); * * return trasy[rand.Next() % trasy.Count()]; * } */ public void DodajSkrzyzowanie(Skrzyzowanie skrzyzowanie) { skrzyzowania.Add(skrzyzowanie); }
public void MapaTestowa() { Skrzyzowanie sk; SchematRuchu sr; SchematSwiatel ss; Swiatla sw; List <PasRuchu> psy; sr = new SchematRuchu(new List <int> { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 }); ss = new SchematSwiatel(new List <int> { 0, 1, 2, 3, 4, 5 }, new List <int> { 20, 20, 20, 20, 20, 20 }); sw = new Swiatla(ss); //ps = new PasRuchu(1, 30, 2, new List<int> { }, new List<int> { }, 20); psy = new List <PasRuchu> { new PasRuchu(1, 30, 2, 0, new List <int> { 7, 9 }, new List <int> { 1, 3 }, 20), new PasRuchu(2, 25, 7, 1, new List <int> { 9, 2 }, new List <int> { 3, 0 }, 20), new PasRuchu(2, 28, 9, 3, new List <int> { 2, 7 }, new List <int> { 0, 1 }, 20), }; sk = new Skrzyzowanie(1, psy, sw, sr, sr); DodajSkrzyzowanie(sk); sr = new SchematRuchu(new List <int> { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 }); ss = new SchematSwiatel(new List <int> { 0, 1, 2, 3, 4, 5 }, new List <int> { 20, 20, 20, 20, 20, 20 }); sw = new Swiatla(ss); //ps = new PasRuchu(1, 30, 2, new List<int> { }, new List<int> { }, 20); psy = new List <PasRuchu> { new PasRuchu(1, 30, 6, 0, new List <int> { 5, 1 }, new List <int> { 1, 3 }, 20), new PasRuchu(2, 27, 5, 1, new List <int> { 1, 6 }, new List <int> { 3, 0 }, 20), new PasRuchu(2, 28, 1, 3, new List <int> { 6, 5 }, new List <int> { 0, 1 }, 20), }; sk = new Skrzyzowanie(7, psy, sw, sr, sr); DodajSkrzyzowanie(sk); sr = new SchematRuchu(new List <int> { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 }); ss = new SchematSwiatel(new List <int> { 0, 1, 2, 3, 4, 5 }, new List <int> { 20, 20, 20, 20, 20, 20 }); sw = new Swiatla(ss); //ps = new PasRuchu(1, 30, 2, new List<int> { }, new List<int> { }, 20); psy = new List <PasRuchu> { new PasRuchu(1, 30, 4, 0, new List <int> { 9, 7 }, new List <int> { 1, 3 }, 20), new PasRuchu(2, 27, 9, 1, new List <int> { 7, 4 }, new List <int> { 3, 0 }, 20), new PasRuchu(2, 25, 7, 3, new List <int> { 4, 9 }, new List <int> { 0, 1 }, 20), }; sk = new Skrzyzowanie(5, psy, sw, sr, sr); DodajSkrzyzowanie(sk); sr = new SchematRuchu(new List <int> { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 }); ss = new SchematSwiatel(new List <int> { 0, 1, 2, 3, 4, 5 }, new List <int> { 20, 20, 20, 20, 20, 20 }); sw = new Swiatla(ss); //ps = new PasRuchu(1, 30, 2, new List<int> { }, new List<int> { }, 20); psy = new List <PasRuchu> { new PasRuchu(1, 30, 8, 0, new List <int> { 1, 5 }, new List <int> { 1, 3 }, 20), new PasRuchu(2, 27, 1, 1, new List <int> { 5, 8 }, new List <int> { 3, 0 }, 20), new PasRuchu(2, 28, 5, 3, new List <int> { 8, 1 }, new List <int> { 0, 1 }, 20), }; sk = new Skrzyzowanie(9, psy, sw, sr, sr); DodajSkrzyzowanie(sk); sr = new SchematRuchu(new List <int> { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 }); ss = new SchematSwiatel(new List <int> { 0, 1, 2, 3, 4, 5 }, new List <int> { 20, 20, 20, 20, 20, 20 }); sw = new Swiatla(ss); //ps = new PasRuchu(1, 30, 2, new List<int> { }, new List<int> { }, 20); psy = new List <PasRuchu> { new PasRuchu(1, 32, 1, 0, new List <int> { 8, 3, 6 }, new List <int> { 1, 2, 3 }, 20), new PasRuchu(2, 33, 8, 1, new List <int> { 3, 6, 1 }, new List <int> { 2, 3, 0 }, 20), new PasRuchu(1, 30, 3, 3, new List <int> { 6, 1, 8 }, new List <int> { 3, 0, 1 }, 20), new PasRuchu(2, 27, 6, 3, new List <int> { 1, 8, 3 }, new List <int> { 0, 1, 2 }, 20), }; sk = new Skrzyzowanie(2, psy, sw, sr, sr); DodajSkrzyzowanie(sk); sr = new SchematRuchu(new List <int> { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 }); ss = new SchematSwiatel(new List <int> { 0, 1, 2, 3, 4, 5 }, new List <int> { 20, 20, 20, 20, 20, 20 }); sw = new Swiatla(ss); //ps = new PasRuchu(1, 30, 2, new List<int> { }, new List<int> { }, 20); psy = new List <PasRuchu> { new PasRuchu(1, 31, 2, 0, new List <int> { 8, 4, 6 }, new List <int> { 1, 2, 3 }, 20), new PasRuchu(1, 33, 8, 1, new List <int> { 4, 6, 2 }, new List <int> { 2, 3, 0 }, 20), new PasRuchu(1, 32, 4, 3, new List <int> { 6, 2, 8 }, new List <int> { 3, 0, 1 }, 20), new PasRuchu(1, 29, 6, 3, new List <int> { 2, 8, 4 }, new List <int> { 0, 1, 2 }, 20), }; sk = new Skrzyzowanie(3, psy, sw, sr, sr); DodajSkrzyzowanie(sk); sr = new SchematRuchu(new List <int> { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 }); ss = new SchematSwiatel(new List <int> { 0, 1, 2, 3, 4, 5 }, new List <int> { 20, 20, 20, 20, 20, 20 }); sw = new Swiatla(ss); //ps = new PasRuchu(1, 30, 2, new List<int> { }, new List<int> { }, 20); psy = new List <PasRuchu> { new PasRuchu(1, 30, 3, 0, new List <int> { 8, 5, 6 }, new List <int> { 1, 2, 3 }, 20), new PasRuchu(2, 27, 8, 1, new List <int> { 5, 6, 3 }, new List <int> { 2, 3, 0 }, 20), new PasRuchu(1, 30, 5, 3, new List <int> { 6, 3, 8 }, new List <int> { 3, 0, 1 }, 20), new PasRuchu(2, 25, 6, 3, new List <int> { 3, 8, 5 }, new List <int> { 0, 1, 2 }, 20), }; sk = new Skrzyzowanie(4, psy, sw, sr, sr); DodajSkrzyzowanie(sk); sr = new SchematRuchu(new List <int> { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 }); ss = new SchematSwiatel(new List <int> { 0, 1, 2, 3, 4, 5 }, new List <int> { 20, 20, 20, 20, 20, 20 }); sw = new Swiatla(ss); //ps = new PasRuchu(1, 30, 2, new List<int> { }, new List<int> { }, 20); psy = new List <PasRuchu> { new PasRuchu(1, 30, 3, 0, new List <int> { 4, 7, 2 }, new List <int> { 1, 2, 3 }, 20), new PasRuchu(2, 15, 4, 1, new List <int> { 7, 2, 3 }, new List <int> { 2, 3, 0 }, 20), new PasRuchu(1, 25, 7, 3, new List <int> { 2, 3, 4 }, new List <int> { 3, 0, 1 }, 20), new PasRuchu(2, 31, 2, 3, new List <int> { 3, 4, 7 }, new List <int> { 0, 1, 2 }, 20), }; sk = new Skrzyzowanie(6, psy, sw, sr, sr); DodajSkrzyzowanie(sk); sr = new SchematRuchu(new List <int> { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 }); ss = new SchematSwiatel(new List <int> { 0, 1, 2, 3, 4, 5 }, new List <int> { 20, 20, 20, 20, 20, 20 }); sw = new Swiatla(ss); //ps = new PasRuchu(1, 30, 2, new List<int> { }, new List<int> { }, 20); psy = new List <PasRuchu> { new PasRuchu(1, 30, 9, 0, new List <int> { 4, 3, 2 }, new List <int> { 1, 2, 3 }, 20), new PasRuchu(2, 31, 4, 1, new List <int> { 3, 2, 9 }, new List <int> { 2, 3, 0 }, 20), new PasRuchu(1, 37, 3, 3, new List <int> { 2, 9, 4 }, new List <int> { 3, 0, 1 }, 20), new PasRuchu(2, 15, 2, 3, new List <int> { 9, 4, 3 }, new List <int> { 0, 1, 2 }, 20), }; sk = new Skrzyzowanie(8, psy, sw, sr, sr); DodajSkrzyzowanie(sk); }