Автор: Пользователь скрыл имя, 19 Октября 2011 в 09:19, курсовая работа
Решение задачи стохастического программирования «Об игре с природой» по двум критериям: минимум средних потерь, минимум вероятности того, что потери превысят установленный предел.
Определить структуру данных, разработать детальный алгоритм, программную реализацию, провести тестовую проверку с трассировочной печатью промежуточных результатов.
Провести анализ на оптимальное решение вариаций параметров задачи.
Цель работы 3
Содержательная постановка задачи 3
Формализованное описание задачи и метод её решения 3
Алгоритм программной реализации 4
Результаты ручного счёта 6
Результаты машинного счёта 7
Влияние вариации параметров на оптимальное решение и управление 8
Описание программной реализации 15
Вывод 21
Приложение 22
Пороговое значение потерь пользователь вводит вручную.
Для ввода исходных данных необходимо воспользоваться следующей таблицей:
Для того чтобы начать заполнять данную таблицу пользователь после выбора размерности решаемой задачи и порогового значения потерь должен нажать кнопку «Редактировать данные в таблице» в правой части окна:
Примечания:
- При вводе данных в ячейки таблицы необходимо нажимать Enter для завершения ввода информации в ячейку.
- В
ячейках таблиц могут
- Если
используются числа в
- Столбцы
M(x) и P(x) заполнять не надо, они заполняться
в ходе вычислений программы.
Для
того чтобы решить задачу, необходимо
нажать на кнопку «Посчитать» в нижней
части окна:
После
нажатия на кнопку будет выполнено
решение задачи, заполняться поля
в таблице, соответствующие столбцам
M(x) и P(x), а после его завершения внизу будет
выведено сообщение с информацией о результате
расчета:
Для того чтобы очистить таблицу и ввести в неё новые данные необходимо нажать на кнопку «Очистить таблицу» в правой части окна:
А для того чтобы вернуться к настройке размерности решаемой задачи и порогового значения потерь необходимо нажать на кнопку «Вернуться к настройке таблицы»:
Эксперимент на корректную работу программы
Эксперимент на решение задачи средней размерности (5×6)
Эксперимент на решение задачи большой размерности (9×10)
Эксперимент на обнаружение ошибок в исходных данных
В
результате выполнения данной работы
разработан и программно реализован
алгоритм поиска оптимального решения
задачи стохастического
Для случая задачи об игре с природой на примере организации зимней переправы через реку проведен ручной счет исследуемой задачи. Результаты машинного эксперимента и ручного счета полностью совпали.
Проведена тестовая проверка
программы при различных
Целью нашей работы было определение такой стратегии, которая обеспечила бы нам наибольший выигрыш.
Для любой задачи, решаемой с помощью теории игр с природой, может быть определено абсолютно минимальное значение выигрыша, который мы получим в наихудшей для себя ситуации. Эта величина может быть равна, например, максимально возможным потерям, возникшим вследствие принятого решения. В процессе принятия решения для определения наиболее выгодной стратегии необходима информация о вероятностях состояния природы (окружающей среды). В частности, повышение уровня информированности может быть достигнуто при обращении к услугам консультационной службы, способной составить хорошо обоснованный прогноз развития ситуации. Можно рассматривать данное действие как своего рода “эксперимент”, проведение которого, несомненно, требует затраты определенных средств.
Эксперимент целесообразно проводить в том случае, если затраты на его проведение не превышают выигрыша, который можно получить при более точном знании стратегии природы.
Следует
отметить, что выбор критерия принятия
решений в условиях неопределенности
является наиболее сложным и ответственным
этапом в процессе принятия решения.
Выбор критерия должен производиться,
с учетом конкретной специфики решаемой
задачи и в соответствии с его
целями, на основе прошлого опыта и
интуиции.
Приложение.
Листинг
программной разработки.
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.
SG1.RowCount:=ComboBox1.
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.
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[ComboBox1.ItemIndex+
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])>=
sost[i]:=sost[i]+StrToFloat(
SG1.Cells[ComboBox1.ItemIndex+
end;
j:=1;
for i:=2 to ComboBox1.ItemIndex+1 do
Begin
if sost[i]<sost[j] then j:=i;
end;
Label5.Caption:='Минимальная
end else Application.MessageBox('Сумма вероятностей
должна равняться единице!','Внимание!');
end;
procedure TFMain.Button2Click(Sender: TObject);
begin
SG1.ColCount:=ComboBox2.
SG1.Cells[SG1.ColCount-2,0]:='
SG1.Cells[SG1.ColCount-1,0]:='
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);
Информация о работе Теория оптимального планирования и управления