Example #1
0
        //Передача даних для генетичного алгоритму
        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);
        }
Example #2
0
        //Збереження оцінок з 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);
        }