Сужение множества Парето на основе информации об относительной важности критериев

Реализация алгоритма сужения множества Парето на основе информации об относительной важности критериев на языке высокого уровня. Теорема о сужении множества Парето. Оценка выгодности инвестирования с ее помощью. Текст программы и результат ее выполнения.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 31.03.2023
Размер файла 525,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство науки и высшего образования Российской Федерации Рязанский государственный радиотехнический университет им. В.Ф. Уткина

Кафедра Автоматизированных Систем Управления

Лабораторная работа

Сужение множества Парето на основе информации об относительной важности критериев

Выполнил: ст. гр. 235М Гульняшкин Г.В.

Рязань 2023

Сужение множества Парето на основе информации об относительной важности критериев

Цель работы: реализовать алгоритм сужения множества Парето на основе информации об относительной важности критериев на языке высокого уровня.

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

Сужение множества Парето на основе информации об относительной важности критериев

Теорема о сужении множества Парето

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

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

Теорема 1. Предположим, что выполняются аксиомы 1 - 4 и i-й критерий важнее j-го с положительными параметрами , . Тогда для любого непустого множества выбираемых решений и выбираемых векторов имеют место включения

, (1)

, (2)

где - множество парето-оптимальных решений в многокритериальной задаче с множеством возможных решений и «новым» векторным критерием , компоненты которого вычисляются по формулам

,

, , , (3)

а .

Замечание 2. Множество Парето инвариантно относительно строго возрастающего преобразования критериев. В частности, множество Парето не изменится, если произвольный критерий умножить (или разделить) на какое угодно положительное число. В соответствии с этим разделим критерий на положительное число и оставим для него прежнее обозначение. Тогда первое из равенств (3) примет вид

, (4)

где - коэффициент относительной важности, определяемой равенством.

Замечание 3. Следует обратить внимание на универсальность теоремы 1, проявляющуюся в том, что в ней отсутствуют какие бы то ни было требования к множеству возможных решений X и векторному критерию f. Это говорит о том, что она применима к любой задаче многокритериального выбора, в которой выполнены аксиомы 1 - 4. При этом множество возможных решений (и векторов) может состоять как из конечного, так и бесконечного числа элементов, а функции могут быть какими угодно - нелинейными, невыпуклыми, невогнутыми, а также не обладать свойством дифференцируемости или непрерывности. Ограничения в условиях теоремы 1 накладываются лишь на поведение ЛПР - оно должно вести себя «разумно» в процессе выбора, т.е. удовлетворять аксиомам 1 - 4.

Формула (3) (и (4)) для вычисления «нового» критерия на основе «старого» f проста. В соответствии с ней «новый» векторный критерий получается из «старого» заменой менее важного критерия на линейную комбинацию критериев и с положительными коэффициентами , . Все остальные «старые» критерии сохраняются. При подобном «пересчете» j_го критерия многие полезные с точки зрения теории экстремальных задач свойства критериев и сохраняются. Например, если указанные критерии являются непрерывными, дифференцируемыми, вогнутыми или линейными, то новый критерий так же будет обладать соответствующими свойствами.

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

Рисунок 1 иллюстрирует включения (1).

Пример (задача выбора объекта для инвестирования). Применим теорему 1 для решения следующей задачи. Пусть имеется три объекта для инвестирования средств. Для оценки выгодности инвестирования используются два критерия: величина прироста прибыли от вложения, измеряемая в процентах по отношению к исходной сумме инвестирования, и надежность вложенных средств, измеряемая в пятибалльной шкале от 1 до 5.

Рисунок 1 - Геометрическая иллюстрация включений (1)

сужение множество парето информация

Будем считать, что прирост надежности при переходе от отметки в 1 балл к отметке в 2 балла точно такой, как и при переходе от отметки () к отметке . Это предположение дает возможность принять, что величина надежности измеряется в количественной шкале (шкале разностей).

Пусть множество возможных векторов состоит из трех векторов

, , .

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

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

Положим . Тогда пересчитанные согласно формуле (5.5) векторы будут иметь вид:

, , .

Система неравенств:

,

имеет решение . Следовательно, если ЛПР за прирост прибыли в размере 10 % готово пожертвовать уменьшением величины надежности на одну единицу, то этому ЛПР следует выбирать первый вектор , так как в данном случае и . Иными словами, если коэффициент относительной важности больше либо равен

,

то выбранным должен быть единственный первый вектор.

Если , то выполняется неравенство . При этом векторы , оказываются несравнимыми по отношению ? . Значит, в этом случае следует исключить из числа выбираемых векторов.

При выбранным может оказаться любой из трех имеющихся векторов, так как в этом случае и три вектора , , составляют множество Парето . Это означает, что информация о том, что ЛПР за потерю в одну единицу надежности соглашается на прирост прибыли лишь на величину, большую 20 %, является в данном случае несущественной. Она не позволяет произвести сужение исходного множества Парето, совпадающего с . Иначе говоря, коэффициент относительной важности первого критерия по сравнению со вторым, равный или меньший

,

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

Задание. Реализовать сужение множества Парето из 1-й задачи на основе теоремы о сужении множества Парето (формулы 5.5 и 5.6) на ЯВУ (язык выбрать самим).

Листинг 1 - Текст программы, реализующей сужение множества Парето (количество элементов = 7, количество критериев из 1 практической работы = 9)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Runtime.Remoting.Contexts;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace WidowsFormsApp1

{

public partial class Form1 :Form

{

Random rand = new Random();

int[,] myArr = new int[7, 9];

int[] w_arr = new int[9];

double[] val_err = new double[7];

double value = 0.0;

int max_krit = 0;

int count_krit = 0;

int count_prog = 0;

public Form1()

{

InitializeComponent();

GenArray();

dataGridViewPareto.RowCount = 7;

dataGridViewPareto1.RowCount = 7;

for (int i = 0; i < 7; i++)

{

dataGridViewPareto.Rows[i].Cells[0].Value = "Вариант №" + Convert.ToString(i + 1);

dataGridViewPareto1.Rows[i].Cells[0].Value = "Вариант №" + Convert.ToString(i + 1);

}

ShowArray();

ShowArray1();

}

public void ShowArray()

{

for (int i = 0; i < 7;i++)

{

for (int j = 0; j < 9; j++)

{

dataGridViewPareto.Rows[i].Cells[j + 1].Value = myArr[i, j];

}

}

}

public void ShowArray1() // Отображение массива в таблице

{

for (int i = 0; i < 7; i++)

{

for (int j = 0; j < 9; j++)

{

dataGridViewPareto1.Rows[i].Cells[j + 1].Value = myArr[i, j];

}

}

}

public void GenArray() // Генерация массива случайных значений

{

for (int i = 0; i < 7; i++)

{

for (int j = 0; j < 9; j++)

{

myArr[i, j] = rand.Next(1, 6);

}

}

}

public void ReadArray() // Чтение массива с таблицы при изменении значений массива

{

for (int i = 0; i < 7; i++)

{

for (int j = 0; j < 9; j++)

{

myArr[i, j] = Convert.ToInt32(dataGridViewPareto.Rows[i].Cells[j + 1].Value);

}

}

}

public void ReadArray1() // Чтение массива с таблицы при изменении значений массива

{

for (int i = 0; i < 7; i++)

{

for (int j = 0; j < 9; j++)

{

myArr[i, j] = Convert.ToInt32(dataGridViewPareto.Rows[i].Cells[j + 1].Value);

}

}

}

public bool CompareArray(int[] arr1, int[] arr2) // Сравнение одномерных массивов

{

int count = 0;

for (int n = 0; n < arr1.Length; n++)

{

if (arr1[n] >= arr2[n])

count += 1;

}

if (count == arr1.Length)

return true;

else return false;

}

public void FillArray(int[] arr3, int size, int arr_row) // Заполнение одномерного массива для сравнения

{

for (int i = 0; i < size; i++)

{

arr3[i] = myArr[arr_row, i];

}

}

public void ZeroArray(int size_row, int arr_row) // Заполнение одномерного массива 0 (удаление массива)

{

for (int i = 0; i < size_row; i++)

{

myArr[arr_row, i] = 0;

}

}

public void BestResult() // Вывод лучших результатов

{

label_Result.Text = "";

for (int i = 0; i < 7; i++)

{

for (int j = 0; j < 9; j++)

{

if (myArr[i, j] != 0)

{

if (i == 7)

label_Result.Text += "Вариант №" + Convert.ToString(i + 1);

else label_Result.Text += "Вариант №" + Convert.ToString(i + 1) + " , ";

j = 10;

}

}

}

}

private void dataGridViewPareto_CellContentClick(object sender, DataGridViewCellEventArgs e)

{

}

private void Form1_Load(object sender, EventArgs e)

{

}

private void buttonArray_Click(object sender, EventArgs e)

{

GenArray();

ShowArray();

ShowArray1();

}

private void Button1_Click_1(object sender, EventArgs e)

{

ShowArray1();

}

private void Button_Pareto_Click(object sender, EventArgs e)

{

// Шаг 1

int i = 0;

int j = 1;

int N = 6;

Boolean flag = true;

ReadArray1();

do

{

int[] a = new int[9];

int[] b = new int[9];

FillArray(a, 9, i);

FillArray(b, 9, j);

if (CompareArray(a, b)) //Шаг 2

{

ZeroArray(9, j); //Шаг 3

if (j < N) // Шаг 4

{

j = j + 1;

}

else

{

if (i < (N - 1)) // Шаг 7

{

i = i + 1;

j = i + 1;

}

else flag = false; // Конец вычислений

}

}

else

{

int[] c = new int[9];

int[] d = new int[9];

FillArray(c, 9, j);

FillArray(d, 9, i);

if (CompareArray(c, d)) // Шаг 5

{

ZeroArray(9, i); // Шаг 6

if (i < (N - 1)) // Шаг 7

{

i = i + 1;

j = i + 1;

}

else flag = false; // Конец вычислений

}

else

{

if (j < N) // Шаг 4

{

j = j + 1;

}

else

{

if (i < (N - 1)) // Шаг 7

{

i = i + 1;

j = i + 1;

}

else flag = false; // Конец вычислений

}

}

}

}

while (flag);

ShowArray();

BestResult();

}

private void Button_Suzhenie_Click(object sender, EventArgs e)

{

ReadArray();

int wk = Convert.ToInt32(textBox_krit.Text);

wk--;

double w_j = 1;

double w_i;

double q = Convert.ToDouble(textBox_otv.Text);

w_i = Math.Round((w_j - (q * w_j)) / (q), 4);

if (textBox_krit.Text == "1")

{

max_krit = 1;

}

else if (textBox_krit.Text == "2")

{

max_krit = 2;

}

else if (textBox_krit.Text == "3")

{

max_krit = 3;

}

else if (textBox_krit.Text == "4")

{

max_krit = 4;

}

else if (textBox_krit.Text == "5")

{

max_krit = 5;

}

else if (textBox_krit.Text == "6")

{

max_krit = 6;

}

else if (textBox_krit.Text == "7")

{

max_krit = 7;

}

else if (textBox_krit.Text == "8")

{

max_krit = 8;

}

else if (textBox_krit.Text == "9")

{

max_krit = 9;

}

for (int i = 0; i < 7; i++)

{

for (int j = 0; j < 9; j++)

{

if (myArr[i, j] == 0)

{

count_krit += 1;

}

}

if (count_krit != 9)

{

if (max_krit == 1)

for (int j = 1; j < 9; j++)

{

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * w_j + w_i * myArr[i, j]);

}

else if (max_krit == 2)

for (int j = 0; j < 9; j++)

{

if (j == 1)

continue;

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * w_j + w_i * myArr[i, j]);

}

else if (max_krit == 3)

for (int j = 0; j < 9; j++)

{

if (j == 2)

continue;

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * w_j + w_i * myArr[i, j]);

}

else if (max_krit == 4)

for (int j = 0; j < 9; j++)

{

if (j == 3)

continue;

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * w_j + w_i * myArr[i, j]);

}

else if (max_krit == 5)

for (int j = 0; j < 9; j++)

{

if (j == 4)

continue;

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * w_j + w_i * myArr[i, j]);

}

else if (max_krit == 6)

for (int j = 0; j < 9; j++)

{

if (j == 5)

continue;

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * w_j + w_i * myArr[i, j]);

}

else if (max_krit == 7)

for (int j = 0; j < 9; j++)

{

if (j == 6)

continue;

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * w_j + w_i * myArr[i, j]);

}

else if (max_krit == 8)

for (int j = 0; j < 9; j++)

{

if (j == 7)

continue;

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * w_j + w_i * myArr[i, j]);

}

else if (max_krit == 9)

for (int j = 0; j < 9; j++)

{

if (j == 8)

continue;

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * w_j + w_i * myArr[i, j]);

}

}

count_krit = 0;

}

label_wi.Text = Convert.ToString(w_i);

label_wj.Text = Convert.ToString(w_j);

label_Result.Text = "Нажмите ввод.";

ShowArray1();

}

private void Button_Prog_Click(object sender, EventArgs e)

{

ReadArray();

int wk = Convert.ToInt32(textBox_krit.Text);

wk--;

double q = Convert.ToDouble(textBox_otv.Text);

if (textBox_krit.Text == "1")

{

max_krit = 1;

}

else if (textBox_krit.Text == "2")

{

max_krit = 2;

}

else if (textBox_krit.Text == "3")

{

max_krit = 3;

}

else if (textBox_krit.Text == "4")

{

max_krit = 4;

}

else if (textBox_krit.Text == "5")

{

max_krit = 5;

}

else if (textBox_krit.Text == "6")

{

max_krit = 6;

}

else if (textBox_krit.Text == "7")

{

max_krit = 7;

}

else if (textBox_krit.Text == "8")

{

max_krit = 8;

}

else if (textBox_krit.Text == "9")

{

max_krit = 9;

}

for (int i = 0; i < 7; i++)

{

for (int j = 0; j < 9; j++)

{

if (myArr[i, j] == 0)

{

count_krit += 1;

}

}

if (count_krit != 9)

{

if (max_krit == 1)

for (int j = 1; j < 9; j++)

{

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * q + (1 - q) * myArr[i, j]);

}

else if (max_krit == 2)

for (int j = 0; j < 9; j++)

{

if (j == 1)

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * q + (1 - q) * myArr[i, j]);

}

else if (max_krit == 3)

for (int j = 0; j < 9; j++)

{

if (j == 2)

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * q + (1 - q) * myArr[i, j]);

}

else if (max_krit == 4)

for (int j = 0; j < 9; j++)

{

if (j == 3)

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * q + (1 - q) * myArr[i, j]);

}

else if (max_krit == 5)

for (int j = 0; j < 9; j++)

{

if (j == 4)

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * q + (1 - q) * myArr[i, j]);

}

else if (max_krit == 6)

for (int j = 0; j < 9; j++)

{

if (j == 5)

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * q + (1 - q) * myArr[i, j]);

}

else if (max_krit == 7)

for (int j = 0; j < 9; j++)

{

if (j == 6)

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * q + (1 - q) * myArr[i, j]);

}

else if (max_krit == 8)

for (int j = 0; j < 9; j++)

{

if (j == 7)

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * q + (1 - q) * myArr[i, j]);

}

else if (max_krit == 9)

for (int j = 0; j < 9; j++)

{

if (j == 8)

myArr[i, j] = Convert.ToInt32(myArr[i, wk] * q + (1 - q) * myArr[i, j]);

}

}

}

label_wi.Text = "wi";

label_wj.Text = "wj";

label_Result.Text = "Нажмите ввод.";

ShowArray1();

}

}

}

Рис. 2 Результат выполнения программы

Размещено на Allbest.ru

...

Подобные документы

  • Теория множества, основные операции над множествами, мощность множества. Теорема о сравнении множеств. Размер множества в Turbo Pascal, предельно допустимое количество элементов и их порядок. Выполнение действий объединения, исключения и пересечения.

    курсовая работа [376,6 K], добавлен 31.01.2016

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

    курсовая работа [414,4 K], добавлен 24.05.2015

  • Оптимизационная задача линейного программирования. Виды задач линейного программирования. Принятие решений на основе количественной информации об относительной важности критериев. Выбор средств разработки. Программный комплекс векторной оптимизации.

    дипломная работа [1,3 M], добавлен 27.03.2013

  • Понятие нечеткого множества и функции принадлежности. Методы дефаззификации (преобразования нечеткого множества в четкое число) для многоэкстремальных функций принадлежности. Нечеткий логический вывод. Примеры выпуклого и невыпуклого нечеткого множества.

    презентация [111,7 K], добавлен 16.10.2013

  • Основные этапы определения радиуса и центра окружности, проходящей через три различные точки заданного множества точек. Особенности построения алгоритма на языке программирования. Составление тестовых примеров для демонстрации возможностей программы.

    контрольная работа [103,9 K], добавлен 21.08.2013

  • Общая методика решения задачи определения связанного множества пикселей с помощью функции bwlabel, в языке моделирования Matlab. Возможности оптимизации программы по временным характеристикам для возможности использования функции в анализе видеопотока.

    статья [894,5 K], добавлен 11.03.2009

  • Методы поиска подмножеств множества вершин V графа G, удовлетворяющих определенным условиям и свойствам. Понятие независимых множеств и порядок их генерации. Определение доминирующего множества. Основные этапы решения задачи о наименьшем разбиении.

    контрольная работа [32,1 K], добавлен 11.03.2010

  • График функции плотности распределения Парето. Алгоритм обработки выборки. Построение гистограммы относительных частот. Программа для автоматизации обработки, в которую заложены алгоритмы обработки выборки и возможность быстрого получения результата.

    курсовая работа [1,3 M], добавлен 19.03.2012

  • Постановка задачи. Математическое обоснование. Последовательность разбиений множества. Язык программирования. Реализация алгоритмов. Генерирование разбиений множества. Генерирование всех понятий.

    курсовая работа [29,9 K], добавлен 20.06.2003

  • Принципы решения задач линейного программирования в среде электронных таблиц Excel, в среде пакета Mathcad. Порядок решения задачи о назначении в среде электронных таблиц Excel. Анализ экономических данных с помощью диаграмм Парето, оценка результатов.

    лабораторная работа [2,0 M], добавлен 26.10.2013

  • Программный комплекс по обработке заданного множества данных в динамической памяти компьютера. Запросы к массиву записей множества данных – групп в детском саду. Функция сортировки массива по числовому полю. Использование главной программы MAINPRO.

    курсовая работа [419,3 K], добавлен 23.07.2014

  • Получение изображения объекта с помощью оптико-электронных систем, построенных на основе ПЗС-приемника. Методы обработки первичной измерительной информации. Реализация алгоритма обработки графической информации с помощью языка программирования Python.

    лабораторная работа [1,1 M], добавлен 30.05.2023

  • Символьное и образное представление информации. Единицы ее измерения. Язык как способ символьного представления информации. Знак как элемент конечного множества. Алфавитный подход к измерению информации. Решение задач на определение ее количества.

    презентация [178,2 K], добавлен 12.12.2012

  • Решение задач по информатике, перебор различных комбинаторных конфигураций объектов и выбор наилучшего, с точки зрения условия задачи. Генерация k-элементных подмножеств, всех подмножеств данного множества, всех перестановок n-элементного множества.

    реферат [44,0 K], добавлен 03.01.2010

  • Особенности вывода на экран содержимого файла BAZA.txt. Анализ функций вывода информации о количестве каждой марки машин. Рассмотрение способов проектирования тестов программы методами черного ящика. Проблемы программирования на языке высокого уровня.

    контрольная работа [1,6 M], добавлен 04.01.2015

  • Разработка программы для отбора образцов меха в коллекцию – элитную группу из исходного множества согласно заданному эталону и определенным критериям (вид меха, высота мехового покрытия, блеск) и для прогнозирования дальнейшего развития этой группы.

    курсовая работа [1,8 M], добавлен 13.11.2012

  • Выбор алгоритма решения задачи. Разработка программы, обеспечивающую эффективную обработку и хранение информации с использованием линейных списков. Написание программы на псевдокоде и на языке программирования высокого уровня. Результаты работы программы.

    курсовая работа [2,1 M], добавлен 21.04.2012

  • Разработка программы, создающей и управляющей базой данных, ее реализация на языке Turbo Pascal. Организация алгоритма программы. Вывод информации и возможность добавления информации в базу данных. Поиск информации в базе данных по заданному значению.

    курсовая работа [26,7 K], добавлен 19.06.2010

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

    курсовая работа [509,6 K], добавлен 03.12.2009

  • Описание алгоритма решения задачи графическим способом. Вывод элементов массива. Описание блоков укрупненной схемы алгоритма на языке Pascal. Листинг программы, а также ее тестирование. Результат выполнения c помощью ввода различных входных данных.

    контрольная работа [150,4 K], добавлен 03.05.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.