Курсовая Принятие решений в условиях риска 3
Работа добавлена на сайт bukvasha.net: 2015-10-25Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Федеральное агентство по образованию
Новокузнецкий филиал – институт
государственного образовательного учреждения
высшего профессионального образования
“Кемеровский государственный университет”
Кафедра информационных систем и управления имени В.К. Буторина
КУРСОВАЯ РАБОТА
по дисциплине "Исследование операций в экономике"
Тема:"Принятие решений в условиях риска"
Выполнила: студентка
группы ПИЭ-061
Никуленко С.Е.
Проверил: доц. Шипилов С.А.
Новокузнецк 2010
Содержание
Содержание. 2
ВВЕДЕНИЕ. 3
1 Математическое обеспечение. 4
1.1 Постановка задачи. 4
1.2 Упрощение матрицы игры.. 8
1.3 Критерий Байеса относительно выигрышей. 9
1.4 Критерий Байеса относительно рисков. 11
1.5 Критерий Лапласа относительно выигрышей. 13
1.6 Критерий Лапласа относительно рисков. 15
1.7 Критерий относительных значений вероятностей состояний природы с учетом выигрышей (рисков) 15
2 Алгоритмическое обеспечение. 19
3 Программное обеспечение. 24
4 Исследовательская часть. 27
Заключение. 36
Список литературы.. 37
Приложение. 38
ВВЕДЕНИЕ
В системах управления технологическими процессами существуют проблемы, связанные с решением задач оценки эффективности управления такими системами с учетом характеристик надежности, стойкости, работоспособности объектов управления. Решение таких задач относят к задачам принятия решений в условиях риска.
На сегодняшнее время задача управления технологическими процессами является актуальной, так как развитие измерительной, микропроцессорной техники и компьютерных технологий дают возможность увеличить их надежность и экономичность.
Целью работы является исследование вопросов принятия решения в условиях, когда выбор некоторой стратегии гарантирует получение результата с определенной вероятностью, и разработка программного модуля.
Объектом исследования является процесс принятия решения.
Предмет исследования - процесс выбора оптимального решения в условиях риска.
Задачи
1. Подробное математическое описание заданного метода и задачи исследования операций.
2. Выбор и детальное описание алгоритма решения задачи. Иллюстрация работы алгоритма на контрольном примере с использованием стандартных программных средств (Excel) с численным выводом результатов.
3. Выбор среды программирования, интерфейса пользователя. Описание модульной структуры программного комплекса.
4. Исследование работоспособности программы на нескольких тестовых примерах.
1 Математическое обеспечение
1.1 Постановка задачи
В экономической практике во многих задачах принятия решений важным элементом является неопределенность, заключающаяся в недостаточной информированности лица, принимающего решение, об объективных условиях, в которых будет приниматься решение.
Неопределенность такого рода может порождаться различными причинами: нестабильность экономической ситуации, покупательский спрос на товар определенного вида, меняющийся объем перевозок, рыночная конъюнктура, политика правительства, надежность партнера, выход из строя технического оборудования, курс валюты, уровень инфляции, налоговая политика, биржевая ситуация, экологическая обстановка, стихийные бедствия и др.
Риск - это деятельность, связанная с преодолением неопределенности в ситуации неизбежного выбора, в процессе которой имеется возможность количественно и качественно оценить вероятность достижения предполагаемого результата, неудачи и отклонения от цели.
Выбор стратегии зависит от объективной действительности, называемой в математической модели «природой». Сама же математическая модель подобных ситуаций называется «игрой с природой».
Таким образом, в игре с природой осознанно действует только один игрок, а именно, лицо, принимающее решение (статистик), обозначим его через А. Природа, обозначим ее через П, является вторым игроком.
Пусть игрок А имеет т возможных стратегий А1, ..., Ат, а природа П может находиться в одном из п состояний П
1, ..., Пп, которые можно рассматривать как ее «стратегии».
Совокупность { П
1, ..., Пп } формируется либо на основе имеющегося опыта анализа состояний природы, либо в результате предположений и интуиции экспертов.
Предположим, что статистик может оценить последствия применения каждой своей чистой стратегии А
i в зависимости от каждого состояния П
j природы П.
Выигрыш игрока А при выбранной им стратегии Аi, i
= l, ..., m, и при состоянии Пj, j
= l, ..., п, природы П обозначим aij , i
i
= l, ..., m, j
= l, ..., п. Из выигрышей игрока А можно сформировать матрицу выигрышей игрока А (матрицу игры, платежную матрицу):
Таблица 1 – Платежная матрица, матрица выигрышей
A= | П j А i | П 1 | П 2 | … | П n |
А1 | a11 | a12 | … | a1n | |
А2 | a21 | a22 | … | a2n | |
… | … | … | … | … | |
А m | am1 | am2 | … | amn |
Целью является выбор игроком A чистой или смешанной стратегии, более эффективной, чем остальные.
Смешанная стратегия - такая стратегия, в которой ,в отличие от чистой, игроку следует выбирать ту или иную стратегию с некоторой долей вероятности. В чистой стратегии вероятность ее выбора равна 1, а всех других 0.
При решении вопроса о выборе возможной стратегии в игре с природой игрок A должен исходить из матрицы выигрышей. Однако матрица выигрышей не всегда адекватно отражает имеющуюся ситуацию. На выбор стратегии должны влиять не только выигрыши, составляющие матрицу игры, но и показатели «удачности» или «неудачности» выбора данной стратегии при данном состоянии природы и благоприятности этого состояния для увеличения выигрыша.
Показателем благоприятности состояния П
j природы П для увеличения выигрыша называется наибольший выигрыш при этом состоянии, т.е. наибольший элемент в j-ом столбце матрицы игры:
βj = max aij, j=1, …, n. (1)
1≤ i ≤m
Таким образом, благоприятность состояния природы рассматривается как фактор, благоприятствующий увеличению выигрыша игрока А при этом состоянии природы.
Для оценки степени удачности применения игроком А стратегии А
i при состоянии П
j природы П вводят понятие «риска».
Риск упущенной выгоды – это риск наступления косвенного (побочного) финансового ущерба (неполученная прибыль) в результате неосуществления какого-либо мероприятия.
Риском rij игрока А при выборе им стратегии А
i в условиях состояния природы П называется разность между показателем благоприятности βj состояния природы П
j и выигрышем aij, т.е. разность между выигрышем, который игрок А получил бы, если бы знал заранее, что природа примет состояние П
j и выигрышем, который он получит при этом же состоянии П
j, выбрав стратегию А
i:
rij = βj - aij, i=1, …, m; j=1, …, n. (2)
Таким образом, риск rij игрока А при применении стратегии А
i в условиях состояния природы П
j есть упущенная им возможность максимального выигрыша βj при этом состоянии природы. Эта упущенная возможность определяется невыигранной частью величины максимального выигрыша βj.
Величину риска можно интерпретировать как своеобразную плату за отсутствие информации о состоянии природы.
Риск rti для любых i=1, …, m и j=1, …, n неотрицателен:
rij ≥ 0, i=1, …, m; j=1, …, n. (3)
Можно установить и верхнюю границу рисков для каждого состояния природы П
j. Для этого введем в рассмотрение величину ωj:
ωj = min aij, j=1, …, n. (4)
1≤ i ≤m
представляющую собой наименьший выигрыш игрока А при состоянии природы П
j. Тогда имеем:
rij ≤ βj - ωj, i=1, …, m; j=1, …, n. (5)
Разность βj - ωj естественно назвать колебанием выигрышей при состоянии природы П
j, j
= l, ..., п
Если aij = βj, то rij = 0, т.е. стратегия А
i при состоянии природы П
j является безрисковой.
Если aij = ωj, то риск rij, является максимальным. Следовательно, по критерию риска стратегия А
i в этом случае наихудшая.
Если βj = ωj, то все выигрыши j-столбце матрицы игры равны между собой: ωj = a1j = a2j = … = amj = βj и риск rij = 0. Поэтому в этом случае любая стратегия игрока А при состоянии природы П
j безрисковая.
Для матрицы А матрица рисков RA имеет ту же размерность и следующий вид:
Таблица 2 – Матрица рисков
RA = | П j А i | П 1 | П 2 | … | П n |
А1 | r11 | r12 | … | r1n | |
А2 | r21 | r22 | … | r2n | |
… | … | … | … | … | |
А m | rm1 | rm2 | … | rmn |
Отметим, что матрица выигрышей А однозначно порождает матрицу рисков RA, поскольку каждый риск rij однозначно определяется соответствующими показателем благоприятности βj состояния природы П
j, и выигрышем aij. Обратное неверно: одна и та же матрица рисков может соответствовать разным матрицам выигрышей.
В понятии оптимальной стратегии лежат различные соображения, составляющие содержание соответствующих критериев оптимальности стратегий.
Перед тем как переходить к выбору оптимальной стратегии, целесообразно возможности упростить матрицу А, уменьшив число строк на основании принципа доминирования стратегий игрока А.
1.2 Упрощение матрицы игры
Если какая-нибудь из стратегий игрока А окажется доминирующей каждую из остальных его стратегий, то она и должна выбираться игроком А в качестве предпочтительной, поскольку его выигрыш при этой стратегии и при любом состоянии природы П не меньше выигрыша при любой из остальных стратегий.
Если же матрица игры не обладает указанным свойством, т.е. у игрока А нет стратегии, доминирующей каждую из остальных его стратегий, то нужно посмотреть, нет ли у него доминируемых или дублирующих стратегий. При наличии таковых, соответствующие им строки матрицы можно удалить, уменьшив тем самым ее размерность.
Таким образом, в играх с природой можно и полезно пользоваться принципом доминирования стратегий игрока А (строк матрицы игры). Однако принцип доминирования стратегий (состояний) природы (столбцов матрицы игры) недопустим, поскольку природа не выбирает свои состояния с целью по возможности большего уменьшения выигрышей игрока А, для нее нет более или менее эффективных состояний.
1.3 Критерий Байеса относительно выигрышей
Предположим, что статистик из прошлого опыта известны не только состояния П
j, j
= l, ..., п, в которых может находиться природа П, но и соответствующие вероятности q1 , ..., qn с которым природа П реализует эти состояния. Тогда мы находимся в ситуации принятия решения в условиях риска.
Показателем эффективности стратегии Аi по критерию Байеса относительно выигрышей называется среднее значение, или математическое ожидание выигрыша i-й строки с учетом вероятностей всех возможных состояний природы. Обозначая это среднее значение через āi, будем иметь:
āi = q1 ai1 + q2 ai2 + … + qn ain = , i=1, …, m. (6)
Таким образом, at представляет собой взвешенное среднее выигрышей i-й строки, взятых с весами q1 , ..., qn.
Оптимальной среди чистых стратегий по критерию Байеса относительно выигрышей считается стратегия Аi0 с максимальным показателем эффективности, т.е. с максимальным средним выигрышем:
āi0 = max āi. (7)
1≤ i ≤m
Таким образом, выбранное решение по этому критерию является оптимальным не в каждом отдельном случае, а в среднем.
Распространим понятие показателя эффективности по критерию Байеса относительно выигрышей на смешанные стратегии игрока П.
Пусть P = ( p1 , ..., pn ) - некоторая смешанная стратегия игрока А, при которой чистая стратегия Аi используется им с вероятностью pi, i=1, ..., т. Тогда выигрыш игрока А при смешанной стратегии P = ( p1 , ..., pn ) и при состоянии природы П
j будет равен
H (P, Пj) = , j=1, …, n. (8)
Показателем эффективности смешанной стратегии P = ( p1 , ..., pn ) по критерию Байеса относительно выигрышей назовем среднее значение выигрышей, с учетом вероятностей q1 , ..., qn состояний природы. Обозначим этот показатель через .
Получим:
= ===. (9)
Таким образом показатель эффективности смешанной стратегии P = ( p1 , ..., pn ) по критерию Байеса относительно выигрышей представляет собой взвешенное среднее показателей эффективности чистых стратегий А
i, i
= l, ..., m, по тому же критерию с весами pi, i
= l, ..., m.
Если, в частности, стратегия P = ( p1 , ..., pn ) является чистой стратегией А
k, k
= l, ..., m, то pi = 0 i ≠ k, pk = 1, и ее показатель эффективности как смешанной стратегии , превращается в ее показатель эффективности как чистой стратегии āk, вычисляемый по формуле (6).
Пусть SA - множество всех смешанных (в том числе и чистых) стратегий игрока A. Оптимальной среди всех стратегий множества SA по критерию Байеса относительно выигрышей назовем стратегию P0, показатель эффективности (9) которой максимален:
max =. (10)
P ϵ Sa
Стратегия А
i0 оптимальная среди чистых стратегий по критерию Байеса относительно выигрышей, является оптимальной по тому же критерию и среди всех смешанных стратегий множества SA.
При принятии решений в условиях риска по критерию Байеса относительно выигрышей можно обойтись только чистыми стратегиями, не используя смешанные.
1.4 Критерий Байеса относительно рисков
Рассмотрим ту же игру с природой матрицей, в которой известны вероятности состояний природы q1 , ..., qn. При принятии решений в условиях риска можно пользоваться не только средними выигрышами, но и средними рисками. Составим матрицу рисков для матрицы A, используя формулу рисков (3)
Таблица 3 – Матрица рисков
П j А i | П 1 | П 2 | … | П n |
А1 | r11 | r12 | … | r1n |
А2 | r21 | r22 | … | r2n |
… | … | … | … | … |
А m | rm1 | rm2 | … | rmn |
Показателем неэффективности стратегии А
i по критерию Байеса относительно рисков называется среднее значение, или математическое ожидание риска i-й строки матрицы (таблица 3), вероятности которых, очевидно, совпадают с вероятностями состояний природы. Обозначим средний риск при стратегии А
i через ṝi, тогда
ṝi = q1 ri1 + q2 ri2 + … + qn rin = , i=1, …, m. (11)
является взвешенной средней рисков i-й строки матрицы (таблица 3) с весами pi, i=1, ..., т.
Оптимальной среди чистых стратегий по критерию Байеса относительно рисков является стратегия П
j, показатель неэффективности (11) которой минимален, т.е. минимален средний риск
ṝi0 = min ṝi. (12)
1≤ i ≤m
Определим понятие риска при использовании игроком А смешанной стратегии и при состоянии природы П
j, j
= l, ..., п, как разность
r (P, П
j) = [max H (U, Пj)] - H (P, Пj), j=1, …, n. (13)
U ϵ Sa
между максимальным выигрышем max H (U, Пj) при всех смешанных стратегиях U = ( u1 , ..., un ) ϵ SA и при состоянии природы П
j и выигрышем H (P, Пj) при смешанной стратегии P = ( p1 , ..., pn ) и при состоянии природы П
j.
В качестве показателя неэффективности смешанной стратегии P = ( p1 , ..., pn ) по критерию Байеса относительно рисков рассмотрим взвешенную среднюю рисков (13) с весовыми коэффициентами, равными вероятностям q1 , ..., qn состояний природы:
=. (14)
Оптимальной среди всех смешанных (в том числе и чистых) стратегий по критерию Байеса относительно рисков будем считать стратегию P0, показатель неэффективности которой, вычисляемый по формуле (14), минимален:
min =. (15)
P ϵ Sa
Если А
i0 - стратегия, оптимальная среди чистых стратегий по критерию Байеса относительно рисков, то она является оптимальной по тому же критерию и среди всех смешанных стратегий множества SA.
При принятии решения в условиях риска по критерию Байеса относительно рисков так же как и в случае критерия Байеса относительно выигрышей достаточно использовать одни чистые стратегии, не рассматривая смешанные.
Критерии Байеса относительно выигрышей и относительно рисков эквивалентны, т.е. если стратегия А
i0 является оптимальной по критерию Байеса относительно выигрышей, то она является оптимальной и по критерию Байеса относительно рисков, и наоборот, стратегия А
i0, оптимальная по критерию Байеса относительно рисков, оптимальна и по критерию Байеса относительно выигрышей.
1.5 Критерий Лапласа относительно выигрышей
В предыдущих двух критериях Байеса известные вероятности q1 , ..., qn состояний природы могли быть получены из статистических данных, отражающих многократное решение подобных задач, или в результате наблюдений за поведением природы. Однако, довольно часто складывается такая ситуация, когда мы лишены возможности определить вероятности состояний природы указанными способами. Желая все же принять решение в условиях риска, мы вынуждены оценить вероятности состояний природы субъективно. Существуют различные методы численной субъективной оценки степени правдоподобности состояний природы. Один из них состоит в том, что мы не можем отдать предпочтение ни одному из состояний природы, и потому считаем их равновероятными, т.е. q1 = .. .=qn = . Этот принцип называется «принципом недостаточного основания» Лапласа. На нем основан критерий Лапласа относительно выигрышей.
Показателем эффективности стратегии А
i по критерию Лапласа относительно выигрышей называется среднее арифметическое выигрышей i-й строки:
āi = , i=1, …, m. (16)
Оптимальной среди чистых стратегий по критерию Лапласа относительно выигрышей считается стратегия А
i
0 показатель эффективности, кот-
орой, вычисляемый по формуле (16), максимален, т.е. āi0 = max āi.
1≤ i ≤m
Очевидно, что критерий Лапласа относительно выигрышей есть частный случай критерия Байеса относительно выигрышей при q1 = .. .=qn = . Поэтому все утверждения на счет критерия Байеса относительно выигрышей, остаются в силе и для критерия Лапласа относительно выигрышей.
Подставляя (16) в (9), получим показатель эффективности смешанной стратегии P = ( p1 , ..., pn ) по критерию Лапласа относительно выигрышей
= . (17)
Стратегия P = ( p1 , ..., pn ) будет оптимальной среди всех смешанных стратегий множества SA по критерию Лапласа относительно выигрышей, если она максимизирует показатель эффективности (17).
Оптимальная среди чистых стратегия А
i по критерию Лапласа относительно выигрышей является оптимальной по тому же критерию и среди всех смешанных стратегий.
1.6 Критерий Лапласа относительно рисков
Критерий Байеса относительно рисков при равновероятных состояниях природы, q1 = .. .=qn = , превращается в критерий Лапласа относительно рисков. Тогда величина , получающаяся из (11) при qj = , j=1, …, n, или более простая величина представляет собой показатель неэффективности стратегии А
i по критерию Лапласа относительно рисков. Следовательно, оптимальной среди чистых стратегий по критерию Лапласа относительно рисков является стратегия А
i
0, показатель неэффективности которой минимален. Подставляя в (14) значения qj = , j=1, …, n, получим показатель неэффективности смешанной стратегии Р по критерию Лапласа относительно рисков, вместо которого можно рассматривать более простую величину =. Стратегия Р, для которой показатель принимает минимальное значение, является оптимальной среди всех стратегий множества SA. Чистая стратегия, оптимальная среди чистых стратегий по критерию Лапласа относительно рисков, оптимальна по тому же критерию и среди всех смешанных стратегий множества SA.
Критерии Лапласа относительно выигрышей и относительно рисков эквивалентны.
1.7 Критерий относительных значений вероятностей состояний природы с учетом выигрышей (рисков)
В практике принятия решений часто встречается случай, когда нам неизвестны вероятности состояний природы, но мы имеем представление о том, какие состояния природы более правдоподобны, какие менее правдоподобны, а какие равноправдоподобны. Поэтому мы можем расположить (неизвестные) вероятности состояний природы в виде убывающей или возрастающей последовательности. Для простоты предположим, что расположение q1, ..., qn уже и есть монотонная последовательность. Если, например, эта последовательность строго убывает, то правдоподобнее всех состояние П1 затем по степени правдоподобности следует состояние П2, и т. д., наименьшей правдоподобностью обладает состояние Пn. Не зная, на сколько одна вероятность состояния природы отличается от другой, мы можем предположительно придать им относительные значения, пропорциональные членам некоторой (подходящей на наш взгляд) монотонной последовательности положительных чисел τ1, ..., τn, т.е.
q1 : q2 : q3 : ... : qn = τ1 : τ2 : τ3 : ... : τn . (18)
Из (18) следует, что если q1 , ..., qn убывающая, соответственно возрастающая, последовательность, то убывающей, соответственно возрастающей, является и последовательность τ1 , ..., τn.
При этом следует учитывать нормировочное равенство
=1 (19)
Вероятность j-ого столбца определяется по формуле:
qj = , j=1, …, n (20)
Из (20) и (19) получим:
1 = = = . (21)
Из (21) выразим q1 вероятность возникновения состояния природы П1:
q1 = . (21)
Тогда:
qj = . (22)
Мы нашли значения вероятностей qj, j=1, …, n, состояний природы.
Критерий Байеса относительно выигрышей при вероятностях состояний природы назовем критерием относительных значений вероятностей состояний природы с учетом выигрышей. При этом критерии показателем эффективности стратегии А
i является величина āi, получающаяся из равенства (6) подстановкой в него вероятностей (22):
āi =, i=1, …, m. (23)
Так как множитель не зависит от номера i,то в качестве показателя эффективности стратегии А
i вместо величины (23) можно рассматривать величину:
āi =, i=1, …, m. (23)
Оптимальной среди чистых стратегий по рассматриваемому критерию является стратегия с максимальным показателем эффективности (23).
Критерий Байеса относительно рисков при вероятностях состояний природы назовем критерием относительных значений вероятностей состояний природы с учетом рисков. При этом показатель неэффективности стратегии подсчитывается по формуле (6), вероятности q1 , ..., qn в которой представлены формулой (2.20.31):
ṝi =, i=1, …, m. (24)
Оптимальной среди чистых стратегий по обсуждаемому критерию является стратегия с минимальным показателем неэффективности (24).
2 Алгоритмическое обеспечение
Выбор алгоритма решения задачи зависит от поставленных условий. Если вероятность состояний природы не определена и события равновероятны, то следует остановиться на критерии Лапласа. Если вероятность состояний природы не определена, но события имеют различную вероятность, то следует выбрать критерий относительных значений вероятностей состояний природы. В противном случае следует использовать критерий Байеса. Если исходными данными является платежная матрица, то для решения будут использоваться критерии относительно выигрышей, и критерии относительно рисков для матрицы рисков.
Проиллюстрируем алгоритм принятия решения в условиях риска на конкретном примере с использованием Excel. Для демонстрации всех критериев будем использовать платежную матрицу без заданной вероятности. Рассмотрим 2 случая: события имеют одинаковую вероятность и отличную друг от друга. На основе матрицы выигрышей построим матрицу рисков.
Рассмотрим игру с природой где игрок имеет 7 (m=7) чистых стратегий A1 , A2, A3, A4, A5, A6, A7, природа П может находиться в одном из четырех (n=5) состояний П
1, П
2, П
3, П4, П
5. Статистик оценил последствия применения каждой из своих чистых стратегий Ai, в зависимости от состояний П
j природы, результаты представлены в платежной матрице 7×5 (таблица 3).
Таблица 3 – Платежная матрица
A= | П j А i | П 1 | П 2 | П 3 | П 4 | П 5 |
А1 | 5 | 6 | 4 | 3 | 4 | |
А2 | 7 | 4 | 5 | 2 | 3 | |
А3 | 2 | 3 | 6 | 4 | 2 | |
А 4 | 4 | 8 | 3 | 0 | 1 | |
А 5 | 4 | 7 | 4 | 6 | 2 | |
А 6 | 7 | 4 | 5 | 2 | 3 | |
А 7 | 1 | 3 | 1 | 1 | 1 |
Упрощение матрицы. У игрока А нет стратегии, доминирующей каждую из остальных его стратегий, следовательно, нужно посмотреть, нет ли у него доминируемых или дублирующих стратегий. При наличии таковых, соответствующие им строки матрицы можно удалить, уменьшив тем самым ее размерность. Стратегия А2 доминирует стратегию А7 и потому стратегию А7 можно отбросить; стратегии А2 и А6 дублирующие, следовательно, одну из них, например А6, можно удалить. В результате получим матрицу (таблица 3) размерности 5x5:
Таблица 4 – Упрощенная платежная матрица
A= | П j А i | П1 | П2 | П3 | П4 | П5 |
А1 | 5 | 6 | 4 | 3 | 4 | |
А2 | 7 | 4 | 5 | 2 | 3 | |
А3 | 2 | 3 | 6 | 4 | 2 | |
А4 | 4 | 8 | 3 | 0 | 1 | |
А5 | 4 | 7 | 4 | 6 | 2 |
Критерий Лапласа относительно выигрышей. Вероятности q1 , q2, q3, q4, q5 состояний природы равны между собой и имеют значение qj = 0,2.
Показатель эффективности стратегии А
i по критерию Байеса относительно выигрышей рассчитывается для i-й строки по формуле (16):
ā1 = = 0,2*(5+6+4+3+4) = 4,4;
ā2 = 4,2;
ā3 = 3,4;
ā4 = 3,2;
ā5 = 4,6.
Как видно из полученных результатов оптимальной среди чистых стратегий по критерию Лапласа относительно выигрышей является ā50 = 4.6, т.к. значение ее максимально.
Критерий Лапласа относительно рисков. Построим на основе матрица выигрышей матрицу рисков, для этого дополним таблицу 4 строкой значений показателей благоприятности βj (1):
Таблица 5 – Показатели благоприятности
П j А i | П1 | П2 | П3 | П4 | П5 |
А1 | 5 | 6 | 4 | 3 | 4 |
А2 | 7 | 4 | 5 | 2 | 3 |
А3 | 2 | 3 | 6 | 4 | 2 |
А4 | 4 | 8 | 3 | 0 | 1 |
А5 | 4 | 7 | 4 | 6 | 2 |
βj | 7 | 8 | 6 | 6 | 4 |
Риск rij (2) это разность между показателем благоприятности βj состояния природы П
j и выигрышем aij. Для матрицы А матрица рисков RA имеет ту же размерность 5x5:
Таблица 6 – Матрица упущенных возможностей
RA = | П j А i | П1 | П2 | П3 | П4 | П5 |
А1 | 2 | 2 | 2 | 3 | 0 | |
А2 | 0 | 4 | 1 | 4 | 1 | |
А3 | 5 | 5 | 0 | 2 | 2 | |
А4 | 3 | 0 | 3 | 6 | 3 | |
А5 | 3 | 1 | 2 | 0 | 2 |
Показатель неэффективности стратегии А
i по критерию Байеса относительно рисков рассчитывается по формуле (11):
ṝ1 = = 0,2*(2+2+2+3+0) = 1,8;
ṝ2 = 2;
ṝ3 = 2,8;
ṝ4 = 3;
ṝ5 = 1,6.
Оптимальной среди чистых стратегий по критерию Байеса относительно рисков является ṝ50 = 1.6, т.к. значение ее минимально. Как и предполагалось результаты, полученные по матрице выигрышей и по матрице рисков, совпадают. Для следующего критерия расчеты относительно рисков производиться не будут.
Критерий относительных значений вероятностей состояний природы с учетом выигрышей. Как уже известно, этот критерий используется в тех случаях, когда вероятность событий не известна, но статистик имеет представление об отношении вероятности одного состоянии природы к другим. Игрок A решил для себя, что менее правдоподобно возникновение П1, затем по степени правдоподобности следуют состояния П2, П3 и П4, наибольшей правдоподобностью обладает П5, последовательность возрастает. Для определения вероятности q1 , q2, q3, q4, q5 зададим произвольную монотонную возрастающую последовательность положительных чисел τ1, τ2, τ3, τ4, τ5: 9, 16, 18, 22, 23. Вероятность состояния природы П1 определяется по формуле (22):
q1 = ==≈0,1023.
q2 ≈0,1818;
q3 ≈ 0,2046;
q4 = 0,25;
q5 = 0,2614;
Дополним матрицу игры (таблица 4) строкой с найденными вероятностями:
Таблица 5 – Матрица игры с заданными вероятностями
П j А i | П1 | П2 | П3 | П4 | П5 |
А1 | 5 | 6 | 4 | 3 | 4 |
А2 | 7 | 4 | 5 | 2 | 3 |
А3 | 2 | 3 | 6 | 4 | 2 |
А4 | 4 | 8 | 3 | 0 | 1 |
А5 | 4 | 7 | 4 | 6 | 2 |
q1 | 0,102 3 | 0,1818 | 0,204 6 | 0,25 | 0,261 4 |
Показатель эффективности стратегии Аi по критерию Байеса относительно выигрышей рассчитывается по формуле (6):
ā1= = 5*0,1023+6*0,1818+4*0,2046+3*0,25+4*0,2614=4,2159;
ā2= 3,75;
ā3= 3,5;
ā4= 2,7386;
ā5= 4,5227;
Оптимальной среди чистых стратегий по критерию Байеса относительно выигрышей является ā50 = 4,5227, значение максимально.
Таким образом, выбранное решение по этому критерию является оптимальным не в каждом отдельном случае, а в среднем.
Результаты, полученные по трем критерия, совпадают.
3 Программное обеспечение
Для реализации алгоритма принятия решения в условиях риска воспользуемся средой программирования Delphi7.
Программа состоит из двух модулей, которые реализуют ввод исходной информации, считывание ее, преобразование входной информации в выходную и вывод выходной информации на экран.
Программа работает в различных режимах, которые зависят от задаваемых параметров:
1) Тип матрицы:
a) Матрица игры (без матрицы рисков);
b) Матрица игры с расчетом матрицы рисков;
c) Матрица рисков.
2) Вероятность состояний природы:
a) Вероятность определена;
b) Вероятность неопределенна:
i) События равновероятны;
ii) События не равновероятны.
В качестве глобальных параметров выступают количество состояний природы (m) и количество стратегий игрока (n). После каждого изменения их значений форма перерисовывается в соответствии с заданной размерностью.
Входными параметрами являются матрица игры либо матрица рисков и вектор вероятности (q). Вектор вероятности вводятся в последнюю строку (если «Вероятность определена»), либо задается произвольной последовательностью чисел (если «События не равновероятны»), либо отсутствует (если «События равновероятны»).
Выходной информацией является номер оптимальной стратегии, который после обработки исходной информации выводится в матрицу планирования. Оптимальная стратегия находится соответственно для матрицы игры или матрицы рисков, или для обеих сразу. Пользователь имеет возможность упрощение матрицы, очистки полей.
Основной модуль служит для ввода данных и необходимых настроек.
Кнопка «Просчитать риски» работает только для матрицы игры, служит для расчета матрицы рисков.
Кнопка «Задать» задает вероятность возникновения определенного состояния природы на основе произвольной последовательности чисел, работает при «События не равновероятны».
Интерфейс основного модуля:
Дополнительные модуль подключается в случае задания параметра «События не равновероятны», где пользователь рассчитывает вероятность по произвольной последовательности чисел. Количество столбцов в основном модуле и в дополнительном взаимосвязаны.
Интерфейс дополнительного модуля:
В модулях реализована проверка на заполнение полей в таблицах, при возникновении такой ситуации пользователю выдается сообщение:
Проверка на деление на ноль:
При нажатии на кнопку «Упростить», возможны два варианта:
и второй, где А с номером убранной строки:
Если в результате упрощения осталась только 1 строка, где А с номером убранной строки:
4 Исследовательская часть
Проведем исследование работоспособности программы на тестовых примерах. Рассмотрим матрицу игры с заданной вероятностью, матрицу игры и рисков с равной вероятностью и матрицу рисков с относительными значениями вероятностей состояний природы.
Матрица игры с заданной вероятностью. Возможно строительство четырех типов электростанций А1 - тепловые, А2 - приплотинные, А3 - безшлюзовые, А4 - шлюзовые. Эффективность каждого типов электростанций определяется сочетанием различных факторов, в том числе и факторов , зависящих от различных случайных явлений: погодных условий. режима рек, стоимости топлива и его перевозки, сейсмической обстановки района и т.д. Число возможных сочетаний факторов равно десяти, обозначим их как состояния природы (П1, П2, П3, П4, П5, П6, П7, П8, П9, П10). Вероятности возникновения каждой обстановки равны: q1=0,12 , q2=0,04, q3=0,09, q4=0,1, q5=0,06, q6=0,15, q7=0,07, q8=0,12, q9=0,16, q10=0,9. Экономическая эффективность типа электростанций в зависимости состояний природы задается в программном модуле:
Доминирующих либо дублирующих строк нет, упрощение не требуется:
Стратегия А4 является оптимальной:
Матрица игры и построенная на ее основе матрица рисков с равной вероятностью. На промышленном предприятии готовятся к переходу на выпуск новых видов продукции товаров народного потребления. При этом возможны восемь решений А1, А2, А3, А4, А5, А6, А7, А8, каждому из которых соответствует определенный вид продукции или их сочетание. Результаты принятых решений существенно зависит от обстановки (степени обеспеченности производства материальными ресурсами), которая может быть семи видов: П1, П2, П3, П4, П5, П6, П7. Каждому сочетанию Аi, i=1, …, 8 и обстановки Пj, j=1, …, 7, соответствует определенный выигрыш - эффективность выпуска новых видов продукции. Всевозможные выигрыши записываются в программный модуль:
Доминирующих либо дублирующих строк нет, упрощение не требуется:
Рассчитаем матрицу рисков:
Стратегия А3 является оптимальной:
Матрица рисков с относительными значениями вероятностей состояний природы. Крупный инвестор может вложить свою прибыль в семь бизнес проектов A1 , A2, A3, A4, A5, A6, A7, при этом возможны пять состояний рынка П
1, П
2, П
3, П4, П
5. Каждому сочетанию Аi, i=1, …, 7 и обстановки Пj, j=1, …, 5, соответствует определенный риск упустить выгоду.
Всевозможные выигрыши записываются в программный модуль:
Строка А7 больше А2, А6 равна А2:
Вероятность возникновения определенных состояний рынка инвестору не известна, но имеет представление, какие события более, а какие менее вероятны. Он решил, что менее правдоподобно возникновение П1, затем по степени правдоподобности следуют состояния П2, П3 и П4, наибольшей правдоподобностью обладает П5. Не зная, на сколько одна вероятность состояния природы отличается от другой, он придал им относительные значения, 9: 16: 18: 22: 23 для П
1, П
2, П
3, П4, П
5 соответственно. Нажав на кнопку задать вводится последовательность:
Расчет вероятности:
Оптимальное значение А5:
Заключение
В ходе выполнения курсовой работы был исследован процесс принятия решений в условиях риска. Для поиска оптимального значения были рассмотрены критерии Байеса, Лапласа и критерий оптимальных значений вероятностей состояний природы относительно выигрышей и рисков.
Кроме этого был создан программный модуль, реализующий данные алгоритмы.
В данный работе были выполнены следующие задачи:
1. Выполнено подробное математическое описание поиска оптимальной стратегии в условиях риска.
2. Детально описан алгоритм решения задачи. Проиллюстрирована работа алгоритма на контрольном примере с использованием стандартных программных средств (Excel) с численным выводом результатов.
3. Выбрана среда программирования Delphi7. Описана модульная структуры программного комплекса. Представлен интерфейс.
4. Исследована работоспособность программы на трех тестовых примерах.
Список литературы
1. Лабскер Л. Г.Теория критериев оптимальности и экономические решения – М.: Издательство «КноРус», 2005. – 744 с.
2. Хемди А. Таха Введение в исследование операций. – М.: «Вильямс», 2007. – 903 с.
3. Шапкин А.С. Экономитческие и финансовые риски. Оценка, управление, портфель инвестиций[Текст]: Учебное пособие для вузов/ А.С. Шапкин – М.: Издательско – торговая корпорация «Дашков и К°», 2003. - 544 с.
4. Экономико-математическое моделирование: Учебник для студентов вузов/ Под общ. ред. И.Н. Дрогобыцкого.- М.: Издательство “Экзамен”, 2004.- 800 с.
5. http://www.delphisources.ru/
Приложение
Основной модуль:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Grids;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
GroupBox2: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
GroupBox3: TGroupBox;
RadioButton3: TRadioButton;
Button2: TButton;
RadioButton4: TRadioButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
StringGrid1: TStringGrid;
GroupBox4: TGroupBox;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
GroupBox5: TGroupBox;
Button1: TButton;
procedure CheckBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure CheckBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure CheckBox2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure CheckBox2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure RadioButton2Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
procedure RadioButton4Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid2KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid3KeyPress(Sender: TObject; var Key: Char);
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
otvet:integer;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.CheckBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CheckBox2.Checked:=False;
RadioButton1.Enabled:=False;
RadioButton2.Enabled:=False;
Button2.Enabled:=false;
StringGrid2.Enabled:=true;
end;
procedure TForm1.CheckBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 13 then begin
CheckBox1.Checked:=true;
CheckBox2.Checked:=False;
RadioButton1.Enabled:=False;
RadioButton2.Enabled:=False;
Button2.Enabled:=false;
StringGrid2.Enabled:=true;
end;
end;
procedure TForm1.CheckBox2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 13 then begin
CheckBox2.Checked:=true;
CheckBox1.Checked:=False;
RadioButton1.Enabled:=true;
RadioButton2.Enabled:=true;
StringGrid2.Enabled:=false;
if RadioButton2.Checked=True then
Button2.Enabled:=true;
end;
end;
procedure TForm1.CheckBox2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CheckBox1.Checked:=False;
RadioButton1.Enabled:=true;
RadioButton2.Enabled:=true;
StringGrid2.Enabled:=false;
if RadioButton2.Checked=True then
Button2.Enabled:=true;
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
Button2.Enabled:=true;
end;
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
Button2.Enabled:=false;
end;
procedure TForm1.RadioButton3Click(Sender: TObject);
begin
GroupBox4.Caption:='Ìàòðèöà èãðû';
Button3.Enabled:=True;
end;
procedure TForm1.RadioButton4Click(Sender: TObject);
begin
Form1.Height:=480;
GroupBox4.Caption:='Ìàòðèöà ðèñêîâ';
Button3.Enabled:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
Form1.Top:=210;
Form1.Left:=410;
Form1.Height:=480;
StringGrid1.ColCount:=SpinEdit1.Value+1;
StringGrid1.RowCount:=SpinEdit2.Value+1;
StringGrid2.ColCount:=SpinEdit1.Value+1;
StringGrid1.DefaultColWidth:=round((StringGrid1.Width-10)/StringGrid1.ColCount);
StringGrid1.DefaultRowHeight:=round((StringGrid1.Height-10)/StringGrid1.RowCount);
StringGrid2.DefaultColWidth:=round((StringGrid2.Width-10)/StringGrid2.ColCount);
for i:=1 to SpinEdit1.Value do
StringGrid1.Cells[i,0]:='Ï'+inttostr(i);
for i:=1 to SpinEdit2.Value do
StringGrid1.Cells[0,i]:='A'+inttostr(i);
StringGrid2.Cells[0,0]:='q';
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
var i:integer;
begin
StringGrid1.ColCount:=SpinEdit1.Value+1;
StringGrid1.DefaultColWidth:=round((StringGrid1.Width-10)/StringGrid1.ColCount);
StringGrid2.ColCount:=SpinEdit1.Value+1;
StringGrid2.DefaultColWidth:=round((StringGrid2.Width-10)/StringGrid2.ColCount);
for i:=1 to SpinEdit1.Value+1 do
StringGrid1.Cells[i,0]:='Ï'+inttostr(i);
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
var i:integer;
begin
StringGrid1.RowCount:=SpinEdit2.Value+1;
StringGrid1.DefaultRowHeight:=round((StringGrid1.Height-10)/StringGrid1.RowCount);
for i:=1 to SpinEdit2.Value+1 do
StringGrid1.Cells[0,i]:='A'+inttostr(i);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i,j:integer;
f:boolean;
a: array [0..12] of integer;
begin
f:=true;
for i:=0 to SpinEdit2.Value-1 do
a[i]:=0;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
if StringGrid1.Cells[i,j]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
Form1.Height:=757;
StringGrid3.ColCount:=SpinEdit1.Value+1;
StringGrid3.RowCount:=SpinEdit2.Value+1;
StringGrid3.DefaultColWidth:=round((StringGrid3.Width-10)/StringGrid3.ColCount);
StringGrid3.DefaultRowHeight:=round((StringGrid3.Height-10)/StringGrid3.RowCount);
for i:=1 to SpinEdit1.Value do
StringGrid3.Cells[i,0]:='Ï'+inttostr(i);
for i:=1 to SpinEdit2.Value do
StringGrid3.Cells[0,i]:='A'+inttostr(i);
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
if a[i-1]
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
StringGrid3.Cells[i,j]:=inttostr(a[i-1]-strtoint(StringGrid1.Cells[i,j]));
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
var i,j:integer;
begin
Form1.Height:=480;
for i:=1 to SpinEdit1.Value do begin
for j:=1 to SpinEdit2.Value do begin
StringGrid1.Cells[i,j]:='';
StringGrid3.Cells[i,j]:='';
end;
StringGrid2.Cells[i,0]:='';
Form2.StringGrid1.Cells[i,1]:='';
Form2.StringGrid2.Cells[i,1]:='';
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2.Close;
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
begin
if not (key in ['0'..'9',#8]) then key:=#0;
end;
end;
procedure TForm1.StringGrid2KeyPress(Sender: TObject; var Key: Char);
begin
begin
if not (key in ['0'..'9','.',',',#8]) then key:=#0;
end;
end;
procedure TForm1.StringGrid3KeyPress(Sender: TObject; var Key: Char);
begin
begin
if not (key in ['0'..'9',#8]) then key:=#0;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i,j,max,maxr:integer;
f:boolean;
a: array [0..12] of Real;
begin
f:=true;
max:=0;
maxr:=0;
for i:=0 to SpinEdit2.Value-1 do
a[i]:=0;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
if StringGrid1.Cells[i,j]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
f:=true;
// ÊÐÈÒÅÐÈÉ ÁÀÉÅÑÀ
if CheckBox1.Checked=true then begin
for i:=1 to SpinEdit1.Value do
if StringGrid2.Cells[i,0]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
// äëÿ ìàòðèöû èãðû ïîäñò÷åò ìàò îæèäàíèÿ
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
a[j-1]:=a[j-1]+strtoint(StringGrid1.Cells[i,j])*strtofloat(StringGrid2.Cells[i,0]);
// äëÿ ìàòðèöû èãðû îïðåäåëåíèÿ ìàêñèìóìà
if RadioButton3.Checked=true then begin
for i:=1 to SpinEdit2.Value-1 do
if a[max]
if Form1.Height<757 then
ShowMessage('Íàøåë îïòèìàëüíûé ìàêñèìóì: À'+inttostr(max+1)); end;
// äëÿ ìàòðèöû ðèñêîâ îïðåäåëåíèÿ ìèíèìóìà
if RadioButton4.Checked=true then begin
for i:=1 to SpinEdit2.Value-1 do
if a[max]>a[i] then max:=i; ShowMessage('Íàøåë îïòèìàëüíûé ìèíèìóì: À'+inttostr(max+1)); end;
// äëÿ ðàñ÷èòàííîé ìàòðèöû ðèñêîâ
if (Form1.Height=757) and (RadioButton3.Checked=true) then begin
f:=true;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
if StringGrid3.Cells[i,j]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
for i:=0 to SpinEdit2.Value-1 do
a[i]:=0;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
a[j-1]:=a[j-1]+strtoint(StringGrid3.Cells[i,j])*strtofloat(StringGrid2.Cells[i,0]);
for i:=1 to SpinEdit2.Value-1 do
if a[maxr]>a[i] then maxr:=i;
if max=maxr then ShowMessage('Îïòèìàëüíûå çíà÷åíèÿ ñîâïàäàþò: À'+inttostr(max+1))
else ShowMessage('Íàøåë îïòèìàëüíûé ìàêñèìóì: À'+inttostr(max+1)+'; Íàøåë îïòèìàëüíûé ìèíèìóì: À'+inttostr(maxr+1))
end;
end;
end;
end;
// ÊÐÈÒÅÐÈÉ ËÀÏËÀÑÀ
If (CheckBox2.Checked=true) and (RadioButton1.Checked=true) then begin
// äëÿ ìàòðèöû èãðû ïîäñò÷åò ìàò îæèäàíèÿ
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
a[j-1]:=a[j-1]+strtoint(StringGrid1.Cells[i,j]);
// äëÿ ìàòðèöû èãðû îïðåäåëåíèÿ ìàêñèìóìà
if RadioButton3.Checked=true then Begin
for i:=1 to SpinEdit2.Value-1 do
if a[max]
if Form1.Height<757 then
ShowMessage('Íàøåë îïòèìàëüíûé ìàêñèìóì: À'+inttostr(max+1)); end;
// äëÿ ìàòðèöû ðèñêîâ îïðåäåëåíèÿ ìèíèìóìà
if RadioButton4.Checked=true then begin
for i:=1 to SpinEdit2.Value-1 do
if a[max]>a[i] then max:=i; ShowMessage('Íàøåë îïòèìàëüíûé ìèíèìóì: À'+inttostr(max+1)); end;
// äëÿ ðàñ÷èòàííîé ìàòðèöû ðèñêîâ
if (Form1.Height=757) and (RadioButton3.Checked=true) then begin
f:=true;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
if StringGrid3.Cells[i,j]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
for i:=0 to SpinEdit2.Value-1 do
a[i]:=0;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
a[j-1]:=a[j-1]+strtoint(StringGrid3.Cells[i,j]);
for i:=1 to SpinEdit2.Value-1 do
if a[maxr]>a[i] then maxr:=i;
if max=maxr then ShowMessage('Îïòèìàëüíûå çíà÷åíèÿ ñîâïàäàþò: À'+inttostr(max+1))
else ShowMessage('Íàøåë îïòèìàëüíûé ìàêñèìóì: À'+inttostr(max+1)+'; Íàøåë îïòèìàëüíûé ìèíèìóì: À'+inttostr(maxr+1))
end;
end;
end;
f:=true;
// ÒÐÅÒÈÉ ÊÐÈÒÅÐÈÉ
If (CheckBox2.Checked=true) and (RadioButton2.Checked=true) then begin
757>757>
for i:=1 to SpinEdit1.Value do
if StringGrid2.Cells[i,0]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
// äëÿ ìàòðèöû èãðû ïîäñò÷åò ìàò îæèäàíèÿ
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
a[j-1]:=a[j-1]+strtoint(StringGrid1.Cells[i,j])*strtofloat(StringGrid2.Cells[i,0]);
// äëÿ ìàòðèöû èãðû îïðåäåëåíèÿ ìàêñèìóìà
if RadioButton3.Checked=true then begin
for i:=1 to SpinEdit2.Value-1 do
if a[max]
if Form1.Height<757 then
ShowMessage('Íàøåë îïòèìàëüíûé ìàêñèìóì: À'+inttostr(max+1)); end;
// äëÿ ìàòðèöû ðèñêîâ îïðåäåëåíèÿ ìèíèìóìà
if RadioButton4.Checked=true then begin
for i:=1 to SpinEdit2.Value-1 do
if a[max]>a[i] then max:=i; ShowMessage('Íàøåë îïòèìàëüíûé ìèíèìóì: À'+inttostr(max+1)); end;
// äëÿ ðàñ÷èòàííîé ìàòðèöû ðèñêîâ
if (Form1.Height=757) and (RadioButton3.Checked=true) then begin
f:=true;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
if StringGrid3.Cells[i,j]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
for i:=0 to SpinEdit2.Value-1 do
a[i]:=0;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
a[j-1]:=a[j-1]+strtoint(StringGrid3.Cells[i,j])*strtofloat(StringGrid2.Cells[i,0]);
for i:=1 to SpinEdit2.Value-1 do
if a[maxr]>a[i] then maxr:=i;
if max=maxr then ShowMessage('Îïòèìàëüíûå çíà÷åíèÿ ñîâïàäàþò: À'+inttostr(max+1))
else ShowMessage('Íàøåë îïòèìàëüíûé ìàêñèìóì: À'+inttostr(max+1)+'; Íàøåë îïòèìàëüíûé ìèíèìóì: À'+inttostr(maxr+1))
end;
end;
end;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
i,j,l,p,k:integer;
f:boolean;
a: array [0..13] of integer;
begin
f:=true;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
if StringGrid1.Cells[i,j]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
p:=0; k:=0;
for i:=1 to SpinEdit1.Value do
a[i]:=0;
if RadioButton3.Checked=true then
for l:=1 to SpinEdit2.Value-1 do
for j:=l+1 to SpinEdit2.Value do begin
for i:=1 to SpinEdit1.Value do begin
if strtoint(StringGrid1.Cells[i,l])>=strtoint(StringGrid1.Cells[i,j]) then p:=p+1;
if strtoint(StringGrid1.Cells[i,1])
if (p=SpinEdit1.Value) then a[j]:=-1;
if (k=SpinEdit1.Value) then a[l]:=-1;
p:=0;
k:=0;
end;
if RadioButton4.Checked=true then
for l:=1 to SpinEdit2.Value-1 do
for j:=l+1 to SpinEdit2.Value do begin
for i:=1 to SpinEdit1.Value do begin
if strtoint(StringGrid1.Cells[i,l])<=strtoint(StringGrid1.Cells[i,j]) then p:=p+1;
if strtoint(StringGrid1.Cells[i,1])>strtoint(StringGrid1.Cells[i,j]) then k:=k+1; end;
if (p=SpinEdit1.Value) then a[j]:=-1;
if (k=SpinEdit1.Value) then a[l]:=-1;
p:=0;
k:=0;
end;
for j:=1 to SpinEdit2.Value do
if a[j]=-1 then begin
s := s + 'A' + inttostr(j)+' ';
if SpinEdit2.Value>2 then
for i:=1 to SpinEdit1.Value do
StringGrid1.Cells[i,j]:=StringGrid1.Cells[i,j+1];
SpinEdit2.Value:=SpinEdit2.Value-1; end;
if s='' then ShowMessage('Íå òðåáóåòñÿ') else begin
ShowMessage('Óáðàë '+s);
If SpinEdit2.Value<=2 then
for i:=1 to SpinEdit2.Value do
if (a[i]=0) then ShowMessage(' ðåçóëüòàòå óïðîùåíèÿ îñòàëàñü òîëüêî 1 ñòðàòåãèÿ, ñëåäóò ñ÷èòàòü îïòèìàëüíîé À'+inttostr(i))
end;
end;
end;
end.
Дополнительный модуль:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Spin;
type
TForm2 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
SpinEdit1: TSpinEdit;
Button1: TButton;
StringGrid2: TStringGrid;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses unit1;
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
var i:integer;
begin
Form2.Top:=320;
Form2.Left:=520;
SpinEdit1.Value:=Form1.SpinEdit1.Value;
StringGrid1.ColCount:=SpinEdit1.Value;
StringGrid1.DefaultColWidth:=round((StringGrid1.Width-10)/StringGrid1.ColCount);
StringGrid2.ColCount:=SpinEdit1.Value;
StringGrid2.DefaultColWidth:=round((StringGrid2.Width-10)/StringGrid2.ColCount);
for i:=0 to SpinEdit1.Value-1 do
StringGrid1.Cells[i,0]:='k'+inttostr(i+1);
for i:=0 to SpinEdit1.Value-1 do
StringGrid2.Cells[i,0]:='q'+inttostr(i+1);
end;
procedure TForm2.SpinEdit1Change(Sender: TObject);
var i:integer;
begin
StringGrid1.ColCount:=SpinEdit1.Value;
StringGrid1.DefaultColWidth:=round((StringGrid1.Width-10)/StringGrid1.ColCount);
StringGrid2.ColCount:=SpinEdit1.Value;
StringGrid2.DefaultColWidth:=round((StringGrid2.Width-10)/StringGrid2.ColCount);
Form1.SpinEdit1.Value:=SpinEdit1.Value;
for i:=0 to SpinEdit1.Value-1 do
StringGrid1.Cells[i,0]:='k'+inttostr(i+1);
for i:=0 to SpinEdit1.Value-1 do
StringGrid2.Cells[i,0]:='q'+inttostr(i+1);
end;
procedure TForm2.Button1Click(Sender: TObject);
var i,s:integer;
f:boolean;
begin
f:=true;
s:=0;
For i:=0 to SpinEdit1.Value-1 do
if StringGrid1.Cells[i,1]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
For i:=0 to SpinEdit1.Value-1 do
s:=s+strtoint(StringGrid1.Cells[i,1]);
if s>0 then begin
StringGrid2.Cells[0,1]:=floattostr(strtoint(StringGrid1.Cells[0,1])/s);
For i:=0 to SpinEdit1.Value-1 do begin
StringGrid2.Cells[i,1]:=floattostr(strtoint(StringGrid1.Cells[i,1])/s);
Form1.StringGrid2.Cells[i+1,0]:=StringGrid2.Cells[i,1];
Memo1.Text:=Memo1.Text+StringGrid1.Cells[i,1]+'*'+StringGrid2.Cells[0,1]+'/'+
StringGrid1.Cells[0,1]+' ';
end;end
else ShowMessage('Çíà÷åíèÿ ðàâíû 0');
end;
end;
procedure TForm2.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
begin
if not (key in ['0'..'9',#8]) then key:=#0;
end;
end;
end.
757>
if StringGrid2.Cells[i,0]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
// äëÿ ìàòðèöû èãðû ïîäñò÷åò ìàò îæèäàíèÿ
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
a[j-1]:=a[j-1]+strtoint(StringGrid1.Cells[i,j])*strtofloat(StringGrid2.Cells[i,0]);
// äëÿ ìàòðèöû èãðû îïðåäåëåíèÿ ìàêñèìóìà
if RadioButton3.Checked=true then begin
for i:=1 to SpinEdit2.Value-1 do
if a[max]
if Form1.Height<757 then
ShowMessage('Íàøåë îïòèìàëüíûé ìàêñèìóì: À'+inttostr(max+1)); end;
// äëÿ ìàòðèöû ðèñêîâ îïðåäåëåíèÿ ìèíèìóìà
if RadioButton4.Checked=true then begin
for i:=1 to SpinEdit2.Value-1 do
if a[max]>a[i] then max:=i; ShowMessage('Íàøåë îïòèìàëüíûé ìèíèìóì: À'+inttostr(max+1)); end;
// äëÿ ðàñ÷èòàííîé ìàòðèöû ðèñêîâ
if (Form1.Height=757) and (RadioButton3.Checked=true) then begin
f:=true;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
if StringGrid3.Cells[i,j]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
for i:=0 to SpinEdit2.Value-1 do
a[i]:=0;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
a[j-1]:=a[j-1]+strtoint(StringGrid3.Cells[i,j])*strtofloat(StringGrid2.Cells[i,0]);
for i:=1 to SpinEdit2.Value-1 do
if a[maxr]>a[i] then maxr:=i;
if max=maxr then ShowMessage('Îïòèìàëüíûå çíà÷åíèÿ ñîâïàäàþò: À'+inttostr(max+1))
else ShowMessage('Íàøåë îïòèìàëüíûé ìàêñèìóì: À'+inttostr(max+1)+'; Íàøåë îïòèìàëüíûé ìèíèìóì: À'+inttostr(maxr+1))
end;
end;
end;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
i,j,l,p,k:integer;
f:boolean;
a: array [0..13] of integer;
begin
f:=true;
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
if StringGrid1.Cells[i,j]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
p:=0; k:=0;
for i:=1 to SpinEdit1.Value do
a[i]:=0;
if RadioButton3.Checked=true then
for l:=1 to SpinEdit2.Value-1 do
for j:=l+1 to SpinEdit2.Value do begin
for i:=1 to SpinEdit1.Value do begin
if strtoint(StringGrid1.Cells[i,l])>=strtoint(StringGrid1.Cells[i,j]) then p:=p+1;
if strtoint(StringGrid1.Cells[i,1])
if (p=SpinEdit1.Value) then a[j]:=-1;
if (k=SpinEdit1.Value) then a[l]:=-1;
p:=0;
k:=0;
end;
if RadioButton4.Checked=true then
for l:=1 to SpinEdit2.Value-1 do
for j:=l+1 to SpinEdit2.Value do begin
for i:=1 to SpinEdit1.Value do begin
if strtoint(StringGrid1.Cells[i,l])<=strtoint(StringGrid1.Cells[i,j]) then p:=p+1;
if strtoint(StringGrid1.Cells[i,1])>strtoint(StringGrid1.Cells[i,j]) then k:=k+1; end;
if (p=SpinEdit1.Value) then a[j]:=-1;
if (k=SpinEdit1.Value) then a[l]:=-1;
p:=0;
k:=0;
end;
for j:=1 to SpinEdit2.Value do
if a[j]=-1 then begin
s := s + 'A' + inttostr(j)+' ';
if SpinEdit2.Value>2 then
for i:=1 to SpinEdit1.Value do
StringGrid1.Cells[i,j]:=StringGrid1.Cells[i,j+1];
SpinEdit2.Value:=SpinEdit2.Value-1; end;
if s='' then ShowMessage('Íå òðåáóåòñÿ') else begin
ShowMessage('Óáðàë '+s);
If SpinEdit2.Value<=2 then
for i:=1 to SpinEdit2.Value do
if (a[i]=0) then ShowMessage(' ðåçóëüòàòå óïðîùåíèÿ îñòàëàñü òîëüêî 1 ñòðàòåãèÿ, ñëåäóò ñ÷èòàòü îïòèìàëüíîé À'+inttostr(i))
end;
end;
end;
end.
Дополнительный модуль:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Spin;
type
TForm2 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
SpinEdit1: TSpinEdit;
Button1: TButton;
StringGrid2: TStringGrid;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses unit1;
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
var i:integer;
begin
Form2.Top:=320;
Form2.Left:=520;
SpinEdit1.Value:=Form1.SpinEdit1.Value;
StringGrid1.ColCount:=SpinEdit1.Value;
StringGrid1.DefaultColWidth:=round((StringGrid1.Width-10)/StringGrid1.ColCount);
StringGrid2.ColCount:=SpinEdit1.Value;
StringGrid2.DefaultColWidth:=round((StringGrid2.Width-10)/StringGrid2.ColCount);
for i:=0 to SpinEdit1.Value-1 do
StringGrid1.Cells[i,0]:='k'+inttostr(i+1);
for i:=0 to SpinEdit1.Value-1 do
StringGrid2.Cells[i,0]:='q'+inttostr(i+1);
end;
procedure TForm2.SpinEdit1Change(Sender: TObject);
var i:integer;
begin
StringGrid1.ColCount:=SpinEdit1.Value;
StringGrid1.DefaultColWidth:=round((StringGrid1.Width-10)/StringGrid1.ColCount);
StringGrid2.ColCount:=SpinEdit1.Value;
StringGrid2.DefaultColWidth:=round((StringGrid2.Width-10)/StringGrid2.ColCount);
Form1.SpinEdit1.Value:=SpinEdit1.Value;
for i:=0 to SpinEdit1.Value-1 do
StringGrid1.Cells[i,0]:='k'+inttostr(i+1);
for i:=0 to SpinEdit1.Value-1 do
StringGrid2.Cells[i,0]:='q'+inttostr(i+1);
end;
procedure TForm2.Button1Click(Sender: TObject);
var i,s:integer;
f:boolean;
begin
f:=true;
s:=0;
For i:=0 to SpinEdit1.Value-1 do
if StringGrid1.Cells[i,1]='' then f:=false;
if f=false then ShowMessage('Çíà÷åíèÿ íå îïðåäåëåíû')
else begin
For i:=0 to SpinEdit1.Value-1 do
s:=s+strtoint(StringGrid1.Cells[i,1]);
if s>0 then begin
StringGrid2.Cells[0,1]:=floattostr(strtoint(StringGrid1.Cells[0,1])/s);
For i:=0 to SpinEdit1.Value-1 do begin
StringGrid2.Cells[i,1]:=floattostr(strtoint(StringGrid1.Cells[i,1])/s);
Form1.StringGrid2.Cells[i+1,0]:=StringGrid2.Cells[i,1];
Memo1.Text:=Memo1.Text+StringGrid1.Cells[i,1]+'*'+StringGrid2.Cells[0,1]+'/'+
StringGrid1.Cells[0,1]+' ';
end;end
else ShowMessage('Çíà÷åíèÿ ðàâíû 0');
end;
end;
procedure TForm2.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
begin
if not (key in ['0'..'9',#8]) then key:=#0;
end;
end;
end.