public MainWindow() { InitializeComponent(); _geneticViewModel = (GeneticViewModel)App.Current.Resources["ViewModel"]; _hillClimbingViewModel = (HillClimbingViewModel)App.Current.Resources["HillClimbingViewModel"]; _functionApproximationViewModel = (FunctionApproximationViewModel)App.Current.Resources["FunctionApproximationViewModel"]; }
/// <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)); }
/// <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)); }