Example #1
0
        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;
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
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> { });
        }
Example #5
0
        /*
         * 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);
        }
Example #6
0
        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);
        }