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

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

Московский Энергетический Институт (ТУ)

























Лабораторная работа №3.

На тему

«Моделирование с помощью системы интеллектуального

имитационного моделирования РДО».

















Подготовил студент

Группы А-13-06

Новик Алексей







Москва. 2010 год.

Оглавление



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

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

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

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

Ресурсы 3

Операции 3

Интерфейс 4

Выполнение 4

Приложение 5

Используемые функции 5

Образец операции 6

Кадры анимации 7

Результаты 8































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



Необходимо реализовать в системе имитационного моделирования РДО следующую ситуацию:

Имитация танковых стрельб на полигоне. Танк должен успешно поразить как можно больше мишеней.

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



На полигоне по очереди выставляются 10 мишеней в двух позициях (вверху и внизу). Каждой мишени соответствует некоторая стоимость, которая определяется по случайному закону и изменяется от 10 единиц до 30 единиц. Танк также находится на полигоне в одной из двух позиций (вверху и внизу). Танк стреляет по готовности. Игроку предлагается управлять перемещением танка по полигону с помощью клавиш «вверх» и «вниз». В конце игры подсчитывается количество заработанных танком очков и пораженных мишеней.

Конечное состояние

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

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

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



$Resource_type Танк : permanent

$Parameters

состояние : (свободен, стреляет, закончил) = свободен

положение : (вверху, внизу) = внизу

заработанные_очки : integer = 0

количество : integer = 0 {пораженных мишеней}

выстрел : (стреляет, не_стреляет) = не_стреляет {Момент выстрела}

$End



$Resource_type Мишень : permanent

$Parameters

состояние : (на_полигоне, в_прицеле, поражена, отброшена) = на_полигоне {Когда мишень в прицеле, она появляется и по ней можно стрелять }

положение : (вверху, внизу) = внизу {Положение мишени внизу или вверху экрана}

стоимость : integer = 10

$End



$Resource_type Полигон : permanent

$Parameters

количество_непораженных_мишеней : integer = 10

$End



Ресурсы



Для имитации стрельб достаточно двенадцати ресурсов: танк, полигон и 10 мишеней.

$Resources


Танк1 : Танк * * * * *

Мишень1 : Мишень trace * внизу *

Мишень2 : Мишень trace * вверху *

Мишень3 : Мишень trace * вверху *

Мишень4 : Мишень trace * внизу *

Мишень5 : Мишень trace * вверху *

Мишень6 : Мишень trace * внизу *

Мишень7 : Мишень trace * внизу *

Мишень8 : Мишень trace * вверху *

Мишень9 : Мишень trace * вверху *

Мишень10 : Мишень trace * внизу *

Полигон1 : Полигон *

$End


Операции



Для имитации стрельб необходимо 3 операции:

  • Собственно стрельба.

  • Реакция на нажатие клавиши «вверх»

  • Реакция на нажатие клавиши «вниз»


$Operations


Вверх : Образец_переместиться_вверх 'UP'

_Вниз : Образец_переместиться_вниз 'DOWN'

_Стрельба : Стрельба


$End











Интерфейс



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

Выполнение



/ Имя модели (*.pat, *.rtp, *.fun и *.dpt)

Model_name = lab3


// Ресурсы (*.rss)

Resource_file = lab3


// Операции (*.opr)

// Одновременно в модели может присутствовать или файл *.opr или файл *.dpt, но не оба сразу

OprIev_file = lab3


// Собираемые показатели (*.pmd)

Statistic_file = lab3


// Результаты прогона (*.pmv), выводятся внизу экрана

Results_file = lab3


// Трассировка (*.trc)

// Если файл трассировки закомментировать, то отключится вся трассировка в модели

Trace_file = lab3


// Анимация (*.trc)

Frame_file = lab3

// Отображение анимации начинается с кадра Frame_number

Frame_number = 1


// Режим прогона, включить анимацию

Show_mode = Animation

// Скорость анимации. Чем больше значение, тем быстрее прогон

Show_rate = 10000.0


// Условие остановки модели. После Terminate_if можно указать любое логическое выражение

Terminate_if Time_now >= 10*60*60.0


Приложение

Используемые функции

FUN


$Constant

H : integer = 10 { Количество мишеней на полигоне }

$End


$Function Попадание : integer {Возвращает 0 или 1 в зависимости от попадания} = 0

$Type = algorithmic

$Parameters

положение_танка : such_as Танк.положение

положение_мишени : such_as Мишень.положение

$Body

Calculate_if (положение_танка=вверху and положение_мишени=вверху) Попадание=1

Calculate_if (положение_танка=внизу and положение_мишени=внизу) Попадание=1

$End



$Function Проверка_завершенности : such_as Танк.состояние {Возвращает состояние танка в зависимости от кол-ва непораженных мишеней }

$Type = algorithmic

$Parameters

_количество : such_as Полигон.количество_непораженных_мишеней

$Body

Calculate_if _количество>0 Проверка_завершенности=свободен

Calculate_if _количество=0 Проверка_завершенности=закончил

$End


$Sequence Рандом : real

$Type = uniform 123

$End



Образец операции


PAT


$Pattern Стрельба : operation

$Relevant_resources

_танк : Танк1 Keep Keep

_мишень : Мишень Keep Keep

_полигон : Полигон1 Keep Keep

$Time = Рандом(0.005, 0.015)

$Body

_танк

Choice from _танк.состояние = свободен{ <логическое_выражение>, с помощью которого выбирается рел. ресурс }

Convert_begin

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

выстрел set не_стреляет

Convert_end

заработанные_очки set _танк.заработанные_очки + _мишень.стоимость * Попадание(_танк.положение, _мишень.положение)

количество set _танк.количество + Попадание(_танк.положение, _мишень.положение)

состояние set Проверка_завершенности(_полигон.количество_непораженных_мишеней - 1)

выстрел set стреляет

_мишень

Choice from _мишень.состояние = на_полигоне

Convert_begin

стоимость set Рандом(10, 30)

состояние set в_прицеле

Convert_end

состояние set поражена

_полигон

Choice from _полигон.количество_непораженных_мишеней >= 0

Convert_end

количество_непораженных_мишеней set _полигон.количество_непораженных_мишеней – 1

$End



{ Образец для перемещения вверх }

$Pattern Образец_переместиться_вверх : keyboard

$Relevant_resources

_танчик : Танк1 Keep Keep

$Time = 0.003

$Body

_танчик

Choice NoCheck

Convert_end

положение set вверху

$End

{ Образец для перемещения вниз }

$Pattern Образец_переместиться_вниз : keyboard

$Relevant_resources

_танчик : Танк1 Keep Keep

$Time = 0.002

$Body

_танчик

Choice NoCheck

Convert_end

положение set внизу

$End



Кадры анимации



FRM

$Frame _Кадр

$Back_picture = <255 255 255> polygon

Show { указанные после Show элементы будут отображаться всегда }

{Вывод сообщения о количестве заработанных очков}

text [280, 70, 250, 15, transparent, <255 255 0>, 'Заработано очков:']

text [330, 100, 100, 15, transparent, <255 255 0>, Танк1.заработанные_очки]

{Вывод названий объектов}

text [50, 100, 100, 15, transparent, <255 255 0>, 'Мишень']

text [600, 100, 250, 15, transparent, <255 255 0>, 'Танк']

{Вывод сообщения о количестве пораженных мишеней}

text [280, 130, 250, 15, transparent, <255 255 0>, 'Поражено мишеней:']

text [330, 150, 100, 15, transparent, <255 255 0>, Танк1.количество]

{Отображение мишени вверху}

Show_if (Мишень1.состояние = в_прицеле and Мишень1.положение = вверху)

bitmap [50,250,target1,masktarget1]

Show_if (Мишень2.состояние = в_прицеле and Мишень2.положение = вверху)

bitmap [50,250,target1,masktarget1]

Show_if (Мишень3.состояние = в_прицеле and Мишень3.положение = вверху)

bitmap [50,250,target1,masktarget1]

Show_if (Мишень4.состояние = в_прицеле and Мишень4.положение = вверху)

bitmap [50,250,target1,masktarget1]

Show_if (Мишень5.состояние = в_прицеле and Мишень5.положение = вверху)

bitmap [50,250,target1,masktarget1]

Show_if (Мишень6.состояние = в_прицеле and Мишень6.положение = вверху)

bitmap [50,250,target1,masktarget1]

Show_if (Мишень7.состояние = в_прицеле and Мишень7.положение = вверху)

bitmap [50,250,target1,masktarget1]

Show_if (Мишень8.состояние = в_прицеле and Мишень8.положение = вверху)

bitmap [50,250,target1,masktarget1]

Show_if (Мишень9.состояние = в_прицеле and Мишень9.положение = вверху)

bitmap [50,250,target1,masktarget1]

Show_if (Мишень10.состояние = в_прицеле and Мишень10.положение = вверху)

bitmap [50,250,target1,masktarget1]

{Отображение мишени внизу}

Show_if (Мишень1.состояние = в_прицеле and Мишень1.положение = внизу)

bitmap [50,450,target1,masktarget1]

Show_if (Мишень2.состояние = в_прицеле and Мишень2.положение = внизу)

bitmap [50,450,target1,masktarget1]

Show_if (Мишень3.состояние = в_прицеле and Мишень3.положение = внизу)


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

Файл
83863.rtf
184326.doc
103448.rtf
58733.rtf
36935.rtf




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