// ACTIONS
        private static InstanceGeneratorConfig instance_from_file()
        {
            ++curr_pos;
            instanceGeneratorConfig = new InstanceGeneratorConfig();
            List <string> values = new List <string>();

            try
            {
                using (StreamReader stream = new StreamReader(args[curr_pos]))
                {
                    while (stream.Peek() != -1)
                    {
                        values.Add(stream.ReadLine());
                    }
                }

                if (values.Count != 11)
                {
                    throw new Exception($"Number of detected parameters ({values.Count}) different than the expected value (11).");
                }

                Console.Write("Manual instance parameters input (-file) detected. Starting instance with:\n" +
                              $"time periods = {values[0]}\n" +
                              $"max operating depots per periods = {values[1]}\n" +
                              $"max customer nodes per depot node = {values[2]}\n" +
                              $"depot usage cost = {values[3]}\n" +
                              $"number of depots = {values[4]}\n" +
                              $"number of customers = {values[5]}\n" +
                              $"depot creation radius = {values[6]}\n" +
                              $"number of priority groups = {values[7]}\n" +
                              $"x dimension of the board (used for visual representation) = {values[8]}\n" +
                              $"y dimension of the board (used for visual representation) = {values[9]}\n");
                Console.WriteLine($"RNG seed = {values[10]}");

                return(new InstanceGeneratorConfig()
                {
                    time_periods = Convert.ToInt32(values[0]),
                    max_depot_nodes_per_period = Convert.ToInt32(values[1]),
                    max_nodes_per_depot = Convert.ToInt32(values[2]),
                    depot_usage_cost = Convert.ToDouble(values[3]),
                    n_depots = Convert.ToInt32(values[4]),
                    n_nodes = Convert.ToInt32(values[5]),
                    depot_creation_radius = Convert.ToInt32(values[6]),
                    number_of_priority_groups = Convert.ToInt32(values[7]),
                    x_dim = Convert.ToInt32(values[8]),
                    y_dim = Convert.ToInt32(values[9]),
                    RNG = new Random(Convert.ToInt32(values[10]))
                });
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                end(1, "Error when parsing instance parameters from file.");
                return(null);
            }
        }
        static int Main(string[] args)
        {
            try
            {
                ArgParser.parse_args(args);

                InstanceGeneratorConfig instanceGeneratorConfig = ArgParser.getInstanceGeneratorConfig();
                InstanceGeneratorMain   instanceGenerator       = new InstanceGenerator.InstanceGeneratorMain(instanceGeneratorConfig);
                instanceGenerator.create_instance();

                PMedian pMedianProblem = new PMedian(instanceGenerator, ArgParser.getDrawingPath() + "PMEDIAN");
                pMedianProblem.setup_problem();
                pMedianProblem.solve_instance(ArgParser.getModelRuntime());
                pMedianProblem.publish_model();

                if (ArgParser.getDrawingPath() != null)
                {
                    InstanceDrawing instanceDrawing = new InstanceDrawing(instanceGenerator, new DrawingSettings());
                    instanceDrawing.draw(ArgParser.getDrawingPath() + "instance");
                    pMedianProblem.draw_solution(instanceDrawing, ArgParser.getDrawingPath() + "solution");
                }

                if (ArgParser.results_filename != null)
                {
                    pMedianProblem.write_results_to_file(ArgParser.results_filename);
                }

                return(0);
                //else
                //{
                //    PMedianController.folder_cleanup(".bmp", ".lp", ".sol");

                //    InstanceGenerator.InstanceGeneratorMain instanceGenerator = new InstanceGenerator.InstanceGeneratorMain(new InstanceGeneratorConfig());
                //    instanceGenerator.create_instance();
                //    InstanceDrawing instanceDrawing = new InstanceDrawing(instanceGenerator, new DrawingSettings());
                //    instanceDrawing.draw("instance");
                //    PMedian pMedianProblem = new PMedian(instanceGenerator, "PMedian");
                //    pMedianProblem.setup_problem();
                //    pMedianProblem.solve_instance(7200);
                //    pMedianProblem.publish_model();
                //    pMedianProblem.draw_solution(instanceDrawing, "solution");

                //    return 0;
                //}
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                ArgParser.getHelp();
                return(1);
            }
        }
        private static bool parse_instance_config()
        {
            switch (args[curr_pos])
            {
            case "-file":
            case "-f":
                instanceGeneratorConfig = instance_from_file();
                ++curr_pos;
                return(true);

            case "-val":
            case "-values":
                instanceGeneratorConfig = instance_from_args();
                ++curr_pos;
                return(true);

            case "-default":
            case "-dflt":
                instanceGeneratorConfig = instance_from_default();
                ++curr_pos;
                return(true);
            }
            return(false);
        }