Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        /// <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);
        }