Теория оптимального планирования и управления

Автор: Пользователь скрыл имя, 19 Октября 2011 в 09:19, курсовая работа

Описание работы

Решение задачи стохастического программирования «Об игре с природой» по двум критериям: минимум средних потерь, минимум вероятности того, что потери превысят установленный предел.
Определить структуру данных, разработать детальный алгоритм, программную реализацию, провести тестовую проверку с трассировочной печатью промежуточных результатов.
Провести анализ на оптимальное решение вариаций параметров задачи.

Содержание

Цель работы 3
Содержательная постановка задачи 3
Формализованное описание задачи и метод её решения 3
Алгоритм программной реализации 4
Результаты ручного счёта 6
Результаты машинного счёта 7
Влияние вариации параметров на оптимальное решение и управление 8
Описание программной реализации 15
Вывод 21
Приложение 22

Работа содержит 1 файл

курсач.docx

— 843.22 Кб (Скачать)

     Пороговое  значение потерь пользователь  вводит вручную.

     

    1. Ввод необходимых  параметров задачи.

      Для ввода исходных данных необходимо воспользоваться  следующей таблицей:

    Для того чтобы начать заполнять данную таблицу пользователь после выбора размерности решаемой задачи и порогового значения потерь должен нажать кнопку «Редактировать данные в таблице» в правой части окна:

     

      Примечания:

      - При  вводе данных в ячейки таблицы  необходимо нажимать Enter  для завершения ввода информации в ячейку.

      - В  ячейках таблиц могут содержаться  только цифры.

      - Если  используются числа в десятичном  формате, то отделять их нужно  знаком запятая.

      - Столбцы  M(x) и P(x) заполнять не надо, они заполняться в ходе вычислений программы. 

    1. Решение задачи

         Для того чтобы решить задачу, необходимо нажать на кнопку «Посчитать» в нижней части окна: 

     

         После нажатия на кнопку будет выполнено  решение задачи, заполняться поля в таблице, соответствующие столбцам M(x) и P(x), а после его завершения внизу будет выведено сообщение с информацией о результате расчета: 

           

         Для того чтобы очистить таблицу и  ввести в неё новые данные необходимо нажать на кнопку «Очистить таблицу» в правой части окна:

           

         А для того чтобы вернуться к  настройке размерности решаемой задачи и порогового значения потерь необходимо нажать на кнопку «Вернуться к настройке таблицы»:

           

      1. Машинные  эксперименты
 

Эксперимент на корректную работу программы

  1. Загрузка стартового окна

  1. Ввод исходных данных
  2. Решение задачи 4. Очистка таблицы с данными
 

    Эксперимент  на решение задачи средней размерности (5×6)

 
 
 
 
 

Эксперимент  на решение задачи большой размерности (9×10)

 

    Эксперимент на обнаружение ошибок в исходных данных

  1. Ввод исходных данных

 
 
 
 

  1. Сообщение об ошибке

   

  1. Вывод
 

    В результате выполнения данной работы разработан и программно реализован алгоритм поиска оптимального решения  задачи стохастического программирования «Об игре с природой» по двум критериям: минимум средних потерь, минимум  вероятности того, что потери превысят установленный предел.

    Для случая задачи об игре с природой на примере организации зимней переправы  через реку проведен ручной счет исследуемой задачи. Результаты машинного эксперимента и ручного счета полностью совпали.

      Проведена тестовая проверка  программы при различных наборах  исходных данных и при варьировании  основных параметров задачи, а именно: вероятностей состояний природы, порогового значения потерь, затрат на осуществление переправы через реку.

    Целью нашей работы было определение такой  стратегии, которая обеспечила бы нам  наибольший выигрыш.

    Для любой задачи, решаемой с помощью  теории игр с природой, может быть определено абсолютно минимальное значение выигрыша, который мы получим в наихудшей для себя ситуации. Эта величина может быть равна, например, максимально возможным потерям, возникшим вследствие принятого решения. В процессе принятия решения для определения наиболее выгодной стратегии необходима информация о вероятностях состояния природы (окружающей среды). В частности, повышение уровня информированности может быть достигнуто при обращении к услугам консультационной службы, способной составить хорошо обоснованный прогноз развития ситуации. Можно рассматривать данное действие как своего рода “эксперимент”, проведение которого, несомненно, требует затраты определенных средств.

    Эксперимент целесообразно проводить в том  случае, если затраты на его проведение не превышают выигрыша, который можно  получить при более точном знании стратегии природы.

    Следует отметить, что выбор критерия принятия решений в условиях неопределенности является наиболее сложным и ответственным  этапом в процессе принятия решения. Выбор критерия должен производиться, с учетом конкретной специфики решаемой задачи и в соответствии с его  целями, на основе прошлого опыта и  интуиции. 

  
 
 
 
 
 
 
 
 

Приложение. 

Листинг программной разработки. 

    unit UMain; 

    interface 

    uses

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

      Dialogs, StdCtrls, Grids; 

    type 

      TFMain = class(TForm)

        Label1: TLabel;

        ComboBox1: TComboBox;

        Label2: TLabel;

        Label3: TLabel;

        ComboBox2: TComboBox;

        SG1: TStringGrid;

        Label4: TLabel;

        Edit1: TEdit;

        Button1: TButton;

        Button2: TButton;

        Button3: TButton;

        Button4: TButton;

        Label5: TLabel;

        Label6: TLabel;

        Label7: TLabel;

        Label8: TLabel;

        Label9: TLabel;

        procedure ComboBox1Change(Sender: TObject);

        procedure FormShow(Sender: TObject);

        procedure ComboBox2Change(Sender: TObject);

        procedure Button1Click(Sender: TObject);

        procedure Button2Click(Sender: TObject);

        procedure Button3Click(Sender: TObject);

        procedure Button4Click(Sender: TObject);

      private

        { Private declarations }

      public

        { Public declarations }

      end; 

    var

      FMain: TFMain; event,sost:array[1..20] of real; 

    implementation 

    {$R *.dfm} 

    procedure TFMain.ComboBox1Change(Sender: TObject);

    begin

    //Label2.Caption:=ComboBox1.Items.Strings[ComboBox1.ItemIndex]; //количество стратегий

    SG1.RowCount:=ComboBox1.ItemIndex+2;

    end; 

    procedure TFMain.FormShow(Sender: TObject);

    begin

    ComboBox1.ItemIndex:=0;

    ComboBox2.ItemIndex:=0;

    Button3.Enabled:=false;

    Button4.Enabled:=false;

    end; 

    procedure TFMain.ComboBox2Change(Sender: TObject);

    begin

    SG1.ColCount:=ComboBox2.ItemIndex+1;  // при выборе из списка ставится  значение в сетку

    end; 

    procedure TFMain.Button1Click(Sender: TObject);

    var i,j:integer; s:real; // сама сортировка

    begin

    {=================== Проверка вероятностей - начало ==========================}

    s:=0; 

    for j:=0 to ComboBox2.ItemIndex do  s:=s+StrToFloat(SG1.Cells[j,0]);

    {=================== Проверка вероятностей - конец ===========================} 

    if abs(1-s)<0.000001 then {если сумма вероятностей равна 1}

       Begin

    {==================== Основной подсчет - начало ==============================} 

       for i:=1 to ComboBox1.ItemIndex+1 do  // перебираем все стратегии

          Begin

          event[i]:=0;

          for j:=0 to ComboBox2.ItemIndex do   //перебираем все состояния

             event[i]:=event[i]+StrToFloat(SG1.Cells[j,i])*StrToFloat(SG1.Cells[j,0]);

          SG1.Cells[ComboBox1.ItemIndex+2,i]:=FloatToStr(event[i]);

          end;

       j:=1;

       for i:=2 to ComboBox1.ItemIndex+1 do

          Begin

          if event[i]<event[j] then j:=i;

          end;

       Label2.Caption:='Минимум потерь - при '+IntToStr(j)+' стратегии';

    {==================== Основной подсчет - конец ===============================}

       for i:=1 to ComboBox1.ItemIndex+1 do  // перебираем все стратегии

          Begin

          sost[i]:=0;

          for j:=0 to ComboBox2.ItemIndex do   //перебираем все состояния

             if StrToInt(SG1.Cells[j,i])>=StrToInt(Edit1.Text) then // если потеря превысила порог

                   sost[i]:=sost[i]+StrToFloat(SG1.Cells[j,0]); //то кладем в массив вероятность

          SG1.Cells[ComboBox1.ItemIndex+3,i]:=FloatToStr(sost[i]);

          end;

       j:=1;

       for i:=2 to ComboBox1.ItemIndex+1 do

          Begin

          if sost[i]<sost[j] then j:=i;

          end;

       Label5.Caption:='Минимальная вероятность  того,что потери превысят '+Edit1.Text+' - при '+IntToStr(j)+' стратегии'; 

       end  else   Application.MessageBox('Сумма вероятностей должна равняться единице!','Внимание!'); 

    end; 

    procedure TFMain.Button2Click(Sender: TObject);

    begin

    SG1.ColCount:=ComboBox2.ItemIndex+3; //прибавляем колонку для результатов

      SG1.Cells[SG1.ColCount-2,0]:='M(x)';

      SG1.Cells[SG1.ColCount-1,0]:='P(x)';

    SG1.Enabled:=true;

    ComboBox1.Enabled:=false;

    ComboBox2.Enabled:=false;

    Edit1.Enabled:=false;

    Button2.Enabled:=false;

    Button3.Enabled:=true;

    Button4.Enabled:=true;

    end; 

    procedure TFMain.Button3Click(Sender: TObject);

Информация о работе Теория оптимального планирования и управления