/// <summary> /// Метод для получения результатов работы генетического алгоритма /// </summary> /// <param name="population">Популяция, на основе которой строится результат</param> /// <returns>Результат работы генетического алгоритма</returns> private static NsgaMethodResult PrepareResult(Population <NsgaIndividual> population) { var result = new NsgaMethodResult("Генетический алгоритм многокритериальной оптимизации NSGA-II"); foreach (NsgaIndividual individual in population) { result.SortedPoints.Add(individual.Number); } return(result); }
/// <summary> /// Метод для заполнения таблицы результатами поиска решения с /// помощью генетического алгоритма /// </summary> /// <param name="model">Оптимизациионная модель</param> /// <param name="result">Результаты поиска решения</param> /// <param name="table">Таблица для вывода результатов</param> public static void FillDataGrid( Model model, NsgaMethodResult result, DataGridView table) { table.SuspendLayout(); table.Rows.Clear(); table.Columns.Clear(); // Колонки для параметров foreach (KeyValuePair <TId, Parameter> kvp in model.Parameters) { DataGridViewColumn paramCol = new DataGridViewColumn(); paramCol.CellTemplate = new DataGridViewTextBoxCell(); paramCol.SortMode = DataGridViewColumnSortMode.NotSortable; paramCol.HeaderText = kvp.Value.Name; paramCol.Name = "param_" + kvp.Key.ToString(); paramCol.HeaderCell.ToolTipText = kvp.Value.GetDescription(); table.Columns.Add(paramCol); } // Колонки для критериев foreach (KeyValuePair <TId, Criterion> kvp in model.Criteria) { DataGridViewColumn critCol = new DataGridViewColumn(); critCol.CellTemplate = new DataGridViewTextBoxCell(); critCol.SortMode = DataGridViewColumnSortMode.NotSortable; critCol.HeaderText = kvp.Value.Name; critCol.Name = "crit_" + kvp.Key.ToString(); critCol.HeaderCell.ToolTipText = kvp.Value.GetDescription(); table.Columns.Add(critCol); } // Колонки для функциональных ограничения foreach (KeyValuePair <TId, Constraint> kvp in model.FunctionalConstraints) { DataGridViewColumn constrCol = new DataGridViewColumn(); constrCol.CellTemplate = new DataGridViewTextBoxCell(); constrCol.SortMode = DataGridViewColumnSortMode.NotSortable; constrCol.HeaderText = kvp.Value.Name; constrCol.Name = "constr_" + kvp.Key.ToString(); constrCol.HeaderCell.ToolTipText = kvp.Value.GetDescription(); table.Columns.Add(constrCol); } foreach (TId expId in result.SortedPoints) { // Добавим рядок int rowInd = table.Rows.Add(); // Запишем в хедер номер эксперимента table.Rows[rowInd].HeaderCell.Value = model.Experiments[expId].Number.ToString(); // Запишем в ячейки значения оптимизируемых параметров foreach (KeyValuePair <TId, double> pvs in model.Experiments[expId].ParameterValues) { int colInd = 0; try { colInd = table.Columns["param_" + pvs.Key.ToString()].Index; } catch (Exception ex) { MessageBoxHelper.ShowError(ex.Message); return; } table[colInd, rowInd].Value = pvs.Value.ToString(SettingsManager.Instance.DoubleStringFormat); } // Запишем в ячейки значения критериев оптимальности foreach (KeyValuePair <TId, double> pvs in model.Experiments[expId].CriterionValues) { int colInd = 0; try { colInd = table.Columns["crit_" + pvs.Key.ToString()].Index; } catch (Exception ex) { MessageBoxHelper.ShowError(ex.Message); return; } table[colInd, rowInd].Value = pvs.Value.ToString(SettingsManager.Instance.DoubleStringFormat); } // Запишем в ячейки значения ФО foreach (KeyValuePair <TId, double> pvs in model.Experiments[expId].ConstraintValues) { int colInd = 0; if (table.Columns["constr_" + pvs.Key.ToString()] != null) { colInd = table.Columns["constr_" + pvs.Key.ToString()].Index; table[colInd, rowInd].Value = pvs.Value.ToString(SettingsManager.Instance.DoubleStringFormat); } } } table.ResumeLayout(); }