Матрица игры с заданной вероятностью. Возможно строительство четырех типов электростанций А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 с.
Основной модуль:
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;