//Передача даних для генетичного алгоритму private void AddDataToGA(//int countRows, List <SolutionsOfFunction> solOfFuncList, List <Function> funcList, Dictionary <int, Dictionary <int, decimal> > estimates) { GeneticAlgorithm.ManagerGA manager = GeneticAlgorithm.ManagerGA.GetInstance(); manager.SetDataForMorphTable(//countRows, solOfFuncList, funcList, estimates); }
//Збереження оцінок з DGV для кожної модифікації згідно параметру цілі //Параметрична формула розрахунку оцінки виконання групи модифікацій j-го рішення //згідно з парметрам цілей. private void buttonSaveRating_Click(object sender, EventArgs e) { decimal sumAllMods = 0.0m; for (int i = 0; i < dataGridView1.Rows.Count; i++) { //GetFirstColumnNameSolutionFunction(i, ref solutionNameInTable, ref functionNameInTable); GetFirstColumnNameModification(i, ref modificationNameInTable); //Знайдемо рішення і функцію, яке зараз оцінюється відносно параметру цілей Modification selectedModification = modificationList.FirstOrDefault(m => m.name == modificationNameInTable); if (selectedModification is null) { return; } //decimal estimateSol = selectedSolOfFunc.Solution.weight ?? 0; int index = 0; decimal sum = 0; //Отримаємо оцінки по стовбцям foreach (ParametersGoal paramGoal in parametersGoalsList) { decimal estimateParamGoal = paramGoal.Goal.weight ?? 0; decimal estimateModOnParam = 0; if (!(decimal.TryParse(dataGridView1[++index, i].Value.ToString(), out estimateModOnParam))) { MessageBox.Show("Неможливо конвертувати значення комірки в тип decimal", "Помилка"); return; } //Питання відкрите щодо використання середнього значення в формулі sum += (estimateParamGoal * (estimateModOnParam / 100.0m)); } //Створюємо новий об'єкт, який закріплює за кожною цілью рішення і кінцеву оцінку рішення foreach (ParametersGoal paramGoal in parametersGoalsList) { ParametersGoalsForModification parameterGoalForModification = new ParametersGoalsForModification(); //Присваюємо модифікацію parameterGoalForModification.Modification = selectedModification; //Присвоємо параметричну ціль об'єкту parameterGoalForModification.ParametersGoal = paramGoal; //Присваюємо загальну оцінку щодо parameterGoalForModification.rating = sum; //Додамо до списку cacheData.AddElement <ParametersGoalsForModification>(parameterGoalForModification); } dataGridView1[dataGridView1.Columns.Count - 1, i].Value = sum; //накопичуємо оцінку всіх модифікацій sumAllMods += sum; //з урахуванням ваги мат. моделі sumAllMods *= SetWeightMathModel; } dataGridView1.Columns[dataGridView1.Columns.Count - 1].Visible = true; MessageBox.Show("Оцінки збережено", "Пітверджено"); //Збереження даних для генетичного алгоритму //А саме: збереження сукупної оцінки модифікацій для рішень (буде задієно у фітнес функції) GeneticAlgorithm.ManagerGA manager = GeneticAlgorithm.ManagerGA.GetInstance(); manager.SetDataForTableParametersGoalsModifications(sumAllMods); }
//Збереження оцінок з DGV для кожного рішення параметру цілі //Параметрична формула розрахунку виконання //технічними рішеннями згідно параметрам цілей private void buttonSaveRating_Click(object sender, EventArgs e) { Dictionary <int, decimal> solEstimateByParametersDict = new Dictionary <int, decimal>(); //int firstIndex = dataGridView1.Columns.GetFirstColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.None).Index; for (int i = 0; i < dataGridView1.Rows.Count; i++) { GetFirstColumnNameSolutionFunction(i, ref solutionNameInTable, ref functionNameInTable); //Знайдемо рішення і функцію, яке зараз оцінюється відносно параметру цілей SolutionsOfFunction selectedSolOfFunc = solOfFuncList.FirstOrDefault(s => (s.Solution.name == solutionNameInTable) && (s.Function.name == functionNameInTable)); if (selectedSolOfFunc is null) { return; } //decimal estimateSol = selectedSolOfFunc.Solution.weight ?? 0; int index = 0; decimal sum = 0; //Отримаємо оцінки по стовбцям foreach (ParametersGoal paramGoal in parametersGoalsList) { decimal estimateParamGoal = paramGoal.Goal.weight ?? 0; decimal estimateSolOnParam = 0; if (!(decimal.TryParse(dataGridView1[++index, i].Value.ToString(), out estimateSolOnParam))) { MessageBox.Show("Неможливо конвертувати значення комірки в тип decimal", "Помилка"); return; } //Питання відкрите щодо використання середнього значення в формулі sum += (estimateParamGoal * (estimateSolOnParam / 100.0m)); } //Створюємо новий об'єкт, який закріплює за кожною цілью рішення і кінцеву оцінку рішення foreach (ParametersGoal paramGoal in parametersGoalsList) { ParametersGoalsForSolution parameterGoalForSolution = new ParametersGoalsForSolution(); //Присваюємо рішення об'єкту parameterGoalForSolution.Solution = selectedSolOfFunc.Solution; //Присвоємо параметричну ціль об'єкту parameterGoalForSolution.ParametersGoal = paramGoal; //Присваюємо загальну оцінку щодо parameterGoalForSolution.rating = sum; //Додамо до списку //cacheData.AddParamGoalForSolToList(parameterGoalForSolution); cacheData.AddElement <ParametersGoalsForSolution>(parameterGoalForSolution); } //з урахуванням ваги мат. моделі sum *= SetWeightMathModel; dataGridView1[dataGridView1.Columns.Count - 1, i].Value = sum; //Зберігаємо оцінку рішення по параметрам в словник //Для генетичного алгоритму AddSolToDict(solEstimateByParametersDict, selectedSolOfFunc.Solution.id_solution, sum); } dataGridView1.Columns[dataGridView1.Columns.Count - 1].Visible = true; MessageBox.Show("Оцінки збережено", "Пітверджено"); //Передеча даних для генетичного алгоритму //List<ParametersGoalsForSolution> list = cacheData.GetListElements<ParametersGoalsForSolution>(); GeneticAlgorithm.ManagerGA manager = GeneticAlgorithm.ManagerGA.GetInstance(); manager.SetDataForTableParametersGoalsSolutions(solEstimateByParametersDict);//list); }