From 7e2a998d874eb45eb296a13ff17521a24b16f0ee Mon Sep 17 00:00:00 2001 From: kbecke23 Date: Thu, 26 Apr 2018 16:29:25 +0200 Subject: [PATCH] Dokumentiertes .cs File mit aktuellem Code --- bin/NMLS_c_sharp_variante.cs | 232 +++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 bin/NMLS_c_sharp_variante.cs diff --git a/bin/NMLS_c_sharp_variante.cs b/bin/NMLS_c_sharp_variante.cs new file mode 100644 index 0000000..bde6665 --- /dev/null +++ b/bin/NMLS_c_sharp_variante.cs @@ -0,0 +1,232 @@ + +// Variable mit der anzahl Punkten zwischen 0 - 255 +static int M = 1000; + +// Variable zum tracken der Gewichte +const int tracking = 40; + +// C# only zum erstellen von Randomzahlen +static Random rnd = new Random(); + +// Array mit den Testwerten +static double[] _x = new double[M]; + +// Array mit den Gewichten +static double[,] w = new double[M, M]; + +// Lernrate +static double learnrate = 1; + +/************************************************************** +main() des Programms +***************************************************************/ + +int main(){ + + // Initialisierung des Test Array + Gewichte + for (int i = 0; i < M; i++) + { + _x[i] += ((255.0 / M) * i); + for (int k = 1; k < M; k++) + { + w[k, i] = rnd.NextDouble(); + //Console.WriteLine(String.Format("Weight: {0}", w[k, i])); + } + + } + + // Zum erstellen eines Files mit den Gewichten vor den Updates + for (int i = 0; i < tracking; i++) + { + for (int k = 1; k < tracking; k++) + { + File.AppendAllText("weights.txt", + String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), + Encoding.UTF8); + } + } + + // Variante die Ausgeführt werden soll + lokalerMittelWert(); + + // Zum erstellen eines Files mit den Gewichten nach den Updates + for (int i = 0; i < tracking; i++) + { + for (int k = 1; k < tracking; k++) + { + File.AppendAllText("weights_after.txt", + String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), + Encoding.UTF8); + } + + } + + +} + +/************************************************************** +Errechnet die 1. Variante, mit abziehen des lokalen Mittelwertes +***************************************************************/ + +void lokalerMittelWert() +{ + //Array in dem e(n) gespeichert wird + double[] x_error = new double[M]; + + //Laufzeitvariable + int x_count = 0; + + // x_count + 1 da x_count > 0 sein muss + while (x_count + 1 < M) + { + //Erstellt ein neues Array mit allen werten bis zur Laufzeitvariable + double[] x_part_Array = new double[x_count]; + Array.Copy(_x, 0, x_part_Array, 0, x_count); + double x_middle = (x_count > 0) ? ( x_part_Array.Sum() / x_count) : 0; + + // Variable für die errechnete Zahl + double x_pred = 0.0; + + // Variable mit der eigentlichen Zahl + double x_actual = _x[x_count + 1]; + + for (int i = 1; i < x_count; i++) + { + x_pred += (w[i, x_count] * (_x[x_count - i] - x_middle)); + } + x_pred += x_middle; + + //Console.WriteLine(String.Format("X_sum: {0}", x_middle)); + + //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); + //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); + + x_error[x_count] = x_actual - x_pred; + + // Funktion zum berechnen des Quadrates + double x_square = 0; + for (int i = 1; i <= x_count; i++) + { + x_square += Math.Pow(_x[x_count - i], 2); + } + + // Funktion zum updaten der Gewichte + for (int i = 1; i < x_count; i++) + { + w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * (_x[x_count - i] / x_square); + } + + // Laufzeitvariable hochzählen + x_count += 1; + } + + // Berechenen des mittleren Fehlers + double mittel = x_error.Sum() / x_error.Length; + + // Berechenen der varianz des Fehlers + double varianz = 0.0; + foreach (double x_e in x_error) + { + varianz += Math.Pow(x_e - mittel, 2); + } + varianz /= x_error.Length; + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("ergebnisse.txt", + String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), + Encoding.UTF8); +} + +/************************************************************** +Errechnet die 2. Variante, mit abziehen des direkten Vorgängers +***************************************************************/ + +void direkterVorgaenger() +{ + //Array in dem e(n) gespeichert wird + double[] x_error = new double[M]; + + //Laufzeitvariable + int x_count = 0; + + // x_count + 1 da x_count > 0 sein muss + while (x_count + 1 < M) + { + // Variable für die errechnete Zahl + double x_pred = 0.0; + + // Variable mit der eigentlichen Zahl + double x_actual = _x[x_count + 1]; + + // Funktion fürs berechnen der Vorhersagezahl + for (int i = 1; i < x_count; i++) + { + x_pred += (w[i, x_count] * (_x[x_count - i] - _x[x_count - i - 1])); + } + x_pred += _x[x_count - 1]; + + //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("direkterVorgaenger.txt", + String.Format("{0}. X_pred {1}\n", x_count, x_pred), + Encoding.UTF8); + + //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("direkterVorgaenger.txt", + String.Format("{0}. X_actual {1}\n", x_count, x_actual), + Encoding.UTF8); + + // Berechnung des Fehlers + x_error[x_count] = x_actual - x_pred; + + + //Console.WriteLine(String.Format("X_error: {0}", x_error)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("direkterVorgaenger.txt", + String.Format("{0}. X_error {1}\n\n", x_count, x_error), + Encoding.UTF8); + + // Funktion zum berechnen des Quadrates + double x_square = 0; + for (int i = 1; i < x_count; i++) + { + x_square += Math.Pow(_x[x_count - i] - _x[x_count - i - 1], 2); + } + + //Console.WriteLine(String.Format("X_square: {0}", x_square)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + //File.AppendAllText("direkterVorgaenger.txt", + // String.Format("{0}. X_square {1}\n", x_count, x_square), + // Encoding.UTF8); + + // Funktion zum updaten der Gewichte + for (int i = 1; i < x_count; i++) + { + w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((_x[x_count - i] - _x[x_count - i - 1]) / x_square); + } + + // Laufzeitvariable hochzählen + x_count += 1; + } + + // Berechenen des mittleren Fehlers + double mittel = x_error.Sum() / x_error.Length; + + // Berechenen der varianz des Fehlers + double varianz = 0.0; + foreach (double x_e in x_error) + { + varianz += Math.Pow(x_e - mittel, 2); + } + varianz /= x_error.Length; + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("ergebnisse.txt", + String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), + Encoding.UTF8); +} \ No newline at end of file