Многокритериальные задачи. Метод альтернативных решений

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    211,24 kb
  • Опубликовано:
    2011-06-11
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Многокритериальные задачи. Метод альтернативных решений

1. Постановка задачи


Необходимо разработать программное средство для поиска альтернативных решений для следующей задачи:

·        многокритериальная задача

входные данные: количество критериев и решений; весовые значения, заданные напрямую, степень важности критериев, интервалы превосходства, цена перехода значения в соседний класс.

выходные данные: матрица согласия; матрица несогласия; ядро бинарного отношения.

программный альтернативный решение многокритериальный

2. Краткие теоретические сведения


Пусть задан набор числовых функций , определенных на множестве возможных решений X. В зависимости от содержания задачи выбора эти функции именуют критериями оптимальности, критериями эффективности или целевыми функциями.

Указанные выше числовые функции образуют векторный критерий , который принимает значения в пространстве m-мерных векторов . Это пространство называют критериальным пространством или пространством оценок, а всякое значение  именуют векторной оценкой возможного решения x. Все возможные векторные оценки образуют множество возможных оценок (возможных или допустимых векторов)


Как правило, между множествами возможных решений X и соответствующим множеством векторов Y можно установить взаимно однозначное соответствие, т.е. каждому возможному решению поставить в соответствие определенный возможный вектор, и обратно - каждому возможному вектору сопоставить определенное возможное решение. В таких случаях выбор во множестве решений с математической точки зрения равносилен выбору во множестве векторов и все определения и результаты можно формулировать как в терминах решений, так и в терминах векторов, причем при желании всегда можно без труда осуществить переход от одной формы изложения к другой.

Задачу выбора, которая включает множество допустимых решений X и векторный критерий f, обычно называют многокритериальной задачей или задачей многокритериальной оптимизации.

Необходимо отметить, что формирование математической модели принятия решений (т.е. построение множества X и векторного критерия f ) нередко представляет собой сложный процесс, в котором тесно взаимодействуют специалисты двух сторон. А именно, представители конкретной области знаний, к которой относится исследуемая проблема, и специалисты по принятию решений (математики). С одной стороны, следует учесть все важнейшие черты и детали реальной задачи, а с другой, - построенная модель не должна оказаться чрезмерно сложной с тем, чтобы для ее исследования и решения можно было успешно применить разработанный к настоящему времени соответствующий математический аппарат. Именно поэтому этап построения математической модели в значительной степени зависит от опыта, интуиции и искусства исследователей обеих сторон. Его невозможно отождествить с простым формальным применением уже известных, хорошо описанных алгоритмов.

Здесь следует еще добавить, что любая задача выбора (в том числе и многокритериальная) тесно связана с конкретным ЛПР(лицо, принимающее решение). Уже на стадии формирования математической модели при построении множества возможных решений и векторного критерия дело не обходится без советов, рекомендаций и указаний ЛПР, тем более что векторный критерий как раз и служит. Принятие решения при многих критериях для выражения целей ЛПР. При этом ясно, что построить модель в точности соответствующую всем реальным обстоятельствам невозможно. Модель всегда является упрощением действительности. Важно добиться, чтобы она содержала те черты и детали, которые в наибольшей степени влияют на окончательный выбор наилучшего решения.

Рассмотрим два произвольных возможных решения  и . Для них имеет место один и только один из следующих трех случаев:

) справедливо соотношение  (ЛПР первое решение предпочитает второму),

) справедливо соотношение  (ЛПР второе решение предпочитает первому),

) не выполняется ни соотношение , ни соотношение  (ЛПР не может отдать предпочтение ни одному из указанных двух решений).

Заметим, что четвертый случай, когда оба участвующих здесь соотношения и  выполняются, невозможен благодаря асимметричности отношения предпочтения

В первом из указанных выше случаев, т.е. при выполнении соотношения , говорят, что решение  доминирует решение .

Если же реализуется третий случай, то говорят, что решения  и не сравнимы по отношению предпочтения.


3. Реализация программного средства


Среда разработки: Visual Studio 2008 Язык программирования: C#

 

3.1 Проектирование


При проектировании программного средства будем использовать объектно-ориентированный подход. Список классов с кратким описанием:

1)      Program.cs - это главное окно, служит для ввода данных, запуска работы алгоритма поиска парето-оптимальных решений, содержит методы для решения поставленной задачи.

2)      Reader.cs - методы для загрузки данных из файла

3)      Writer.cs - методы для сохранения данных в файл

 

.2 Алгоритм поиска альтернативных решений

 

Шаг 1. Назначение весов. Назначаются положительные веса каждого из критериев  Шаг 2. Построение индекса согласия. Для каждой пары альтернатив j и k множество критериев  разбивается на три группы:

,,

Множество  включает те категории, по которым j-я альтернатива лучше k-й, множество , состоит из критериев, которым j-я альтернатива хуже k-й, а множество , состоит из тех критериев, по которым j-я и k-я альтернативы эквивалентны. Индекс согласия с тем , что альтернатива j лучше альтернативы k определяется следующим образом:

,

Где α - параметр, α

Шаг 3. Построение списка несогласия. Для каждой пары j и k индекс несогласия с тем, что альтернатива j лучше альтернативы k определяется по формуле:


Где интервал превосходства k-й альтернативы над j-й по i-му критерию определяет число последовательных переходов из класса в класс, которое необходимо осуществить для того, чтобы j-й вариант стал эквивалентен k-му по i-му критерию, умноженное на цену одного деления такого перехода. При этом требуется, чтобы величины  не превышали единицу

Шаг 4. Построение решающего правила. На основе чисел  и  , определяемы ЛПР, на множестве альтернатив строится следующее бинарное отношение: j-я альтернтива признается лучше альтернативы k, при условии того, что . Сразу можно заметить, что при  указанное бинарное отношение становится аналогом бинарного отношения Слейтера, поскольку в этом случае j-я альтернатива доминирует k-ю лишь тогда, когда , т.е.  для всех . При  могут возникнуть другие пары альтернатив, связанные введенным бинарным отношением.

После того как бинарное отношение построено, представляется множество взаимнонедоминирующих альтернатив, на котором построенное бинарное отношение обладает НМ-свойством. Далее ЛПР выбирает окончательное решение из этого множества. Таким образом данный метод позволяет сократить число анализируемых вариантов, облегчая тем самым выбор ЛПР.

3.3 Листинг программного кода

 

public partial class Form1 : Form

{int countOfVariant;int countOfCriterion;double p;double q;double alfa;int max = 0;double Interval = 0;int count1 = 0;int count2 = 0;int row1;int col1;static int rows;static int cols;Double[,] tablesWeight;Double[,] tablesCriterionImportance;Double[,] tablesIntervalSuperiority;Double[,] TableOfAgreementIndex;Double[,] TableOfDisagreementIndex;String[,] TableofDecisiveRule;

// private Double[,] tablesCriterionImportance;double CriterionSumm = 0;Form1()

{();

}

// получение числа вариантов, числа критериев и параметра альфаvoid GetDate()

{= (int)numericUpDown1.Value;= (int)numericUpDown2.Value;= Convert.ToDouble(comboBox1.Text);

}

// создание и заполнение таблицы весов из формыvoid createTableOfWeightFromForm()

{= new double[rows, cols];(int i = 0; i < rows; i++)

{(int j = 0; j < cols; j++)

{[i, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value);

}

}

}

// создание и заполнение таблицы важности критериев, числа интервалов превосходства

//и стоимость перехода с уровня на уровень из формыvoid createTableOfCriterionImportanceFromForm()

{= new double[cols, 3];(int i = 0; i < cols; i++)

{[i, 0] = Convert.ToDouble(dataGridView5.Rows[i].Cells[0].Value);+= tablesCriterionImportance[i, 0];

//textBox1.AppendText(CriterionSumm.ToString());

}

}

//создание таблицы интервалов превосходства из формыvoid createTableOfIntervalSuperiorityFromForm()

{= new double[cols, (max + 1)];(int i = 0; i < cols; i++)

{(int j = 0; j < (max + 1); j++)[i, j] = Convert.ToDouble(dataGridView6.Rows[i].Cells[j].Value);

}

}

//создание таблицы весов на формеvoid CreateTableOfWeightOnForm(int row, int col)

{_row = row;_col = col;.ColumnCount = _col;.RowHeadersVisible = false;.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;.RowCount = _row;

}

// создание таблицы важности критериев на формеvoid CreateTableOfCriterionImportanceOnForm(int row)

{_row = row;_col = 3;.ColumnCount = _col;.RowHeadersVisible = false;.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;.RowCount = _row;

}

// создание таблицы ядра из формыvoid CreateTableofDecisiveRuleFromForm()

{= new string[rows, 1];(int i = 0; i < rows; i++)

}

}void button1_Click(object sender, EventArgs e)

{();= (int)countOfVariant;= (int)countOfCriterion;(rows, cols);(cols);

}

//добавление интервала превосходстваvoid IntervalSuperiority(int row)

{(int i = 0; i < cols; i++)

{(max < Convert.ToDouble(dataGridView5.Rows[i].Cells[1].Value))

{= Convert.ToInt16(dataGridView5.Rows[i].Cells[1].Value);

}

}_row = row;_col = (max + 1);.ColumnCount = _col;.RowHeadersVisible = false;.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;.RowCount = _row;

}

// получение матрицы индексов согласияvoid GetTableOfAgreementIndex(int row, int col)

{IPlus = 0;IMinus = 0;IZero = 0;_row = row;_col = col;.ColumnCount = _col;.RowHeadersVisible = false;.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;.RowCount = _row;= new double[rows, rows];(int i = 0; i < rows; i++)

{(int j = 0; j < rows; j++)

{(i == j)

{[i, j] = 0;

}

{= 0;= 0;= 0;(int k = 0; k < cols; k++)

{(Convert.ToDouble(dataGridView1.Rows[i].Cells[k].Value) > Convert.ToDouble(dataGridView1.Rows[j].Cells[k].Value))

{+= Convert.ToDouble(dataGridView5.Rows[k].Cells[0].Value);

}if (Convert.ToDouble(dataGridView1.Rows[i].Cells[k].Value) == Convert.ToDouble(dataGridView1.Rows[j].Cells[k].Value))

{+= Convert.ToDouble(dataGridView5.Rows[k].Cells[0].Value);

}

{+= Convert.ToDouble(dataGridView5.Rows[k].Cells[0].Value);

}

}[i, j] = (IPlus + alfa * IZero) / (CriterionSumm);

}.Rows[i].Cells[j].Value = TableOfAgreementIndex[i, j];

}

}

}

получение матрицы индексов несогласияvoid GetTableOfDisagreementIndex(int row, int col)

{[,] count;_row = row;_col = col;.ColumnCount = _col;.RowHeadersVisible = false;.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;.RowCount = _row;= new double[cols, 2];= new double[rows, rows];(int i = 0; i < rows; i++)

{(int j = 0; j < rows; j++)

{(i == j)

{[i, j] = 0;

}

{= 0;(int k = 0; k < cols; k++)

{[k, 0] = 0;[k, 1] = 0;= 0;= 0;(int m = 0; m < (Convert.ToInt32(dataGridView5.Rows[k].Cells[1].Value) + 1); m++)

{(Convert.ToDouble(dataGridView1.Rows[i].Cells[k].Value) > Convert.ToDouble(dataGridView6.Rows[k].Cells[m].Value))

{+= 1;

}

{= count1;

}(Convert.ToDouble(dataGridView1.Rows[j].Cells[k].Value) > Convert.ToDouble(dataGridView6.Rows[k].Cells[m].Value))

{+= 1;

}

{= count2;

}

/* textBox1.AppendText(" ");.AppendText(count1.ToString());.AppendText(" ");.AppendText(count2.ToString());

//textBox1.AppendText(" ");

//textBox1.AppendText(dataGridView1.Rows[i].Cells[k].Value.ToString());*/

}[k, 0] = count1;[k, 1] = count2;(count[k, 0] < count[k, 1])

{+= (count[k, 1] - count[k, 0]) * (Convert.ToDouble(dataGridView5.Rows[k].Cells[2].Value));

}

{= Interval;

}[i, j] = Interval/100;.AppendText(" ");.AppendText(Interval.ToString());

}

}.Rows[i].Cells[j].Value = TableOfDisagreementIndex[i, j];

}

}

}

получение параметров p и qvoid GetParametrsForDecisiveRule()

{= Convert.ToDouble(numericUpDown3.Value);= Convert.ToDouble(numericUpDown4.Value);

}

//построение решающего правилаvoid GetDecisiveRule(int row,int col)

{flag = false;count = 0;countOfq = 0;countOfp = 0;_row = row;_col = col;.ColumnCount = _col;.RowHeadersVisible = false;.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;.RowCount = _row;(int i = 0; i < rows; i++)

{= 0;= 0;= 0;(int j = 0; j < cols; j++)

{+= 1;(i != j)

{(Convert.ToInt32(dataGridView3.Rows[i].Cells[j].Value) < q)

{+= 1;(Convert.ToInt32(dataGridView2.Rows[i].Cells[j].Value) < p)

{+= 1;

{((count == cols) & (countOfp == 0))

{= true;

}

}

}

{((count == cols) & (countOfq == 0))

{= true;

}

}

}

}.Rows[i].Cells[0].Value = flag;

}

}void button2_Click(object sender, EventArgs e)

{();();(rows, rows);

}

void button3_Click(object sender, EventArgs e)

{(rows, rows);

}void закрытьToolStripMenuItem_Click(object sender, EventArgs e)

{();

}void button6_Click(object sender, EventArgs e)

{(cols);

}void button5_Click(object sender, EventArgs e)

{(rows, 1);();

}void button4_Click(object sender, EventArgs e)

{();

}

//загрузка таблицы весовvoid button8_Click(object sender, EventArgs e)

{FN;(openFileDialog1.ShowDialog() == DialogResult.OK)

{.InitialDirectory = "G:\temp";.Filter = "diag files(*.diag)|*.abs|All files|*.*";= openFileDialog1.FileName;My = new Reader(FN);.ReadTable(out tablesWeight, out rows, out cols);= Convert.ToDouble(comboBox1.Text);(rows, cols);(int i = 0; i < rows; i++)

{(int j = 0; j < cols; j++)

{.Rows[i].Cells[j].Value = tablesWeight[i, j];

}

}

}

}

// сохранение таблицы весовvoid button7_Click(object sender, EventArgs e)

{FN;.InitialDirectory = "G:\temp";.Filter = "diag files(*.diag)|*.abs|All files|*.*";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= saveFileDialog1.FileName;.WriteTable(FN, tablesWeight);

}

}

// загрузка таблицы критериев важностиvoid button9_Click(object sender, EventArgs e)

{FN;(openFileDialog1.ShowDialog() == DialogResult.OK)

{.InitialDirectory = "G:\temp";.Filter = "diag files(*.diag)|*.abs|All files|*.*";= openFileDialog1.FileName;My = new Reader(FN);.ReadTable(out tablesCriterionImportance, out row1, out col1);= Convert.ToDouble(comboBox1.Text);(row1);(int i = 0; i < row1; i++)

{(int j = 0; j < col1; j++)

{.Rows[i].Cells[j].Value = tablesCriterionImportance[i, j];

}

}

}

}

// загрузка таблицы интервалов превосходстваvoid button11_Click(object sender, EventArgs e)

{FN;(openFileDialog1.ShowDialog() == DialogResult.OK)

{.InitialDirectory = "G:\temp";.Filter = "diag files(*.diag)|*.abs|All files|*.*";= openFileDialog1.FileName;My = new Reader(FN);.ReadTable(out tablesIntervalSuperiority, out row1, out col1);= Convert.ToDouble(comboBox1.Text);(row1);(int i = 0; i < row1; i++)

{(int j = 0; j < col1; j++)

{.Rows[i].Cells[j].Value = tablesIntervalSuperiority[i, j];

}

}

}

}

//сохранение таблицы критериев важностиvoid button10_Click(object sender, EventArgs e)

{FN;.InitialDirectory = "G:\temp";.Filter = "diag files(*.diag)|*.abs|All files|*.*";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= saveFileDialog1.FileName;.WriteTable(FN, tablesCriterionImportance);

}

}

// сохранение таблицы интервалов превосходстваvoid button12_Click(object sender, EventArgs e)

{FN;.InitialDirectory = "G:\temp";.Filter = "diag files(*.diag)|*.abs|All files|*.*";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= saveFileDialog1.FileName;.WriteTable(FN, tablesIntervalSuperiority);

}

}

// сохранение матрицы индексов согласияvoid button13_Click(object sender, EventArgs e)

{FN;.InitialDirectory = "G:\temp";.Filter = "diag files(*.diag)|*.abs|All files|*.*";(saveFileDialog1.ShowDialog() == DialogResult.OK)

}

}

//сохранение матрицы индексов несогласияvoid button14_Click(object sender, EventArgs e)

{FN;.InitialDirectory = "G:\temp";.Filter = "diag files(*.diag)|*.abs|All files|*.*";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= saveFileDialog1.FileName;.WriteTable(FN, TableOfDisagreementIndex);

}

}

//сохранение ядраvoid button15_Click(object sender, EventArgs e)

{FN;.InitialDirectory = "G:\temp";.Filter = "diag files(*.diag)|*.abs|All files|*.*";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= saveFileDialog1.FileName;.WriteTableOfRule(FN, TableofDecisiveRule);

}

}

}Reader

{string fileName;string[] inputTxt;double[,] matrix;int row;int col;System.Globalization.NumberFormatInfo numberFormat;Reader(string Name)

{= Name;

}void ReadTable(out double[,] table, out int rows, out int cols)

{= new System.Globalization.NumberFormatInfo();.CurrencyDecimalSeparator = ".";[] output = File.ReadAllLines(fileName);[] aloneString = output[0].Split(new char[] { ' ' });

//double[,] temp = new double[output.Length, aloneString.Length];= new double[output.Length, aloneString.Length];= output.Length;= aloneString.Length;(int i = 0; i < aloneString.Length; i++)

{[0, i] = double.Parse(aloneString[i], numberFormat);

}(int i = 1; i < output.Length; i++)

{= output[i].Split(new char[] { ' ' });(int j = 0; j < aloneString.Length; j++)

{[i, j] = double.Parse(aloneString[j], numberFormat);

}

}

}

}Writer

{static string fileName;static string[] outputTxt;static double[,] matrix;static string[,] matrix1;static int row;static int col;static System.Globalization.NumberFormatInfo numberFormat;static void WriteTable(string nameFile, double[,] table)

{.fileName = nameFile;.matrix = table;(Writer.matrix != null)

{= matrix.GetLength(0);= matrix.GetLength(1);= new string[row];(int i = 0; i < row; i++)

{(int j = 0; j < col; j++)

{[i] += matrix[i, j].ToString();(j != (col - 1))[i] += " ";

}

}.WriteAllLines(nameFile, outputTxt);

}

}static void WriteTableOfRule(string nameFile, string[,] table)

{.fileName = nameFile;.matrix1 = table;(Writer.matrix1 != null)

{= matrix1.GetLength(0);= matrix1.GetLength(1);= new string[row];(int i = 0; i < row; i++)

{(int j = 0; j < col; j++)

{[i] += matrix1[i, j];(j != (col - 1))[i] += " ";

}

}.WriteAllLines(nameFile, outputTxt);

}

}

}

4. Пример работы программы


4.1 Многокритериальная задача


1)      Реализуем пример. Для этого воспользуемся уже заготовленными файлами с входными данными:

Рис

Найдем матрицу согласия:

Рис

Найдем матрицу индексов несогласия:

Рис

Найдем ядро бинарного отношения:

Рис



Выводы


В результате проделанной работы было разработано программное средство для поиска альтернативных вариантов решений для многокритериальных задач.

Данное приложение может использоваться лишь как демонстрационно-обучающее по теме «Многокритериальные задачи. Метод альтернативных решений» дисциплины «Теория принятия решений».


Используемая литература


1. А.В Лотов, И.И. Поспелова Многокритериальные задачи принятия решения Учебное пособие.- М. : МАКС Пресс, 2008. - 197 с.

Используемые программные средства

Microsoft Visual Studio 2008

Похожие работы на - Многокритериальные задачи. Метод альтернативных решений

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!