Главная страница

ТПР лаба. Антонов А.С. ИВТ-321 ЛР1 ТПР. Модели принятия решений в условиях риска


Скачать 308.86 Kb.
НазваниеМодели принятия решений в условиях риска
АнкорТПР лаба
Дата16.03.2022
Размер308.86 Kb.
Формат файлаdocx
Имя файлаАнтонов А.С. ИВТ-321 ЛР1 ТПР.docx
ТипОтчет
#399802

ФГБОУ ВО

Уфимский государственный авиационный технический университет

Кафедра ТК

ОТЧЕТ

по лабораторной работе №1

по дисциплине «Теория принятия решений»

Тема: «Модели принятия решений в условиях риска»

Вариант № 1

Выполнил: студент гр. ИВТ-321

Антонов А.С.

Проверил: доцент каф. ТК

Насыров Р.В.

Уфа 2021

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

Задание:

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

Вариант 1

Критерий Сэвиджа и критерий Гермейера; Кол-во вариантов решения – 10; Кол-во возможных состояний – 20.

Код программы:

using System;

using System.Linq;
namespace ТПР_ЛАБ_1

{

class Program

{

static void Main(string[] args)

{

#region Создание исходной матрицы

Console.WriteLine("Исходная матрица");

double[,] array = new double[10, 20];
Random rnd = new Random();
for (int i = 0; i < 10; i++)

{

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

{

array[i, j] = rnd.Next(0, 100);

}

}

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

{

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

{
Console.Write("{0,3}", array[i, j]);

}

Console.WriteLine();

}

#endregion
// буферный массив

double[,] array2 = new double[10, 20];

Array.Copy(array, array2, 10 * 20);
#region Критерий Сэвиджа

Console.WriteLine("---------------Сэвидж-------------------");

double[] max = new double[20];

Console.WriteLine("Максимальные элементы в каждом столбце");
// находим максимальные элементы в столбцах

for (int i = 0; i < array2.GetLength(1); ++i)

{

double tempmax = int.MinValue;

for (int j = 0; j < array2.GetLength(0); ++j)

{

if (array2[j, i] > tempmax)

{

tempmax = array2[j, i];

max[i] = tempmax;
}

}

Console.WriteLine("В столбце номер {0} -> {1}", i, max[i]);

}
// получаем новую матрицу

for (int i = 0; i < array2.GetLength(1); ++i)

{

for (int j = 0; j < array2.GetLength(0); ++j)

{

array2[j, i] = max[i] - array[j, i];
}
}

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

{

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

{
Console.Write("{0,3}", array2[i, j]);

}

Console.WriteLine();

}

// находим максиумы к строках

double[] min = new double[10];

for (int i = 0; i < array2.GetLength(0); ++i)

{

double tempmax = int.MinValue;

for (int j = 0; j < array2.GetLength(1); ++j)

{

if (array2[i, j] > tempmax)

{

tempmax = array2[i, j];

min[i] = tempmax;
}

}

Console.WriteLine("В в строке номер {0} -> {1}", i, tempmax);
}

// найти минимальные элементы в получившемся столбце

double minValue = min.Min();

Console.Write("Решением игры является " + minValue);

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

{

if (min[i] == minValue)

Console.Write(" в строках " + i);

}

Console.WriteLine();

#endregion
#region критерий Гермейера

Console.WriteLine("---------------Гермейер-------------------");
double q = 0.05; double maxi = 0.0;

Array.Copy(array, array2, 10 * 20);

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

{

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

{

if (maxi <= array2[i, j])

maxi = array2[i, j];

}

}
Console.WriteLine();

maxi += 1.0;

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

{

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

{

array2[i, j] -= maxi;

array2[i, j] *= q;
Console.Write("{0,3}", array2[i, j]);

}

Console.WriteLine();

}
double[] Maxarray = new double[10];

double min1 = -100.0;

// находим минимальные элементы в столбцах

for (int i = 0; i < array2.GetLength(0); ++i)

{

double tempmax = 0.0;

for (int j = 0; j < array2.GetLength(1); ++j)

{

if (array2[i, j] < tempmax)

{

tempmax = array2[i, j];

max[i] = tempmax;

}

}

Console.WriteLine("В столбце номер {0} -> {1}", i, tempmax);

Maxarray[i] = tempmax;
}

for (int i = 0; i < Maxarray.GetLength(0); i++)

{

if (min1 < Maxarray[i])

min1 = Maxarray[i];

}

// найти максимальный элемент в получившемся столбце

Console.Write("Решением игры является " + min1);

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

{

if (max[i] == min1)

Console.Write(" в строках " + i);

}

Console.WriteLine();

#endregion

//#endregion

Console.ReadKey();

}

}

}

Реализация программы:



Рисунок 1,2 – Реализация программы №1



Рисунок 3,4 – Реализация программы №2





Рисунок 5,6 – Реализация программы №3

Вывод:

В ходе выполнения данной лабораторной работы была смоделирована система выбора оптимального решения в соответствии с заданной целевой функцией. Сравнив результаты выборов по каждому из критериев, можно сделать вывод, о неоправданно большом риске при использовании критерия Гермейера, а критерий Сэвиджа используется при выборе рисковых решений в условиях неопределенности, как правило, субъектами, не склонными к риску.


написать администратору сайта