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); }
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; }
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); } }