Esempio n. 1
0
 public MainWindow()
 {
     InitializeComponent();
     _geneticViewModel               = (GeneticViewModel)App.Current.Resources["ViewModel"];
     _hillClimbingViewModel          = (HillClimbingViewModel)App.Current.Resources["HillClimbingViewModel"];
     _functionApproximationViewModel = (FunctionApproximationViewModel)App.Current.Resources["FunctionApproximationViewModel"];
 }
Esempio n. 2
0
        /// <summary>
        /// Формирует вьюшку подбора команды на проект.
        /// Задаются основные параметры алгоритма.
        /// </summary>
        public IActionResult Index(int projectid)
        {
            // Задаем некоторые значения по умолчанию.
            GeneticViewModel model = new GeneticViewModel()
            {
                ProjectId          = projectid,
                EliteCount         = 3,
                IterationsCount    = 30,
                SubstitutionsCount = 2,
                TeamCount          = 30
            };

            // Делаем несколько проверок, чтобы предупредит пользователя о возможных ошибках.
            // Ушел играть в Rome Total War 2 - потом допишу как-нить =)

            /* using var db = AppContextFactory.DB;
             * var project = db.Projects.First(i => i.Id == projectid);*/

            return(View(model));
        }
Esempio n. 3
0
        /// <summary>
        ///  Подбор команды проекта.
        /// </summary>
        public async Task <IActionResult> FindTeam(int projectId)
        {
            GeneticViewModel model = new GeneticViewModel();

            await TryUpdateModelAsync(model, "", i => i.TeamCount, i => i.SubstitutionsCount, i => i.EliteCount, i => i.IterationsCount, i => i.ProjectId);

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            // Начинаем представленье, начинаем песни петь — разрешите для начала алгоритм мне запустить =)
            int         epoch = 0;
            List <Team> teams = new List <Team>();

            while (epoch <= model.IterationsCount)
            {
                // Производим инициализацию команд в первой эпохе.
                if (epoch == 0)
                {
                    teams = InitializeTeams(model.ProjectId, model.TeamCount);
                }

                // Рассчитываем рейтинги команд.
                teams.ForEach(i => { i.CalcRating(); });

                // Собираем рейтинг. Привет Леше Р.!
                var orderedTeams = teams.OrderByDescending(i => i.Rating).ToList();

                // На последней итерации перестановок не делаем - толку нет, только время компьютерное убиваем нещадно, лучше свое время убедить, его не жалко.
                if (epoch == model.IterationsCount)
                {
                    teams = orderedTeams;
                    break;
                }

                // Оставляем "элитные" команды без изменений. В остальных меняем гребцов - они устали!
                var nextTeams = orderedTeams.Take(model.EliteCount).ToList();

                // Остальные команды, в которых предусмотрены перестановки.
                var restTeams = orderedTeams.Skip(model.EliteCount);

                // Делаем перестановки.
                foreach (var t in restTeams)
                {
                    t.MakeSubstitutions(model.SubstitutionsCount);
                    nextTeams.Add(t);
                }

                // Переходим в следующую эпоху. Пищи и золота вроде хватает.
                teams = nextTeams;
                epoch++;
            }

            // А тут формируем данные для странички с определением команд. Строим нехитрый рейтинг (не) Теглайна.
            GeneticChoiceViewModel viewModel = new GeneticChoiceViewModel
            {
                ProjectId = projectId,
                Teams     = teams
            };

            return(View(viewModel));
        }