Лабораторные работы (2010) (Отчет)

Посмотреть архив целиком

Отчет по лабораторной работе №3 по дисциплине теория принятия решений.



Моделирование с помощью системы интеллектуального имитационного моделирования РДО.













Выполнил студент группы А-16-07

Коренченко Филипп

Приняли Гречкина П. В. Еремеев А. П.

13.04.2010











МЭИ (ТУ)

Оглавление:

Постановка задачи………………………………………………………………………………с. 3

Описание предметной области…………………………………………………………с. 3

Описание имитационной модели……………………………………………………..с. 3

Типы ресурсов……………………………………………………………………………………..с. 3

Ресурсы………………………………………………………………………………………………..с. 4

Операции…………………………………………………………………………………………….с. 5

Интерфейс…………………………………………………………………………………………..с. 5

Выполнение………………………………………………………………………………………..с. 5

Статистика……………………………………………………………………………………………с. 6

Приложение………………………………………………………………………………………..с. 7




































Постановка задачи.

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



Описание предметной области.

Имеется ружье, которое можно перемещать по карте. Ружье может находиться в пяти разных позициях. Изначально ружье находится на третьей позиции в середине карты.

Из левого угла карты вылетает утка со скоростью 6 (проходит 6 пикселей за временной интервал). Из правого угла карты вылетает утка со скоростью 3 (проходит 3 пиксела за временной интервал).

Если игрок успеет застрелить обоих уток до того, как одна из них вылетит за пределы карты, он выигрывает, в противном случае – проигрывает.

Всего в модели используется три объекта – ружье, утка 1 и утка 2. Ружье можно смещать на 60 пикселей влево (клавиша ‘LEFT’) или на 60 пикселей вправо (клавиша ‘RIGHT’), а также производить выстрел (клавиша ‘RETURN’).





Описание имитационной модели.

Типы ресурсов.

В модели используется два типа ресурсов – Ружье и Утка.

$Resource_type Ружье : permanent

$Parameters

X : integer = 125

Y : integer = 394

Состояние : (Стреляет, Не_стреляет) = Не_стреляет

Убитых_уток : integer = 0

$End


$Resource_type Утка : permanent

$Parameters

X : integer = 0

Y : integer = 10

Состояние : (Сбита, Несбита, Летит) = Несбита

Скорость : integer [1..6] = 6

$End

Первый тип ресурса – Ружье, используется для описания ружья. Второй тип ресурса – Утка, используется для описания обоих уток.

Описание типа ресурса Ружье:

  1. X – текущая координата ружья по оси X.

  2. Y – текущая координата ружья по оси Y.

  3. Состояние – текущее состояние ружья (стреляет в данный момент или нет). Значение по умолчанию – Не_стреляет.

  4. Убитых_уток – количество уже застрелянных уток. Значение по умолчанию – 0.

Описание типа ресурса Утка:

  1. X – текущая координата утки по оси X.

  2. Y – текущая координата утки по оси Y.

  3. Состояние – текущее состояние утки (Сбита, Несбита, Летит). Значение по умолчанию – Несбита.

  4. Скорость – текущая скорость утки (сколько пикселей проходит за временной интервал). Может варироваться от 1 до 6.



Ресурсы.

В модели используется три ресурса: ружье и две утки.

$Resources


_Ружье : Ружье * * * *

_Утка1 : Утка * * * 6

_Утка2 : Утка 300 60 * 3


$End


Операции.

В модели использованны следующие операции:

$Operations


Операция_остаемся : Образец_остаемся

Операция_влево : Образец_влево 'LEFT'

Операция_вправо : Образец_вправо 'RIGHT'

Операция_выстрел : Образец_выстрел 'RETURN'

Операция_летит1 : Образец_летит1

Операция_летит2 : Образец_летит2


$End

Описание операций:

  1. Операция_остаемся – Операция, необходимая для того, чтобы не вылетать из модели.

  2. Операция_влево – Операция сдвига ружья на 60 пикселей влево.

  3. Операция_вправо – Операция сдвига ружья на 60 пикселей вправо.

  4. Операция_выстрел – Выстрел при нажатии на клавишу ‘Enter’.

  5. Операция_летит1 – алгоритм полета первой утки.

  6. Операция_летит2 – алгоритм полета второй утки.

Интерфейс.

Используется 1 кадр анимации:

Комментарии:

  1. Первая утка

  2. Вторая утка

  3. Ружье

Клавиатура:

В процессе моделирования есть возможность смещать ружье влево (клавиша ‘LEFT’) и вправо (клавиша ‘RIGHT’), а также производить выстрел (клавиша ‘ENTER’).



Выполнение.

Объект прогона:

Model_name = Ducks


Resource_file = Ducks

OprIev_file = Ducks

Statistic_file = Ducks

Results_file = Ducks

Trace_file = Ducks

Frame_file = Ducks

Frame_number = 1

Show_mode = Animation

Show_rate = 200000.0

Условие завершения прогона:

Terminate_if Time_now >= 500



Статистика.

В результате выполнения данной работы была собрана следующая статистика.

Ситуация №1:

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

Результаты:

Убитых_уток 0

Состояние_первой_утки Несбита

Состояние_второй_утки Несбита

Длительность прогона: 4722 мсек.

Итог – проигрыш.

Ситуация №2:

Сместили ружье на одну позицию вправо и сделали выстрел по первой утке, затем выстрел по второй утке. Первую утку застрелить успели, вторая улетела.

Результаты:

Убитых_уток 1

Состояние_первой_утки Сбита

Состояние_второй_утки Несбита

Длительность прогона: 4978 мсек.

Итог – проигрыш.

Ситуация №3:

Сместили ружье на одну позицию вправо и сделали два почти одновременных выстрела по первой и второй утке. На этот раз удалось застрелить и первую и вторую утку.

Результаты:

Убитых_уток 2

Состояние_первой_утки Сбита

Состояние_второй_утки Сбита

Длительность прогона: 2614 мсек.

Итог – выигрыш.

Выводы: для победы наилучшая стратегия – сместить ружье на 1 позицию вправо и сделать два выстрела по обоим уткам.



Приложение.

Файл Ducks.pat:

$Pattern Образец_остаемся : irregular_event

$Relevant_resources

Rifle : _Ружье Keep


$Time = 10

$Body

Rifle

Convert_event

$End


$Pattern Образец_влево : keyboard

$Relevant_resources

Rifle : _Ружье Keep Keep


$Time = 10

$Body

Rifle

Choice from

Rifle.Состояние = Не_стреляет and Rifle.X > 60

Convert_begin

X set Rifle.X - 60

$End


$Pattern Образец_вправо : keyboard

$Relevant_resources

Rifle : _Ружье Keep Keep

$Time = 10

$Body

Rifle

Choice from

Rifle.Состояние = Не_стреляет and Rifle.X < 240

Convert_begin

X set Rifle.X + 60

$End


$Pattern Образец_выстрел : keyboard

$Relevant_resources

Rifle : _Ружье Keep Keep

duck1 : _Утка1 Keep Keep

duck2 : _Утка2 Keep Keep

$Time = 10

$Body

Rifle

Choice from

Rifle.Состояние = Не_стреляет and duck1.Состояние <> Сбита and duck1.X >= Rifle.X and duck1.X <= Rifle.X + 60 or

duck2.Состояние <> Сбита and duck2.X >= Rifle.X and duck2.X <= Rifle.X + 60

Convert_begin

Состояние set Стреляет

Convert_end

Состояние set Не_стреляет

Убитых_уток set Rifle.Убитых_уток + 1

duck1

Choice from

Rifle.Состояние = Не_стреляет and duck1.X >= Rifle.X and duck1.X <= Rifle.X + 60

Convert_begin

Состояние set Сбита

duck2

Choice from

Rifle.Состояние = Не_стреляет and duck2.X >= Rifle.X and duck2.X <= Rifle.X + 60

Convert_begin

Состояние set Сбита

$End


$Pattern Образец_летит1 : operation

$Relevant_resources

duck : _Утка1 Keep Keep


$Time = 2

$Body

duck

Choice from

duck.Состояние = Несбита and duck.X < 300

Convert_begin

Состояние set Летит

Convert_end

Состояние set Несбита

X set duck.X + duck.Скорость

$End


$Pattern Образец_летит2 : operation

$Relevant_resources

duck : _Утка2 Keep Keep


$Time = 2

$Body

duck

Choice from

duck.Состояние = Несбита and duck.X > -44

Convert_begin

Состояние set Летит

Convert_end

Состояние set Несбита

X set duck.X - duck.Скорость

$End



Файл Ducks.frm:

$Frame Кадр_1

$Back_picture = <255 255 255> фон

Show

bitmap[_Ружье.X, _Ружье.Y, ружье]

show_if _Утка1.Состояние = Летит

bitmap[_Утка1.X, _Утка1.Y, утка, утка_mask]

show_if _Утка2.Состояние = Летит

bitmap[_Утка2.X, _Утка2.Y, утка1, утка1_mask]

show_if _Ружье.Убитых_уток = 2

bitmap[2, 10, win]

show_if _Утка1.X >= 300 or _Утка2.X <= -44

bitmap[2, 10, lose]

$End



Файл Ducks.pmd:

$Results

Убитых_уток : get_value _Ружье.Убитых_уток

Состояние_первой_утки : get_value _Утка1.Состояние

Состояние_второй_утки : get_value _Утка2.Состояние

$End


Случайные файлы

Файл
20032-1.rtf
141938.rtf
65877.rtf
7266-1.rtf
165576.rtf




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