Отчет (Лабораторные работы (2009))
Описание файла
Файл "Отчет" внутри архива находится в следующих папках: Лабораторные работы (2009), RDO-BowMaster. Документ из архива "Лабораторные работы (2009)", который расположен в категории "". Всё это находится в предмете "теория игр и исследование операций" из 8 семестр, которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "теория игр и исследование операций" в общих файлах.
Онлайн просмотр документа "Отчет"
Текст из документа "Отчет"
Московский Энергетический Институт
Технический Университет
Лабораторная работа №3
Проектирование с помощью системы интеллектуального имитационного моделирования РДО
Кузнецов Алексей
А-13-05
Москва, 2009 г.
Оглавление
Постановка задачи. 3
Описание предметной области 4
Описание имитационной модели 5
Типы ресурсов 5
Ресурсы 5
Операции 6
Интерфейс 7
Выполнение 7
Приложение 8
Функции 8
Последовательность 9
Постановка задачи.
Спроектировать модель с помощью системы интеллектуального имитационного моделирования РДО.
Должна быть реализована возможность графически отображать состояние моделируемой системы в реальном времени.
Объект моделирования – симулятор стрельбы из лука BowMaster.
В модели присутствуют объекты 4 типов:
- Мишень (1),
- Лук (2),
- Стрела (3),
-Ветер (4).
Модель рассчитана на участие игрока – человека (ЛПР).
В начале прогона модели в запасе игрока 10 стрел.
Игрок выпускает стрелы из лука по одной в интерактивном режиме (по нажатию кнопки на клавиатуре).
Каждый полет стрелы характеризуется набором параметров (подробнее в описании предметной области ниже).
При попадании стрелы в мишень, игрок набирает очки (подробнее в п.о.).
Цель игрока – набрать максимальное число очков.
Описание предметной области
Игрой назовём один прогон модели.
В начале игры у игрока в запасе 10 стрел. Мишень движется с постоянной скоростью в вертикальном направлении на малом расстоянии от лука. В случае если мишень достигает верхней или нижней границы игрового поля, она начинает двигаться в противоположном направлении. В верхнем левом углу игрового поля отображается подробная статистика о состоянии системы в текущий момент. Правее расположена информация о кнопках управления моделью. Игрок выпускает стрелы из лука с помощью кнопки A. Каждый выстрел характеризуется набором параметров:
-
Начальным углом наклона по отношению к нижней границе игрового поля (кнопки UP DOWN).
-
Начальной скоростью (кнопки LEFT RIGHT).
-
Позицией выстрела (вертикальное позиционирование лука, кнопки W S)
Эти параметры выбираются до выстрела с помощью кнопок клавиатуры и значения отражаются в статистике.
После выстрела стрела летит по баллистической траектории. На её полет начинает влиять ветер (точнее он изменяет горизонтальную составляющую скорости стрелы). Мощность ветра есть случайная величина, распределённая по равномерному закону распределения. Её можно видеть в статистике модели, а также внизу игрового поля в виде меняющей длину и направление синей контурной стрелки.
Стрела может завершить полет в 2-х типах случаев. Первый: стрела долетела до одной из границ игрового поля (левая, правая, нижняя, верхняя). В этом случае она просто исчезнет и можно стрелять снова.
Второй: стрела попадает в мишень, тогда игроку добавляются очки в зависимости от положения мишени. Мишень может находиться в одном из трёх положений: близко – 1 очко за попадание, средне – 2 очка, далеко – 3 очка. Положение мишени регулирует игрок кнопками 1-3 на клавиатуре. После попадания в мишень стрела исчезает и снова можно стрелять.
Если в запасе игрока нет стрел, отображается окно с сообщением о конце моделирования и количеством набранных игроком очков. Прогон завершается через 7 секунд.
Описание имитационной модели
Типы ресурсов
Типы ресурсов используются для описания структур объектов моделируемой системы.
В модели 1 тип ресурсов, описывающий всю моделируемую ситуацию. Ресурс постоянный.
$Resource_type Игровая_Ситуация : permanent
$Parameters
Где_Мишень : (f, s, t) = f Позиция мишени в 1 из 3-х
У_Мишени : integer [-10..210] = 0 Вертикальная позиция мишени
У_Лука : integer [0..200] = 50 Вертикальная позиция лука
Стрел_Осталось : integer [-10..50] = 10 Сколько стрел в запасе у игрока
Летит : (нет, да) = нет Находится ли стрела в полете
Х_Скорость : real [-40.0..40.0] = 0.0 Горизонтальная составляющая скорости
У_Скорость : real [-40.0..40.0] = 0.0 Вертикальная составляющая скорости
Х_Позиция : real [-50.0..900.0] = 1.0 Горизонтальная координата
У_Позиция : real [-100.0..600.0] = 0.0 Вертикальная координата
Очки : integer [0..150] = 0 Количество очков на счету игрока
Полет : (нет, да) = нет Исключение бесконечного вызова обработки полета
Sim : (нет, да) = нет Продолжать ли прогон модели
D : integer [-1..1] = 1 Направление движения мишени
W : real [-0.2..0.2] = 0.0 Мощность ветра
Wi : integer [-10..10] = 0 Преобразованный показатель мощности
WH : integer [0..60] = 0 Частота генерации скорости ветра
Показать_Итог : (нет, да) = нет
Конец : (нет, да) = нет
Сила_Выстрела : real [5.0..25.0] = 12.5 Регулирует начальную скорость стрелы
Угол_Выстрела : real [0.175..1.4] = 0.4 Регулирует начальный угол траектории
$End
Ресурсы
Единственный ресурс, собственно сама игровая ситуация
$Resources
Ситуация : Игровая_Ситуация * * * * * * * * * * * * * * * * * * * *
$End
Операции
Каждому образцу операции соответствует одна операция.
Список:
$Operations
// Изменяет положение и скорость стрелы
Оп_По : О_Полет
// Генерирует новое значение мощности ветра
Оп_В : WindH
// Переставляем мишень в каждую из 3-х позиций
Оп_П1 : О_Позиция_Мишени_1 '1'
Оп_П2 : О_Позиция_Мишени_2 '2'
Оп_П3 : О_Позиция_Мишени_3 '3'
// Перемещаем лук вверх или вниз
Оп_ЛВ : О_Лук_Вверх 'W'
Оп_ЛН : О_Лук_Вниз 'S'
// Совершить выстрел из лука
Оп_КФ : О_Выстрел 'A'
// Увеличение или уменьшение угла наклона выстрела
Op_AU : О_Угол_Вверх 'UP'
Op_AD : О_Угол_Вниз 'DOWN'
// Увеличение/уменьшение начальной скорости стрелы (сила выстрела)
Оп_СМ : О_СилаМ 'LEFT'
Оп_СП : О_СилаП 'RIGHT'
// Два типа завершения полета стрелы
Оп_ЕП1 : О_Конец_Полета1
Оп_ЕП2 : О_Конец_Полета2
// Продолжение прогона
Оп_Игра : Sim
// Инициализация терминации прогона
End : EndPoint
$End
Интерфейс
Интерфейс состоит из одного кадра анимации.
На нём отображается подробная статистика, лук, стрела, мишень, «ветрометр», информация по управляющим кнопкам, окно завершения прогона.
Выполнение
Объект прогона :
Model_name = mymodel
Resource_file = mymodel
OprIev_file = mymodel
Frame_file = mymodel
Frame_number = 1
Show_mode = Animation
Show_rate = 1.0
Terminate_if Ситуация.Конец = да Условие завершения прогона
Приложение
Функции
// Расчет координатной позиции мишени
$Function Pos : integer
$Type = algorithmic
$Parameters
_p : such_as Игровая_Ситуация.Где_Мишень
$Body
Calculate_if _p = f Pos = 300
Calculate_if _p = s Pos = 450
Calculate_if _p = t Pos = 600
$End
// Расчет очков за попадание
$Function Score : integer
$Type = algorithmic
$Parameters
_p : such_as Игровая_Ситуация.Где_Мишень
$Body
Calculate_if _p = f Score = 1
Calculate_if _p = s Score = 2
Calculate_if _p = t Score = 3
$End
// Направление перемещения мишени
$Function Val : integer
$Type = algorithmic
$Parameters
p : such_as Игровая_Ситуация.У_Мишени
l : such_as Игровая_Ситуация.D
$Body
Calculate_if p > 200 Val = -1
Calculate_if p < 0 Val = 1
Calculate_if p > -1 and p < 201 Val = l
$End
// Представление мощности ветра в наглядном виде
$Function iWind : integer
$Type = algorithmic
$Parameters
p : such_as Игровая_Ситуация.W
$Body
iWind = Round(p * 100)
$End
Последовательность
Случайная величина с распределением по равномерному закону
$Sequence Wind : real
$Type = uniform 1131113
$End