ТПР лаба. Антонов А.С. ИВТ-321 ЛР1 ТПР. Модели принятия решений в условиях риска
Скачать 308.86 Kb.
|
ФГБОУ ВО Уфимский государственный авиационный технический университет Кафедра ТК ОТЧЕТ по лабораторной работе №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 Вывод: В ходе выполнения данной лабораторной работы была смоделирована система выбора оптимального решения в соответствии с заданной целевой функцией. Сравнив результаты выборов по каждому из критериев, можно сделать вывод, о неоправданно большом риске при использовании критерия Гермейера, а критерий Сэвиджа используется при выборе рисковых решений в условиях неопределенности, как правило, субъектами, не склонными к риску. |