Контрольная работа: Многокритериальные задачи. Метод альтернативных решений
}
}
}
}
dataGridView4.Rows[i].Cells[0].Value = flag;
}
}
private void button2_Click(object sender, EventArgs e)
{
createTableOfCriterionImportanceFromForm();
createTableOfWeightFromForm();
GetTableOfAgreementIndex(rows, rows);
}
private void button3_Click(object sender, EventArgs e)
{
GetTableOfDisagreementIndex(rows, rows);
}
private void закрытьToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void button6_Click(object sender, EventArgs e)
{
IntervalSuperiority(cols);
}
private void button5_Click(object sender, EventArgs e)
{
GetDecisiveRule(rows, 1);
CreateTableofDecisiveRuleFromForm();
}
private void button4_Click(object sender, EventArgs e)
{
GetParametrsForDecisiveRule();
}
//загрузка таблицы весов
private void button8_Click(object sender, EventArgs e)
{
string FN;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
openFileDialog1.InitialDirectory = "G:\temp";
openFileDialog1.Filter = "diag files(*.diag)|*.abs|All files|*.*";
FN = openFileDialog1.FileName;
Reader My = new Reader(FN);
My.ReadTable(out tablesWeight, out rows, out cols);
alfa = Convert.ToDouble(comboBox1.Text);
CreateTableOfWeightOnForm(rows, cols);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
dataGridView1.Rows[i].Cells[j].Value = tablesWeight[i, j];
}
}
}
}
// сохранение таблицы весов
private void button7_Click(object sender, EventArgs e)
{
string FN;
saveFileDialog1.InitialDirectory = "G:\temp";
saveFileDialog1.Filter = "diag files(*.diag)|*.abs|All files|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FN = saveFileDialog1.FileName;
Writer.WriteTable(FN, tablesWeight);
}
}
// загрузка таблицы критериев важности
private void button9_Click(object sender, EventArgs e)
{
string FN;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
openFileDialog1.InitialDirectory = "G:\temp";
openFileDialog1.Filter = "diag files(*.diag)|*.abs|All files|*.*";
FN = openFileDialog1.FileName;
Reader My = new Reader(FN);
My.ReadTable(out tablesCriterionImportance, out row1, out col1);
alfa = Convert.ToDouble(comboBox1.Text);
CreateTableOfCriterionImportanceOnForm(row1);
for (int i = 0; i < row1; i++)
{
for (int j = 0; j < col1; j++)
{
dataGridView5.Rows[i].Cells[j].Value = tablesCriterionImportance[i, j];
}
}
}
}
// загрузка таблицы интервалов превосходства
private void button11_Click(object sender, EventArgs e)
{
string FN;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
openFileDialog1.InitialDirectory = "G:\temp";
openFileDialog1.Filter = "diag files(*.diag)|*.abs|All files|*.*";
FN = openFileDialog1.FileName;
Reader My = new Reader(FN);
My.ReadTable(out tablesIntervalSuperiority, out row1, out col1);
alfa = Convert.ToDouble(comboBox1.Text);
IntervalSuperiority(row1);
for (int i = 0; i < row1; i++)
{
for (int j = 0; j < col1; j++)
{
dataGridView6.Rows[i].Cells[j].Value = tablesIntervalSuperiority[i, j];
}
}
}
}
//сохранение таблицы критериев важности
private void button10_Click(object sender, EventArgs e)
{
string FN;
saveFileDialog1.InitialDirectory = "G:\temp";
saveFileDialog1.Filter = "diag files(*.diag)|*.abs|All files|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FN = saveFileDialog1.FileName;
Writer.WriteTable(FN, tablesCriterionImportance);
}
}
// сохранение таблицы интервалов превосходства
private void button12_Click(object sender, EventArgs e)
{
string FN;
saveFileDialog1.InitialDirectory = "G:\temp";
saveFileDialog1.Filter = "diag files(*.diag)|*.abs|All files|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FN = saveFileDialog1.FileName;
Writer.WriteTable(FN, tablesIntervalSuperiority);
}
}
// сохранение матрицы индексов согласия
private void button13_Click(object sender, EventArgs e)
{
string FN;
saveFileDialog1.InitialDirectory = "G:\temp";
saveFileDialog1.Filter = "diag files(*.diag)|*.abs|All files|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FN = saveFileDialog1.FileName;
Writer.WriteTable(FN, TableOfAgreementIndex);
}
}
//сохранение матрицы индексов несогласия
private void button14_Click(object sender, EventArgs e)
{
string FN;
saveFileDialog1.InitialDirectory = "G:\temp";
saveFileDialog1.Filter = "diag files(*.diag)|*.abs|All files|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FN = saveFileDialog1.FileName;
Writer.WriteTable(FN, TableOfDisagreementIndex);
}
}
//сохранение ядра
private void button15_Click(object sender, EventArgs e)
{
string FN;
saveFileDialog1.InitialDirectory = "G:\temp";
saveFileDialog1.Filter = "diag files(*.diag)|*.abs|All files|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FN = saveFileDialog1.FileName;
Writer.WriteTableOfRule(FN, TableofDecisiveRule);
}
}
}
class Reader
{
private string fileName;
private string[] inputTxt;
private double[,] matrix;
private int row;
private int col;
private System.Globalization.NumberFormatInfo numberFormat;
public Reader(string Name)
{
fileName = Name;
}
public void ReadTable(out double[,] table, out int rows, out int cols)
{
numberFormat = new System.Globalization.NumberFormatInfo();
numberFormat.CurrencyDecimalSeparator = ".";
string[] output = File.ReadAllLines(fileName);
string[] aloneString = output[0].Split(new char[] { ' ' });
//double[,] temp = new double[output.Length, aloneString.Length];
table = new double[output.Length, aloneString.Length];
rows = output.Length;
cols = aloneString.Length;
for (int i = 0; i < aloneString.Length; i++)
{
table[0, i] = double.Parse(aloneString[i], numberFormat);
}
for (int i = 1; i < output.Length; i++)
{
aloneString = output[i].Split(new char[] { ' ' });
for (int j = 0; j < aloneString.Length; j++)
{
table[i, j] = double.Parse(aloneString[j], numberFormat);
}
}
}
}
class Writer
{
private static string fileName;
private static string[] outputTxt;
private static double[,] matrix;
private static string[,] matrix1;
private static int row;
private static int col;
private static System.Globalization.NumberFormatInfo numberFormat;
public static void WriteTable(string nameFile, double[,] table)
{
Writer.fileName = nameFile;
Writer.matrix = table;
if (Writer.matrix != null)
{
row = matrix.GetLength(0);
col = matrix.GetLength(1);
outputTxt = new string[row];
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
outputTxt[i] += matrix[i, j].ToString();
if(j != (col - 1))
outputTxt[i] += " ";
}
}
File.WriteAllLines(nameFile, outputTxt);
}
}
public static void WriteTableOfRule(string nameFile, string[,] table)
{
Writer.fileName = nameFile;
Writer.matrix1 = table;
if (Writer.matrix1 != null)
{
row = matrix1.GetLength(0);
col = matrix1.GetLength(1);
outputTxt = new string[row];
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
outputTxt[i] += matrix1[i, j];
if (j != (col - 1))
outputTxt[i] += " ";
}
}
File.WriteAllLines(nameFile, outputTxt);
}
}
}
4. Пример работы программы
4.1 Многокритериальная задача
1) Реализуем пример. Для этого воспользуемся уже заготовленными файлами с входными данными:
Рис
Найдем матрицу согласия:
Рис
Найдем матрицу индексов несогласия:
Рис
Найдем ядро бинарного отношения:
Рис
Выводы
В результате проделанной работы было разработано программное средство для поиска альтернативных вариантов решений для многокритериальных задач.
Данное приложение может использоваться лишь как демонстрационно-обучающее по теме «Многокритериальные задачи. Метод альтернативных решений» дисциплины «Теория принятия решений».
Используемая литература
1. А.В Лотов, И.И. Поспелова Многокритериальные задачи принятия решения Учебное пособие.– М. : МАКС Пресс, 2008. – 197 с.
Используемые программные средстваMicrosoft Visual Studio 2008