//Додавання параметрів цілей до списку private void buttonAddParameterToList_Click(object sender, EventArgs e) { if (dataGridView1.CurrentRow == null) { return; } ParametersGoal paramGoal = dataGridView1.CurrentRow.DataBoundItem as ParametersGoal; if (paramGoal == null) { MessageBox.Show("Параметр для цілі не обрано!", "Помилка"); return; } //Знаходимо ціль, яку вибрав користувач в базі даних. для зв'язки string selectedGoalName = comboBox1.SelectedItem.ToString(); Goal selectedGoal = goals.FirstOrDefault(g => g.name == selectedGoalName); if (selectedGoal == null) { MessageBox.Show("Обраної цілі не існує в базі даних! \n Оберіть існуючу ціль!", "Помилка вибору цілі"); return; } //Закріплюємо за параметром обрану користувачем ціль ParametersGoal newParamGoal = new ParametersGoal() { id_parameter = paramGoal.id_parameter, name = paramGoal.name, unit = paramGoal.unit, Goal = selectedGoal }; //Зберегти в локальне сховище if (cacheData.AddElement <ParametersGoal>(newParamGoal)) { MessageBox.Show("Параметр: " + newParamGoal.name + " для цілі: " + newParamGoal.Goal.name + " додано для оцінювання!", "Підтверджено"); } else { MessageBox.Show("Параметр: " + newParamGoal.name + " для цілі: " + newParamGoal.Goal.name + " вже занесено для оцінювання!", "Відхилено"); } //Зберегти до бази даних //db.SolutionsOfFunctions.AddOrUpdate(solOfFunc); }
//Додавання функцій та їх технічних рішень private void buttonAddSolutionsOfFunctionsToList_Click(object sender, EventArgs e) { if (dataGridView1.CurrentRow == null) { return; } Solution sol = dataGridView1.CurrentRow.DataBoundItem as Solution; if (sol == null) { MessageBox.Show("Рішення для функції не обрано!", "Помилка"); return; } //Знаходимо функцію, яку вибрав користувач в базі даних. для зв'язки string selectedFuncName = comboBox1.SelectedItem.ToString(); Function selectedFunc = funcList.FirstOrDefault(f => f.name == selectedFuncName); if (selectedFunc == null) { MessageBox.Show("Обраної функції не існує в базі даних! \n Оберіть існуючу функцію!", "Помилка вибору функції"); return; } //Створюємо об'єкт де функція має своє рішення SolutionsOfFunction solOfFunc = new SolutionsOfFunction() { Solution = sol, Function = selectedFunc }; //Зберегти в локальне сховище if (solOfFuncCacheData.AddElement <SolutionsOfFunction>(solOfFunc)) { MessageBox.Show("Рішення: " + solOfFunc.Solution.name + " для функції: " + solOfFunc.Function.name + " додано для оцінювання!", "Підтверджено"); } else { MessageBox.Show("Рішення: " + solOfFunc.Solution.name + " для функції: " + solOfFunc.Function.name + " вже занесено для оцінювання!", "Відхилено"); } //Зберегти до бази даних //db.SolutionsOfFunctions.AddOrUpdate(solOfFunc); }
private void buttonAddGoalToList_Click(object sender, EventArgs e) { var goal = dataGridView1.CurrentRow.DataBoundItem as Goal; if (goal == null) { MessageBox.Show("Ціль не обрана!", "Помилка"); return; } else { if (cacheData.AddElement <Goal>(goal)) { MessageBox.Show("Ціль " + goal.name + " додано для оцінювання!", "Підтверджено"); } else { MessageBox.Show("Ціль " + goal.name + " вже занесено для оцінювання!", "Відхилено"); } } }
private void buttonAddFuncToList_Click(object sender, EventArgs e) { var func = dataGridView1.CurrentRow.DataBoundItem as Function; if (func == null) { MessageBox.Show("Функція не обрана!", "Помилка"); return; } else { if (funcCacheData.AddElement <Function>(func)) { MessageBox.Show("Функцію " + func.name + " додано для оцінювання!", "Підтверджено"); } else { MessageBox.Show("Функцію " + func.name + " вже занесено для оцінювання!", "Відхилено"); } } }
private void buttonAddModToList_Click(object sender, EventArgs e) { var mod = dataGridView1.CurrentRow.DataBoundItem as Modification; if (mod == null) { MessageBox.Show("Модифікація не обрана!", "Помилка"); return; } else { if (cahceData.AddElement <Modification>(mod)) { MessageBox.Show("Функцію " + mod.name + " додано для оцінювання!", "Підтверджено"); } else { MessageBox.Show("Функцію " + mod.name + " вже занесено для оцінювання!", "Відхилено"); } } }
//Збереження оцінок з 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); }