Exemple #1
0
        public Siec(int x_el, int y_el, Canvas canvas, Punkt pozycja_poczatkowa, double delta_pozycji, Punkt[] zbiorTreningowy, double sila_przesuniecia, double promien_zmian, double spadek_sily_przesuniecia, double spadek_promienia)
        {
            this.spadek_sily_przesuniecia = spadek_sily_przesuniecia;
            this.spadek_promienia         = spadek_promienia;
            this.zbiorTreningowy          = zbiorTreningowy;
            this.sila_przesuniecia        = poczatkowa_sila_przesuniecia = sila_przesuniecia;
            this.promien_zmian            = poczatkowy_promien_zmian = promien_zmian;
            iteracja = 0;
            OblParamertFunkcjiSilyPrzesuniecia();

            xEl  = x_el;
            yEl  = y_el;
            siec = new PunktSieci[x_el, y_el];

            Random r = new Random();

            for (int i = 0; i < x_el; i++)
            {
                for (int j = 0; j < y_el; j++)
                {
                    double x = pozycja_poczatkowa.x + (r.NextDouble() * 2 - 1) * delta_pozycji;
                    double y = pozycja_poczatkowa.y + (r.NextDouble() * 2 - 1) * delta_pozycji;
                    siec[i, j] = new PunktSieci(x, y, i, j, this);
                }
            }

            ZainicjujLinie(canvas);
        }
Exemple #2
0
        public void WykonajIteracje()
        {
            Punkt pTr = zbiorTreningowy[iteracja % zbiorTreningowy.Length];

            // Wybierz najbliższy
            PunktSieci zwyciezca     = null;
            double     odl_zwyciezcy = double.MaxValue;

            foreach (PunktSieci p in siec)
            {
                double odl_p = p.Odleglosc(pTr);

                if (odl_p < odl_zwyciezcy)
                {
                    zwyciezca     = p;
                    odl_zwyciezcy = odl_p;
                }
            }

            // Wprowadzenie zmian
            PrzesunNeurony(pTr, zwyciezca);

            // Spadek wartości parametrów
            ObliczNowaSilePrzesuniecia();
            SpadekPromieniaZmian();

            iteracja += 1;
        }
Exemple #3
0
        private void PrzesunNeurony(Punkt pTr, PunktSieci p, double odl = 0.0, bool wPrawo = true, bool wLewo = true, bool wGore = true, bool wDol = true)
        {
            if (FunkcjaZmian(odl) == 0)
            {
                return;
            }

            // Przesun
            PrzesunNeuron(pTr, p, odl);

            // Rozwiń sąsiadów
            PunktSieci s;

            // Rozwiń sąsiadów w pionie
            s = p.SasiadGorny();
            if (wGore && s != null)
            {
                PrzesunNeurony(pTr, s, 1 + odl, false, false, true, false);
            }

            s = p.SasiadDolny();
            if (wDol && s != null)
            {
                PrzesunNeurony(pTr, s, 1 + odl, false, false, false, true);
            }

            // Rozwiń sąsiadów w poziomie
            s = p.SasiadLewy();
            if (wLewo && s != null)
            {
                PrzesunNeurony(pTr, s, 1 + odl, false, true, true, true);
            }

            s = p.SasiadPrawy();
            if (wPrawo && s != null)
            {
                PrzesunNeurony(pTr, s, 1 + odl, true, false, true, true);
            }
        }