示例#1
0
        public ActionResult Index()
        {
            var enumService = new EnumService();

            var model = new TSPViewModel();

            model.CrossoverTypes = enumService.GetCrossoverTypes();
            model.TSPAlgorithms  = enumService.GetTSPAlgorithmTypes();
            model.SelectionTypes = enumService.GetSelectionTypes();

            model.Temperature = 1000;
            model.Number      = 20;
            model.CoolingRate = 0.003;

            model.MutatorValue    = 2;
            model.GenerationCount = 100;
            model.PopulationSize  = 300;

            return(View(model));
        }
示例#2
0
        public ActionResult Result(TSPViewModel model)
        {
            var algorithmType = (TSPAlgorithm)Enum.Parse(
                typeof(TSPAlgorithm),
                model.SelectedPosition);

            var crossoverType = (CrossoverType)Enum.Parse(
                typeof(CrossoverType),
                model.SelectedCrossoverPosition);

            var selectionType = (SelectionType)Enum.Parse(
                typeof(SelectionType),
                model.SelectedSelectionPosition);

            IAlgorithm  algorithm = null;
            List <City> cities;

            if (!string.IsNullOrEmpty(model.Cities))
            {
                cities = new List <City>();
                foreach (var line in model.Cities.Split('\n'))
                {
                    var words = line.Split(';');

                    var city = new City()
                    {
                        Name = words[0],
                        X    = double.Parse(words[1]),
                        Y    = double.Parse(words[2])
                    };

                    cities.Add(city);
                }
            }
            else if (model.RandomData)
            {
                cities = TSPCreatorHelper.GenerateCity(30);
            }
            else
            {
                cities = DemoTSPData.Get();
            }

            if (algorithmType == TSPAlgorithm.GeneticAlgorithm)
            {
                algorithm = new GeneticAlgorithm(
                    model.MutatorValue,
                    model.GenerationCount,
                    model.PopulationSize,
                    crossoverType,
                    selectionType,
                    cities);
            }
            else if (algorithmType == TSPAlgorithm.SimulatedAnnealing)
            {
                algorithm = new SimulatedAnnealing(
                    model.Temperature,
                    model.CoolingRate,
                    model.Number,
                    cities);
            }
            else
            {
                throw new Exception();
            }

            algorithm.Execute();

            var result = new TSPResultViewModel()
            {
                Result = algorithm.GetResult(),
                Cities = TourManager.Cities
            };

            return(View(result));
        }