コード例 #1
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> { });
        }
コード例 #2
0
        void WygenerujZestawUczacy()
        {
            ZestawDanychSieci zestaw = new ZestawDanychSieci(0);
            bool t = true;

            Random rand  = new Random();
            int    pos   = rand.Next(6);
            int    max   = rand.Next(40, 300);
            int    maxP  = rand.Next(15, 30);
            int    maxS  = rand.Next(40, 300);
            int    maxPS = rand.Next(15, 30);
            int    idealny;
            int    sredni;
            int    sredniSt;
            int    pojazdow;
            int    pojazdowSt;

            bool[] s = new bool[3];
            for (int i = 0; i < 3; i++)
            {
                if (rand.Next(2) == 1)
                {
                    s[i] = true;
                }
                else
                {
                    s[i] = false;
                }
            }
            double[] czasy = new double[6];
            for (int i = 0; i < 6; i++)
            {
                czasy[i] = CO_ILE_ZMIANA_SWIATEL * rand.Next(1, 10);
            }
            double czMax = czasy.Max() + CO_ILE_ZMIANA_SWIATEL;

            switch (pos)
            {
            case 0:
                for (int i = 0; i < 4; i++)
                {
                    if (i == 0 || i == 1)
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(20) + max;
                        sredniSt   = idealny + rand.Next(20) + max;
                        pojazdow   = maxP + rand.Next(10) + 10;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, s[0], t, t);
                    }
                    else
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(max - 10);
                        sredniSt   = idealny + rand.Next(max - 10);
                        pojazdow   = rand.Next(maxP) + 5;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, s[0], s[1], s[2]);
                    }
                }
                czasy[0] = czMax;
                zestaw.UstawZmianyCzasow(czasy);
                for (int i = 0; i < 16; i++)
                {
                    if (i == 0)
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS - 10);
                        pojazdow = (rand.Next(maxP) + 5) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                    else
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS);
                        pojazdow = (rand.Next(maxP) + 5 + rand.Next(10)) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                }
                zestaw.UstawWyjscie(new double[] { 1, 0, 0, 0, 0, 0 });
                break;

            case 1:
                for (int i = 0; i < 4; i++)
                {
                    if (i == 0)
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(20) + max;
                        sredniSt   = idealny + rand.Next(20) + max;
                        pojazdow   = maxP + rand.Next(10) + 10;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, t, t, t);
                    }
                    else
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(max - 10);
                        sredniSt   = idealny + rand.Next(max - 10);
                        pojazdow   = rand.Next(maxP) + 5;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, s[0], s[1], s[2]);
                    }
                }
                czasy[1] = czMax;
                zestaw.UstawZmianyCzasow(czasy);
                for (int i = 0; i < 16; i++)
                {
                    if (i == 0)
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS - 10);
                        pojazdow = (rand.Next(maxP) + 5) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                    else
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS);
                        pojazdow = (rand.Next(maxP) + 5 + rand.Next(10)) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                }
                zestaw.UstawWyjscie(new double[] { 0, 1, 0, 0, 0, 0 });
                break;

            case 2:
                for (int i = 0; i < 4; i++)
                {
                    if (i == 2)
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(20) + max;
                        sredniSt   = idealny + rand.Next(20) + max;
                        pojazdow   = maxP + rand.Next(10) + 10;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, t, t, t);
                    }
                    else
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(max - 10);
                        sredniSt   = idealny + rand.Next(max - 10);
                        pojazdow   = rand.Next(maxP) + 5;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, s[0], s[1], s[2]);
                    }
                }
                czasy[2] = czMax;
                zestaw.UstawZmianyCzasow(czasy);
                for (int i = 0; i < 16; i++)
                {
                    if (i == 0)
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS - 10);
                        pojazdow = (rand.Next(maxP) + 5) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                    else
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS);
                        pojazdow = (rand.Next(maxP) + 5 + rand.Next(10)) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                }
                zestaw.UstawWyjscie(new double[] { 0, 0, 1, 0, 0, 0 });
                break;

            case 3:
                for (int i = 0; i < 4; i++)
                {
                    if (i == 1 || i == 3)
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(20) + max;
                        sredniSt   = idealny + rand.Next(20) + max;
                        pojazdow   = maxP + rand.Next(10) + 10;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, s[0], t, t);
                    }
                    else
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(max - 10);
                        sredniSt   = idealny + rand.Next(max - 10);
                        pojazdow   = rand.Next(maxP) + 5;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, s[0], s[1], s[2]);
                    }
                }
                czasy[3] = czMax;
                zestaw.UstawZmianyCzasow(czasy);
                for (int i = 0; i < 16; i++)
                {
                    if (i == 0)
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS - 10);
                        pojazdow = (rand.Next(maxP) + 5) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                    else
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS);
                        pojazdow = (rand.Next(maxP) + 5 + rand.Next(10)) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                }
                zestaw.UstawWyjscie(new double[] { 0, 0, 0, 1, 0, 0 });
                break;

            case 4:
                for (int i = 0; i < 4; i++)
                {
                    if (i == 1)
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(20) + max;
                        sredniSt   = idealny + rand.Next(20) + max;
                        pojazdow   = maxP + rand.Next(10) + 10;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, t, t, t);
                    }
                    else
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(max - 10);
                        sredniSt   = idealny + rand.Next(max - 10);
                        pojazdow   = rand.Next(maxP) + 5;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, s[0], s[1], s[2]);
                    }
                }
                czasy[4] = czMax;
                zestaw.UstawZmianyCzasow(czasy);
                for (int i = 0; i < 16; i++)
                {
                    if (i == 0)
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS - 10);
                        pojazdow = (rand.Next(maxP) + 5) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                    else
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS);
                        pojazdow = (rand.Next(maxP) + 5 + rand.Next(10)) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                }
                zestaw.UstawWyjscie(new double[] { 0, 0, 0, 0, 1, 0 });
                break;

            case 5:
                for (int i = 0; i < 4; i++)
                {
                    if (i == 3)
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(20) + max;
                        sredniSt   = idealny + rand.Next(20) + max;
                        pojazdow   = maxP + rand.Next(10) + 10;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, t, t, t);
                    }
                    else
                    {
                        idealny    = rand.Next(40, 300);
                        sredni     = idealny + rand.Next(max - 10);
                        sredniSt   = idealny + rand.Next(max - 10);
                        pojazdow   = rand.Next(maxP) + 5;
                        pojazdowSt = pojazdow * 9 + rand.Next(pojazdow);

                        zestaw.UstawDanePasa(i, idealny, sredni, sredniSt, pojazdow, pojazdowSt, s[0], s[1], s[2]);
                    }
                }
                czasy[5] = czMax;
                zestaw.UstawZmianyCzasow(czasy);
                for (int i = 0; i < 16; i++)
                {
                    if (i == 0)
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS - 10);
                        pojazdow = (rand.Next(maxP) + 5) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                    else
                    {
                        idealny  = rand.Next(40, 300);
                        sredni   = idealny + rand.Next(maxS);
                        pojazdow = (rand.Next(maxP) + 5 + rand.Next(10)) * 9;
                        zestaw.UstawPasSasiada(i, idealny, sredni, pojazdow);
                    }
                }
                zestaw.UstawWyjscie(new double[] { 0, 0, 0, 0, 0, 1 });
                break;
            }

            zestawyUczace.Add(zestaw);
        }