private static void GetAlgorithmType(ref InputData inputData) { Console.WriteLine("Which type of genetic algorithm do you wish to use? (E.g. G for generational, E for eliminating)"); bool correctInput = false; do { var result = AlgorithmTypeString.Decode(AskForInput <string>()); if (result == null) { continue; } correctInput = true; inputData.Type = (AlgorithmType)result; } while (!correctInput); }
/// <summary> /// Special method that ensures correct input parameters for specified genetic algorithm from console arguments /// </summary> /// <param name="args">Console arguments</param> /// <returns>Struct defining input parameters</returns> private static InputData HandleArgs(string[] args) { InputData inputData = new InputData(); if (!File.Exists(args[0])) { ErrorHandler.TerminateExecution(ErrorCode.NoSuchFile); } inputData.FileName = args[0]; var result = AlgorithmTypeString.Decode(args[1]); if (result == null) { ErrorHandler.TerminateExecution(ErrorCode.WrongAlgorithmChoice); } else { inputData.Type = (AlgorithmType)result; } SetVariable(args[2], out inputData.PopulationSize); SetVariable(args[3], out inputData.MutationProbability); switch (inputData.Type) { case AlgorithmType.Generation: SetVariable(args[4], out inputData.CrossoverProbability); break; case AlgorithmType.Elimination: SetVariable(args[4], out inputData.Mortality); break; } switch (args.Length) { case 5: inputData.Elitism = true; inputData.MaxIterations = MaxIterations; inputData.MinError = MinError; break; case 6: SetVariable(args[5], out inputData.Elitism); inputData.MaxIterations = MaxIterations; inputData.MinError = MinError; break; case 7: SetVariable(args[5], out inputData.MaxIterations); SetVariable(args[6], out inputData.MinError); break; case 8: SetVariable(args[5], out inputData.Elitism); SetVariable(args[6], out inputData.MaxIterations); SetVariable(args[7], out inputData.MinError); break; } if (inputData.MaxIterations < 0) { inputData.MaxIterations = MaxIterations; } if (inputData.MinError < 0) { inputData.MinError = MinError; } return(inputData); }