public IntegralResultsForm( Form prevForm, Model model, Dictionary <TId, UtilityFunction> utilityFunctions, IntegralCriterionMethods method) { InitializeComponent(); // Подстройка интерфейса this.Left = prevForm.Left; this.Top = prevForm.Top; if (this.FormBorderStyle != FormBorderStyle.FixedSingle) { this.WindowState = prevForm.WindowState; } if (this.WindowState == FormWindowState.Normal) { this.Width = prevForm.Width; this.Height = prevForm.Height; } this._prevForm = prevForm; this._model = model; this._utilityFunctions = utilityFunctions; this._showNormalizedCriterionValues = false; this._showUtilityFunctionValues = false; IIntegralCriterionMethodSolver solver = new AdditiveCriterionSolver(); switch (method) { case IntegralCriterionMethods.AdditiveCriterion: case IntegralCriterionMethods.AdditiveCriterionWithUtilityFunction: solver = new AdditiveCriterionSolver(); break; case IntegralCriterionMethods.MultiplicativeCriterion: case IntegralCriterionMethods.MultiplicativeCriterionWithUtilityFunction: solver = new MultiplicativeCriterionSolver(); break; case IntegralCriterionMethods.MinimaxMethod: solver = new MinimaxSolver(); // Уберем возможность показывать значения функции полезности this.mnuShowUtilityFunctionValues.Enabled = false; break; } switch (method) { case IntegralCriterionMethods.AdditiveCriterion: case IntegralCriterionMethods.MultiplicativeCriterion: case IntegralCriterionMethods.MinimaxMethod: this.mnuShowUtilityFunctionValues.Enabled = false; this.mnuShowNormalizedCriterionValues.Enabled = true; this._result = solver.FindDecision(this._model); IntegralCriterionResultDataGridFiller.FillDataGrid( this._model, this._result, this.dgvData, this._showNormalizedCriterionValues); break; case IntegralCriterionMethods.AdditiveCriterionWithUtilityFunction: case IntegralCriterionMethods.MultiplicativeCriterionWithUtilityFunction: this.mnuShowUtilityFunctionValues.Enabled = true; this.mnuShowNormalizedCriterionValues.Enabled = false; this._result = solver.FindDecisionWithUtilityFunction(this._model, this._utilityFunctions); IntegralCriterionResultDataGridFiller.FillDataGridWithUtilityFunction( this._model, this._utilityFunctions, this._result, this.dgvData, this._showUtilityFunctionValues); break; } // Запустим сборщик мусора, чтобы убить // предыдущие ветки System.GC.Collect(); }
private void btnNext_Click(object sender, EventArgs e) { IntegralCriterionMethods method = IntegralCriterionMethods.AdditiveCriterion; if (this.rbnAdditiveCriterion.Checked) { if (this.chbUtilityFunction.Checked) { method = IntegralCriterionMethods.AdditiveCriterionWithUtilityFunction; } else { method = IntegralCriterionMethods.AdditiveCriterion; } } if (this.rbnMultiplicativeCriterion.Checked) { if (this.chbUtilityFunction.Checked) { //method = IntegralCriterionMethods.MultiplicativeCriterionWithUtilityFunction; throw new NotImplementedException(); } else { // Проверим, все ли критерии имеют одинаковый тип if (MultiplicativeCriterionSolver.CriteriaHaveSimilarType(this._model)) { method = IntegralCriterionMethods.MultiplicativeCriterion; } else { // Критерии имеют разный тип. Скажем пользователю, // что нельзя ПОКА ЧТО использовать этот метод для // поиска окончательного решения MessageBoxHelper.ShowStop("Критерии в модели имеют разный тип: некоторые максимизируются, а некоторые минимизируются\nК сожалению, выбранный метод поиска окончательного решения работает только для моделей,\nв которых все критерии имеют одинаковый тип"); return; } } } if (this.rbnMiniMax.Checked) { method = IntegralCriterionMethods.MinimaxMethod; } if (this.rbnGeneticAlgorithm.Checked) { this._nextForm = new AdditiveGaParamsForm(this, this._model); } else { if (this.chbUtilityFunction.Checked) { this._nextForm = new UtilityFunctionForm(this, this._model, method); } else if (!this.chbUtilityFunction.Checked) { this._nextForm = new IntegralResultsForm(this, this._model, null, method); } } this._nextForm.Show(); this.Hide(); }