private void zapisz(Warstwa warstwa, int skip, System.IO.StreamWriter file) { int w = 0; string tekst = ""; for (int j = 0; j < warstwy[skip + 1]; j++) { for (int i = 0; i < warstwy[skip] + 1; w++, i++) { tekst += warstwa.Wagi[w] + " "; } file.WriteLine(tekst); tekst = ""; } file.WriteLine(""); if (warstwy.Count > skip + 2) { foreach (Warstwa dziecko in warstwa.Dzieci) { zapisz(dziecko, skip + 1, file); } } }
void liczWyniki2(Warstwa warstwa, int skip, double beta = 1) { int w = 0; for (int j = 0; j < warstwy[skip + 1]; j++) { double s = 0; for (int i = -1; i < warstwy[skip]; w++, i++) { if (i == -1) { s += 1 * warstwa.Wagi[w]; } else { s += warstwa.Neutrony[i] * warstwa.Wagi[w]; } } double wynik = 1 / (1 + Math.Pow(Math.E, -beta * s)); warstwa.Dzieci[0].Neutrony[j] = wynik; } if (warstwy.Count > skip + 2) { liczWyniki2(warstwa.Dzieci[0], skip + 1); } }
private void ValuesClick(object sender, RoutedEventArgs e) { if (!dane) { MessageBox.Show("Brak wag, nie mozna obliczyc"); return; } finish.Text = ""; Warstwa warstwa = start; for (int k = 0; k < warstwy.Count - 1; k++) { warstwa = warstwa.Dzieci[0]; } foreach (List <int> probka in probki) { for (int l = 0; l < warstwy[0]; l++) { start.Neutrony[l] = probka[l]; } liczWyniki2(start, 0); finish.Text += "Wejscia "; foreach (float neutron in start.Neutrony) { finish.Text += neutron + " "; } finish.Text += ". Wynik to "; foreach (float neutron in warstwa.Neutrony) { finish.Text += neutron + " "; } finish.Text += "\n"; } }
public Siec(List <int> ile) { if (ile != null) { for (int i = 0; i < ile.Count - 1; i++) { Warstwa warstwa = new Warstwa(ile[i + 1], ile[i]); warstwy.Add(warstwa); } } }
private void robWarstwy(Warstwa warstwa, List <int> warstwy, int skip) { Warstwa tmp = new Warstwa(); if (warstwy.Count - 1 != skip) { generuj(tmp, skip); } warstwa.Dzieci.Add(tmp); if (warstwy.Count > skip + 1) { robWarstwy(tmp, warstwy, skip + 1); } }
private void liczBlad(List <double> d, double gamma, int p) { Warstwa tmp = start; double sigma; double blad; int i = -1; List <double> dlist = new List <double>(); for (int q = 0; q < warstwy.Count - 2 - p; q++) { tmp = tmp.Dzieci[0]; } for (int k = 0; k < tmp.Dzieci[0].Neutrony.Count; k++) { if (p == 0) { blad = (d[k] - tmp.Dzieci[0].Neutrony[k]) * gamma; } else { blad = d[k]; } sigma = blad * tmp.Dzieci[0].Beta * tmp.Dzieci[0].Neutrony[k] * (1 - tmp.Dzieci[0].Neutrony[k]); for (int j = 1 + i; j < tmp.Wagi.Count;) { for (i = -1; i < tmp.Neutrony.Count; i++, j++) { if (i == -1) { tmp.Wagi[j] += 1 * sigma; continue; } if (dlist.Count < i + 1) { dlist.Add(0); } dlist[i] += (tmp.Wagi[j] * sigma); tmp.Wagi[j] += tmp.Neutrony[i] * sigma; } break; } } if (tmp != start) { liczBlad(dlist, gamma, p + 1); } }
private void generuj(Warstwa warstwa, int i) { double max; String tmp = inputMax.Text; if (!double.TryParse(tmp, out max)) { } double min; String tmp2 = inputMin.Text; if (!double.TryParse(tmp2, out min)) { } for (int j = 0; j < (warstwy[i] + 1) * warstwy[i + 1]; j++) { Random random = new Random(); warstwa.Wagi.Add(random.NextDouble() * (max - min) + min); } }
public void read(string[] linie, Warstwa warstwa, int poczatek, bool przecinek, string separator = " ") { Warstwa tmp = new Warstwa(); int i = poczatek; for (; i < linie.Length - 1; i++) { var linia = linie[i].Trim(); if (string.IsNullOrEmpty(linia)) { break; } linia = przecinek ? linia.Replace(",", ".") : linia.Replace(".", ","); var liczby = linia.Split(new string[] { separator }, StringSplitOptions.RemoveEmptyEntries); for (int j = 0; j < liczby.Length; j++) { warstwa.Wagi.Add(double.Parse(liczby[j].Trim())); } if (!warstwy.Any()) { warstwy.Add(warstwa.Wagi.Count - 1); } } warstwa.Dzieci.Add(tmp); warstwy.Add(i - poczatek); if (poczatek == 0) { for (int j = 1; j <= warstwy[0]; j++) { warstwa.Neutrony.Add(1); } } if (i < linie.Length - 2) { read(linie, tmp, i + 1, przecinek); } else { liczWyniki(start, 0); } }
private void Save_Click(object sender, RoutedEventArgs e) { if (warstwy.Count < 2) { MessageBox.Show("Musisz dodac przynajmniej 2 warstwy"); return; } dane = true; List <List <int> > probki = new List <List <int> >(); probki = tworzProbki(); start = new Warstwa(); for (int i = 1; i <= warstwy[0]; i++) { start.Neutrony.Add(1); } generuj(start, 0); robWarstwy(start, warstwy, 1); liczWyniki(start, 0); InputBox.Visibility = System.Windows.Visibility.Collapsed; }
private void otworz_Click(object sender, RoutedEventArgs e) { warstwy = new List <int>(); OpenFileDialog plik; plik = new OpenFileDialog(); plik.Filter = "PlikTekstowy|*.txt"; plik.DefaultExt = ".txt"; Nullable <bool> plikOK = plik.ShowDialog(); if (plikOK == true) { start = new Warstwa(); pobrane = true; dane = true; string[] linie = File.ReadAllLines(plik.FileName); string zab = "5.5"; double wynik; bool przecinek = double.TryParse(zab, out wynik); read(linie, start, 0, przecinek); } }
private void BladClick(object sender, RoutedEventArgs e) { if (!dane) { MessageBox.Show("Brak wag, nie mozna liczyc"); return; } if (!odp) { MessageBox.Show("Podaj najpierw plik z wejsciami i wyjsciami"); return; } String tmp2 = inputGamma.Text; double gamma; if (!double.TryParse(tmp2, out gamma)) { } Regex rgx = new Regex(@"^[+-]?([0-9]*[.])?[0-9]+$"); if (rgx.IsMatch(inputGamma.Text) != true || gamma <= 0) { MessageBox.Show("Gamma- Podawaj tylko liczbe typu double i wieksza od 0!"); inputGamma.Text = "0.1"; return; } tmp2 = inputEpsilon.Text; double num; if (!double.TryParse(tmp2, out num)) { } if (rgx.IsMatch(inputEpsilon.Text) != true || num < 0 || num > 1) { MessageBox.Show("Epsilon- Podawaj tylko liczbe z przedzialu 0-1!"); inputEpsilon.Text = "0"; return; } tmp2 = inputEpoki.Text; int epoki; Regex rgx2 = new Regex(@"^\d+$"); if (!int.TryParse(tmp2, out epoki)) { } if (rgx2.IsMatch(inputEpoki.Text) != true || num < 0) { MessageBox.Show("Epoki- Podawaj tylko liczbe int wieksza od 0!"); inputEpoki.Text = "20000"; return; } double blad = 0; for (int i = 0; i < epoki; i++) { for (int s = 0; s < probki.Count; s++) { for (int l = 0; l < warstwy[0]; l++) { start.Neutrony[l] = probki[s][l]; } List <double> dlist = new List <double>(); foreach (double wynik in probki2[probki[s]]) { dlist.Add(wynik); } liczWyniki2(start, 0); liczBlad(dlist, gamma, 0); Warstwa koniec = start; for (int q = 0; q < warstwy.Count - 1; q++) { koniec = koniec.Dzieci[0]; } if (s == 0) { blad = Math.Abs(dlist[0] - koniec.Neutrony[0]); } for (int k = 0; k < koniec.Neutrony.Count; k++) { if (blad < Math.Abs(dlist[k] - koniec.Neutrony[k])) { blad = Math.Abs(dlist[k] - koniec.Neutrony[k]); } } } probki.Shuffle(); if (blad < num) { break; } } finish.Text = "Blad policzony kliknij Oblicz wartosci, aby sprawdzic wyniki po uczeniu."; }
public void OnEnable() { _poziom = target as Poziom; _poprzedniaWarstwa = Warstwa.Brak; AktualnaWarstwa = _poprzedniaWarstwa; m_fields = ExposeProperties.ExposeProperties.GetProperties(_poziom); }