static void DisplayActivation(double[] weights, int dim, int numData, string filename) { InputOutputHandler myInput = new InputOutputHandler(dim, numData, filename); double[][][] data = myInput.GetInputs(); ANNPerceptron res = new ANNPerceptron(); for (int i = 0; i < data.Length; i++) { double activation = res.Result(data[i][0], weights); //Console.WriteLine("Activation= " + activation.ToString() + " || actual sol= " + data[i][1][0].ToString() + " || single error= " + (activation - data[i][1][0]).ToString()); } }
static double Error(double[] weights, int dim, int numData, string filename) { InputOutputHandler myInput = new InputOutputHandler(dim, numData, filename); double[][][] data = myInput.GetInputs(); ANNPerceptron res = new ANNPerceptron(); double sumSq = 0; for (int i = 0; i < data.Length; i++) { double activation = res.Result(data[i][0], weights); //Console.WriteLine(" - activation= " + activation.ToString() + " - actual sol= " + data[i][1][0].ToString()); sumSq += Math.Pow(activation - data[i][1][0], 2); } double err = Math.Sqrt((1.0 / data.Length) * sumSq); return(err); }
static void Main(string[] args) { Console.Write("Input number of fireflies (between 15 and 40): "); int numFireflies = Convert.ToInt16(Console.ReadLine()); // typically 15-40 if (numFireflies < 15 || numFireflies > 40) { numFireflies = 40; } Console.Write("Input the dimensionality (typically 4): "); int dim = Convert.ToInt16(Console.ReadLine()); if (dim < 3 || dim > 5) { dim = 4; } Console.Write("Input the maximum no of epochs (typically 1000): "); int maxEpochs = Convert.ToInt16(Console.ReadLine()); if (maxEpochs < 500 || maxEpochs > 2000) { maxEpochs = 1000; } Console.Write("Input value for the variable in the value of alpha: "); FireflyProgram.aVar = Convert.ToInt16(Console.ReadLine()); if (FireflyProgram.aVar < 0.0 || FireflyProgram.aVar > 2.0) { FireflyProgram.aVar = 0.98; } int seed = 0; Console.Write("Input no of training/testing records to use (typically between 10 and 50): "); int numData = Convert.ToInt16(Console.ReadLine()); if (numData < 5 || numData > 100) { numData = 50; } Console.Write("input the name of your training/testing file (eg. alk.csv): "); string filename = Console.ReadLine(); if (filename == "") { filename = "alk.csv"; } Console.Clear(); Console.WriteLine("\nSetting numFireflies = " + numFireflies); Console.WriteLine("Setting problem dim = " + dim); Console.WriteLine("Setting maxEpochs = " + maxEpochs); Console.WriteLine("Setting initialization seed = " + seed); Console.WriteLine("Setting no training/testing data = " + numData); Console.WriteLine("Setting no training/testing file name = " + filename); Console.WriteLine("\nStarting firefly algorithm\n"); double[] bestWeights = Solve(numFireflies, dim, seed, maxEpochs, numData, filename); Console.WriteLine("\nFinished\n"); Console.WriteLine("Best solution found: "); Console.Write("weights = "); ShowVector(bestWeights, 4, true); double error = Error(bestWeights, dim, numData, filename); Console.Write("Error at best weight = "); Console.WriteLine(error.ToString("F4")); //DisplayActivation(bestWeights, dim, numData, filename); InputOutputHandler myInput = new InputOutputHandler(dim, numData, filename); myInput.WriteOutputs(bestWeights); Console.WriteLine("\nEnd of algorithm\n"); Console.ReadLine(); }