Рисунок 2.1.1
Оба игрока по прямой связи U(t) делает ход, выбирая предполагаемую стратегию. Ни один из игроков не знает хода противника. В случае если игрок узнает стратегию своего противника, то по обратной связи f(t) поступает сигнал, что он может отказаться от своей старой стратегии и выбрать другую стратегию. Востановив работу по прямой связи U(t).
Человек А в играх с природой старается действовать осмотрительно, используя, например, минимаксную стратегию, позволяющую получить наименьший проигрыш. Второй игрок В (природа) действует совершенно случайно, возможные стратегии определяются как её состояние. Условия игры задаются в виде матрицы.
[pic]
Элементы Сij = выигрышу игрока А, если он использует стратегию Аi.
В данном курсовом проекте состязательная задача решается по методу Гурвица.
Пусть в игре принимают участие два игрока А и В.
Рассматривается конфликтная ситуация между двумя сторонами А и В. Игрок А имеет m стратегий, а В имеет n стратегий: А={А1, А1,…, А1}; В={В1, В1,…, В1}.
Взаимосвязь между стратегиями любого из игроков определяется платёжной матрицей С={Cij}m*n. Cij – выигрыш игрока А. Заданы статистические коэффициенты оптимизации ([pic]).
Цель игры состоит в том, чтобы вывести ситуацию из условия неопределённости, найти максимальный выигрыш, по которому определить оптимальную стратегию каждого игрока, а также игрока разрешающего конфликтную ситуацию.
Решение игры и исходные данные сводятся в таблицу Гурвица (табл. 2.1.1).
Таблица 2.1.1
| |В1 |В2 |… |Вn |Наименьший|Наибольший |Коэффициенты | | | | | | | |выигрыш |оптимизма | | | | | | |выигрыш | | | | | | | | | |0,1 |0,2 |0,3 | |А1 |1 |1 |3 |1 |3 |2,8 |2,6 |2,4 | |А2 |5 |6 |8 |5 |8 |7,7 |7,4 |7,1 | |А3 |4 |3 |5 |3 |5 |4,8 |4,6 |4,4 |
Найти игрока, разрешающего конфликтную ситуацию.
Найдём условно расчётные выигрыши игрока А по формуле:
V11=0,1*1+(1 – 0,1)*3=2,8
V12=0,2*1+(1 – 0,2)*3=2,6
V13=0,3*1+(1 – 0,3)*3=2,4
V21=0,1*5+(1 – 0,1)*8=7,7
V22=0,2*5+(1 – 0,2)*8=7,4
V23=0,3*5+(1 – 0,3)*8=7,1
V31=0,1*3+(1 – 0,1)*5=4,8
V32=0,2*3+(1 – 0,2)*5=4,6
V33=0,3*3+(1 – 0,3)*5=4,4
Среди найденных условных расчётных выигрышей найдём максимальный. Он равен 7.7, значит оптимальная стратегия игрока А будет А2.
Далее найдём оптимальная стратегия игрока В, для этого транспонируем матрицу. Результаты заносим в таблицу 2.8.2.
Таблица 2.8.2
| |А1 |А2 |А3 |Наименьший |Наибольший |Коэффициенты | | | | | |выигрыш |выигрыш |оптимизма | | | | | |[pic] |[pic] | | | | | | | | |0,1 |0,2 |0,3 | |В1 |1 |5 |4 |1 |5 |4,6 |4,2 |3,8 | |В2 |1 |6 |3 |1 |6 |5,5 |5 |4,5 | |В3 |3 |8 |5 |3 |8 |7,5 |7 |6,5 |
Найдём условно расчётные выигрыши игрока В
V11=0,1*1+(1 – 0,1)*5=4,6
V12=0,2*1+(1 – 0,2)*5=4,2
V13=0,3*1+(1 – 0,3)*5=3,8
V21=0,1*1+(1 – 0,1)*6=5,5
V22=0,2*1+(1 – 0,2)*6=5
V23=0,3*1+(1 – 0,3)*6=4,5
V31=0,1*3+(1 – 0,1)*8=7,5
V32=0,2*3+(1 – 0,2)*8=7
V33=0,3*3+(1 – 0,3)*8=6,5
Среди найденных условных расчётных выигрышей найдём максимальный. Он равен 7.5, значит оптимальная стратегия игрока В будет В3.
Из 2-х оптимальных стратегий, находим наибольший выигрыш, а именно 7,7>7,5; следовательно игрок А разрешит конфликтную ситуацию с максимальным выигрышем равным 7,7, стратегия которого равна 2.
2 Оценки результатов решения задачи
Результат решения задачи полностью соответствует заданию курсового проекта. В сравнении результатов решения задачи ручным с результатами автоматизированным методом, получил одинаковые результаты. Что означает что программа работает верно. Преимущество автоматизированного метода над ручным состоит в том, что автоматизированное время выполнения программы меньше, чем ручным.
ЗАКЛЮЧЕНИЕ
Данная курсовая работа включает в себя два предмета: «Программирование» и «Компьютерное модулирование»
В курсовой работе были рассмотрены следующие вопросы: . Рассмотрена характеристика «Теории игр» и следующие методы ее решения: метод Гурвица, метод Сэвиджа, метод максимина. . Рассмотрен и дан алгоритм решения теории игры в условии неопределенности методом Гурвица. . Дана краткая характеристика ПК, включая анализ средств программирования, описания ОС MS-DOS и MS Windows’ . Рассмотрен выбор языка программирования. . Написана программа для решения данной задачи.
СПИСОК ЛИТЕРАТУРЫ
1. Г. С. Малик «Основы экономики и математические методы в планировании». 2. Кузнецов «Математическое программирование». 3. В. В. Фаронов «Delphi 5. Учебный курс». 4. Ю. П. Зайченко «Исследование операций в задачах, алгоритмах, программах».
Приложение 1 Текст программы
Medot_Gurwiwiza.dpr
program Medot_Gurwiza; {Курсовой проект по предмету "Компьютерное модулирование" по теме "Теория игр" Принцип Гурвица Выполнил студент гр. П-00-1 Юшков Андрей 10.06.02} uses Forms, osnowa in 'osnowa.pas' {form1}, Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin Application.Initialize; Application.CreateForm(Tform1, form1); Application.CreateForm(TForm2, Form2); Application.Run; end.
unit osnowa;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, ToolWin, ComCtrls, Buttons, ActnList, StdActns, Menus, Mask, ExtCtrls, jpeg;
type Tform1 = class(TForm) tabliza: TStringGrid;
Panel1: TPanel;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
C_S: TStringGrid;
Panel2: TPanel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Panel3: TPanel;
Panel4: TPanel;
Label17: TLabel;
Label18: TLabel;
Panel5: TPanel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
RadioButton7: TRadioButton;
RadioButton8: TRadioButton;
Button3: TButton;
Panel6: TPanel;
Label1: TLabel;
BitBtn1: TBitBtn;
Label15: TLabel; procedure WWod_koef(Sender: TObject); procedure W_Rezultat(Sender: TObject); procedure W_tabliza_A(Sender: TObject); procedure W_tabliza_B(Sender: TObject);
private
{ Private declarations } public
{ Public declarations } end;
var form1: Tform1;
C_B,C_A:array [1..10,1..10] of integer; { платёжная матрица игрока А,В} a_b,a_m,b_b,b_m:array[1..10] of integer; {наибольший наименьший выигрыш иг. А,В} al:array[1..10] of real; {массив альфа}
V_A,V_B:array[1..10,1..10]of real; {Расчётные выигрыши иг. А,В } max_a:real; { Наибольший выигрыш игрока А} max_b:real; { Наибольший выигрыш игрока В}
H_a:integer; { Оптимальная стратегия игрока А} h_b:integer; { Оптимальная стратегия игрока В} m:Integer; { Количество стратегий игрока А} n:Integer; { Количество стратегий игрока В} k:Integer; { Количество статистических коэффициентов}
I,J:Integer;
implementation uses Unit2; {$R *.DFM}
{ вывод коэф., матрицы С_А} procedure WW_A; begin form1.c_s.Colcount:=n+1; form1.c_s.Rowcount:=m+1; form1.tabliza.Rowcount:=m+1; for i :=1 to m do begin form1.tabliza.Cells[0,i]:='A'+intToStr(i); form1.C_S.Cells[0,i]:='A'+intToStr(i); for j :=1 to n do begin form1.C_S.Cells[j,0]:='B'+intToStr(j); form1.C_S.Cells[j,i]:=intToStr(C_A[i,j]); end; end; with form1 do begin label23.caption:='A'; tabliza.cells[1,0]:='a_малая';tabliza.cells[2,0]:='a_большая'; end; end;
{ Вывод наибольший, наименьший, расчётный выигрыш матрицы V_А} procedure WW_A1; begin WW_A;
With form1.tabliza Do begin for j:=1 to n do begin cells[1,j]:=intToStr(a_m[j]); cells[2,j]:=intToStr(a_b[j]); end; for i:=1 to m do for j:=1 to k do cells[j+2,i]:=floatToStr(V_a[i,j]); end; end;
{событие на нажатие кнопки 'Ввод коэф..'} procedure TForm1.WWod_koef(Sender: TObject); begin try m:=strToint(edit1.text); n:=strToint(edit2.text); k:=strToint(edit3.text); except showMessage('Ошибочная запись числа '); end; try
Form2 := TForm2.Create(self); tabliza.Colcount:=3+k;
Form2.ShowModal; finally
Form2.Close;
WW_a; end; end;
{событие на нажатие кнопки 'вывод результата'} procedure Tform1.W_Rezultat(Sender: TObject); begin
Panel6.Visible:=false; panel3.Visible:=true; {Вводим из таблицы C_A в матрицу игрока А - C_A} { C_S[столбец,строка] } for i :=1 to m do {по столбцам m таблицы C_S} for j :=1 to n do {по строкам n таблицы C_S}
C_a[i,j]:=StrToInt(C_S.Cells[j,i]); {Создаём матрицу C_B путём транспонирования матрицы игрока А} for i :=1 to n do for j :=1 to m do
C_b[i,j] :=StrToInt(C_S.Cells[i,j]); {расчет наименьших и наибольших выигрышей игрока A} for i:=1 to m do begin a_m[i]:=C_a[i,1]; {массив наименьшии выигрыш} a_b[i]:=C_a[i,1]; {массив наибольшии выигрыш} for j :=2 to n do begin if C_a[i,j]a_b[i] then a_b[i]:=C_a[i,j]; end; {вычисления расчетных выигрышей игрока A} for j :=1 to k do
V_a[i,j]:=al[j]*a_m[i]+(1-al[j])*a_b[i]; end; {нахождения оптимальной стратегии и максимального выигрыша игрока A} max_a:=V_a[1,1]; H_A:=1; for i :=1 to m do for j :=1 to k do if V_a[i,j]>max_A then begin max_a:=V_a[i,j]; { максимальный выигрыш игрока А}
H_a:=i { оптимальная стратегия игрока А} end;
{расчет наименьших и наибольших выигрышей игрока В} for i:=1 to n do begin b_m[i]:=C_b[i,1]; {массив наименьшии выигрыш} b_b[i]:=C_b[i,1]; {массив наибольшии выигрыш} for j:=2 to m do begin if C_b[i,j]b_b[i] then b_b[i]:=C_b[i,j]; end; {вычисления расчетных выигрышей игрока В} for j:=1 to k do
V_b[i,j]:=al[j]*b_m[i]+(1-al[j])*b_b[i]; end; {нахождения оптимальной стратегии и максимального выигрыша игрока В} max_b:=V_b[1,1]; H_b:=1; for i:=1 to n do for j:=1 to k do if V_b[i,j]>max_b then begin max_b:=V_b[i,j]; { максимальный выигрыш игрока B}
H_b:=i { оптимальная стратегия игрока B} end;
{ нахождения наибольшего расчетного выигрыша одного из игроков } if max_a=max_b then Panel6.Visible:=true else if max_a>max_b then begin
Panel4.Visible:=true; panel5.Visible:=false end else begin panel5.Visible:=true;
Panel4.Visible:=false end; label11.Caption:=FloatToStr(max_a); label12.Caption:=FloatToStr(H_a); label14.Caption:=FloatToStr(max_b); label13.Caption:=FloatToStr(H_b); WW_A1; end;
{просмотр для игрока А} procedure Tform1.W_tabliza_A(Sender: TObject); begin WW_A1; end;
{просмотр для игрока B} procedure Tform1.W_tabliza_B(Sender: TObject); begin with form1 do
Begin c_s.Colcount:=m+1; c_s.Rowcount:=n+1; tabliza.Rowcount:=n+1; for i:=1 to n do begin form1.tabliza.Cells[0,i]:='B'+intToStr(i); form1.C_S.Cells[0,i]:='B'+intToStr(i);
for j:=1 to m do begin form1.C_S.Cells[j,0]:='A'+intToStr(j); form1.C_S.Cells[j,i]:=intToStr(C_B[i,j]); end; end; label23.caption:='B'; tabliza.cells[1,0]:='b_малая';tabliza.cells[2,0]:='b_большая'; for j:=1 to n do begin tabliza.cells[1,j]:=intToStr(b_m[j]); tabliza.cells[2,j]:=intToStr(b_b[j]); end; for i:=1 to n do for j:=1 to k do tabliza.cells[j+2,i]:=floatToStr(V_b[i,j]); end; end; end.
unit Unit2;
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, ExtCtrls, Buttons, Menus;
type TForm2 = class(TForm) alpfa: TStringGrid;
BitBtn2: TBitBtn; procedure FormShow(Sender: TObject); procedure BitBtn2Click(Sender: TObject);
var Form2: TForm2; i,j:integer; implementation
uses osnowa;
{$R *.DFM} { Ввод козффициентов оптимизмов} procedure TForm2.FormShow(Sender: TObject); begin j:=0; form1.tabliza.Visible:=true; alpfa.Colcount:=strToInt(form1.edit3.text); for i:=0 to alpfa.Colcount do begin j:=j+1; alpfa.Cells[i,0]:='Alpha'+intToStr(i+1); alpfa.Cells[i,1]:=FloatToStr(al[j]); end; end;
procedure TForm2.BitBtn2Click(Sender: TObject); begin j:=0; for i:=0 to alpfa.Colcount do begin j:=j+1; try al[j]:=strToFloat(trim(alpfa.Cells[i,1])); form1.tabliza.Cells[3+i,0]:=alpfa.Cells[i,1]; except showMessage('Ошибочная запись числа : '+alpfa.Cells[i,1]); end; end;
end; end.
Приложение 2 Результат работы программы
----------------------- Игрок А
Игрок В
Стратегии игрок А
Стратегии игрок В
УС
СУ
ОУ
f(t)
U(t)
Продолжение рис 2.4.2
из стр.
63
62
Оптимальная стратегия, max выигрыш игрока В
61
Оптимальная стратегия, max выигрыш игрока А
60
Игрока В разрешит конфликтную ситуацию
Нет
59
да
Игрока А разрешит конфликтную ситуацию
56
58
max_a>max_b
max_a=max_b
57
55
Цикл 14
54
Цикл 15
F
E
53
H_b:=[pic]
Седловые точки
Выход
Продолжение рис. 2.4.2
к стр.
44
V_b[i,j]>max_b
52
51
Max_b:=V_b[pic]
48
47
50
49
H_B:=1
max_b:=V_b[1,1]
46
Цикл 11
V_b[i,j]:=al[j]*b_m[i]++(1-al[j])*b_b[i]
45
Цикл 13
D
43
42
Цикл 12
C_ b[i,j]> b_b[i,j]
41
40
b_m[pic]:=C_ b[pic]
C_ b[i,j]< b_m[i,j]
39
38
37
36
35
34
b_b[pic]:=C_b[pic]
b_m[pic]:=C_b[pic]
C
33
Цикл 9
32
Цикл 10
22
31
H_a:=[pic]
V_a[i,j]>max_a
30
29
Max_a:=V_ a[pic]
26
25
28
27
H_A:=1
max_a:=V_a[1,1]
24
Цикл 6
V_a[i,j]:=al[j]*a_m[i]+ +(1-al[j]) *a_b[i]
B
23
Цикл 7
21
20
C_ a[i,j]> a_b[i,j]
19
18
a_m[pic]:=C_ a[pic]
C_ a[i,j]
17
16
15
14
13
A
12
11
a_b[pic]:=C_a[pic]
a_m[pic]:=C_a[pic]
Цикл 5
Цикл 3
рис 2.4.2
10
9
8
7
6
5
4
3
2
Цикл 4
С_B[pic]:=C_S[pic]
Цикл 1
Цикл 2
С_А[pic]:=C_S[pic]
1
ВХОД
рисунок 2.4.1
W=2
W=1
КОНЕЦ
W_tabliza_B
W_tabliza_A
W_rezultat
W=?
Wwod_koef
НАЧАЛО
Страницы: 1, 2