RSS    

   Реферат: Метод Гурвица

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

Наименьший

выигрыш

Наибольший

выигрыш

Коэффициенты оптимизма
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.9.Оценки результатов решения задачи

Результат решения задачи полностью соответствует заданию курсового проекта. В сравнении результатов решения задачи ручным с результатами автоматизированным методом, получил одинаковые результаты. Что означает что программа работает верно. Преимущество автоматизированного метода над ручным состоит в том, что автоматизированное время выполнения программы меньше, чем ручным.

ЗАКЛЮЧЕНИЕ

Данная курсовая работа включает в себя два предмета: «Программирование» и «Компьютерное модулирование»

В курсовой работе были рассмотрены следующие вопросы:

·        Рассмотрена характеристика «Теории игр» и следующие методы ее решения: метод Гурвица, метод Сэвиджа, метод максимина.

·        Рассмотрен и дан алгоритм решения теории игры в условии неопределенности методом Гурвица.

·        Дана краткая характеристика ПК, включая анализ средств программирования, описания ОС 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_m[i] then a_m[i]:=C_a[i,j];

                 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_m[i] then b_m[i]:=C_b[i,j];

                 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;

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  Grids, StdCtrls, ExtCtrls, Buttons, Menus;

type

  TForm2 = class(TForm)

    alpfa: TStringGrid;

    Panel1: TPanel;

    BitBtn1: TBitBtn;

    BitBtn2: TBitBtn;

    procedure FormShow(Sender: TObject);

    procedure BitBtn2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

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 Результат работы программы


Страницы: 1, 2, 3, 4


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.