Лабораторные работы (2009) (rdo)

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

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
















Лабораторная работа № 3 по дисциплине:

Теория игр и исследование операций.

Тема: работа в системе РДО.










Выполнил: студент группы А-13-05 Хлопков В.В.















13.05.09


Оглавление

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

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

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

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

Ресурсы 4

Операции 5

Интерфейс 6

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

Приложение 6

Функции. 6

Объект кадра 8

Образцы операций. 9




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


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



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


Модель представляет собой пошаговую игру для одного лица(игрока). На каждом шаге игрок должен выбрать ящик для разгрузки. Выбор игрока осуществляется с помощью цифр клавиатуры. Задача игрока – за максимально короткое время освободить игровое поле.


Допустимы следующие действия игрока:

Выбор ящика по средствам цифр на клавиатуре: «1», «2», «3», «4», «5», «6», «7», «8», «9».


Конец игры наступает в 2-х случаях: игрок разгрузил ящики менее чем за 1000 ед. времени, игрок не справился с заданием в означенное время.













Кадр из игры:

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

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


Общее количество — 4.


Ресурс: сущность ящиков.

$Resource_type Ящики : permanent

$Parameters

состояние : (свободен, занят, выгружен) = свободен

сложность : integer

номер : integer [1..9]

$End


Ресурс: сущность грузчика.

$Resource_type Грузчик : permanent

$Parameters

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

количество : integer = 0 // количество разгруженных ящиков (зависит от сложности)

опыт : real = 0 // влияет на скорость разгрузки

$End


Ресурс: состояние игры.

$resource_type ClassGameState : permanent

$parameters

// Ход 0 - игрока, 1 - ожидание, 2 - игра окончена.

Turn : integer [0..2]

$end


Ресурс: таймер (необходим для непрерывного отображения анимации).

$resource_type ClassTimer : permanent

$parameters

CurTime : integer = 0

$end


      1. Ресурсы



Общее количество - 7.


Объект ресурса

Описание

Грузчик_1

Экземпляр игрока.

Ящик_1

Ящик_2

Ящик_3

Ящик_4

Ящик_5

Ящик_6

Ящик_7

Ящик_8

Ящик_9

Экземпляры ящиков.

ObjGameState

Состояние игры.

ObjTimer

Таймер.


Ящик_1 : Ящики trace * 1 1

Ящик_2 : Ящики trace * 1 2

Ящик_3 : Ящики trace * 1 3

Ящик_4 : Ящики trace * 2 4

Ящик_5 : Ящики trace * 2 5

Ящик_6 : Ящики trace * 2 6

Ящик_7 : Ящики trace * 3 7

Ящик_8 : Ящики trace * 3 8

Ящик_9 : Ящики trace * 3 9

Грузчик_1 : Грузчик trace * * *

ObjTimer : ClassTimer *

ObjGame : ClassGameState 0


      1. Операции



Общее количество — 12.


Список операций:


Название операции

Назначение

OnTimer

Событие таймера.

CheckPlayer

Проверка состояния игрока.

Waiting

Передача управления игроку

Выгрузка1-9

Выбор ящика игроком


$Operations

OnTimer : ActionTimer

CheckPlayer : ActionCheckPlayer

Waiting : ActionWaiting

Выгрузка1 : Образец_Выгрузка '1' 1

Выгрузка2 : Образец_Выгрузка '2' 2

Выгрузка3 : Образец_Выгрузка '3' 3

Выгрузка4 : Образец_Выгрузка '4' 4

Выгрузка5 : Образец_Выгрузка '5' 5

Выгрузка6 : Образец_Выгрузка '6' 6

Выгрузка7 : Образец_Выгрузка '7' 7

Выгрузка8 : Образец_Выгрузка '8' 8

Выгрузка9 : Образец_Выгрузка '9' 9

$End

      1. Интерфейс


Использовано кадров — 1.

Изображений — 3.


Изображения

изображения ящика.

грузчик занят разгрузкой данного ящика.

разгруженный ящик.


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



Model_name = Gruzchik


Resource_file = Gruzchik

OprIev_file = Gruzchik

Statistic_file = Gruzchik

Results_file = Gruzchik

Trace_file = Gruzchik

Frame_file = Gruzchik

Frame_number = 1

Show_mode = Animation

Show_rate = 30000.0

Приложение

Функции.


$Constant

Time : real = 1000.0

$End


$Sequence Рандом2 : real

$Type = uniform 154895

$End


$Function Выч_Сложности : real

$Type = algorithmic

$Parameters

сложность : integer

опыт : real

$Body

Calculate_if сложность=1 and опыт>=70 Выч_Сложности=5.0

Calculate_if сложность=1 and опыт<70 Выч_Сложности=40.0-опыт/2.8

Calculate_if сложность=2 and опыт>150 Выч_Сложности=10.0

Calculate_if сложность=2 and опыт>=40 Выч_Сложности=84.0-опыт/2.8

Calculate_if сложность=2 and опыт<40 Выч_Сложности=130.0-опыт

Calculate_if сложность=3 and опыт<100 Выч_Сложности=250.0-опыт

Calculate_if сложность=3 and опыт>=100 Выч_Сложности=150.0-опыт/3.0

$End


$Function Выч_Сложности2 :real

$Type = algorithmic

$Parameters

сложность : integer

опыт : real

$Body

Calculate_if сложность=1 and опыт>=70 Выч_Сложности2=15.0

Calculate_if сложность=1 and опыт<70 Выч_Сложности2=50.0-опыт/2.8

Calculate_if сложность=2 and опыт>150 Выч_Сложности2=25.0

Calculate_if сложность=2 and опыт>40 Выч_Сложности2=104.0-опыт/2.8

Calculate_if сложность=2 and опыт<40 Выч_Сложности2=150.0-опыт

Calculate_if сложность=3 and опыт>100 Выч_Сложности2=180.0-опыт/3.0

Calculate_if сложность=3 and опыт<100 Выч_Сложности2=280.0-опыт

$End


$Function Выч_количество :real

$Type = algorithmic

$Parameters

сложность : integer

$Body

Calculate_if сложность=1 Выч_количество = 5

Calculate_if сложность=2 Выч_количество = 10

Calculate_if сложность=3 Выч_количество = 20

$End



$Function Выч_опыт :real

$Type = algorithmic

$Parameters

сложность : integer

опыт : real

$Body

Calculate_if сложность=1 and опыт>60 Выч_опыт=опыт

Calculate_if сложность=1 Выч_опыт=опыт + 30

Calculate_if сложность=2 and опыт>120 Выч_опыт=опыт + 60

Calculate_if сложность=2 and опыт>150 Выч_опыт=опыт

Calculate_if сложность=2 Выч_опыт=опыт + 60

Calculate_if сложность=3 and опыт>250 Выч_опыт=опыт + 90

Calculate_if сложность=3 Выч_опыт=опыт + 75

$End


$function Less : integer

$type = algorithmic

$parameters

Lhs : integer

Rhs : integer

$body

calculate_if Lhs < Rhs

Less = 1

Less = 0

$end


$function Cond : integer

$type = algorithmic

$parameters

Condition : integer

ValTrue : integer

ValFalse : integer

$body

calculate_if Condition = 1

Cond = ValTrue

Cond = ValFalse

$end


      1. Объект кадра


$Frame Кадр_1

$Back_picture = <255 255 255 > fon

Show

bitmap [160, 120, ya, yamask]

bitmap [320, 120, ya, yamask]

bitmap [480, 120, ya, yamask]

{вторая строка}

bitmap [160, 240, ya, yamask]

bitmap [320, 240, ya, yamask]

bitmap [480, 240, ya, yamask]

{третья строка}

bitmap [160, 360, ya, yamask]

bitmap [320, 360, ya, yamask]

bitmap [480, 360, ya, yamask]

{оформление табло}

text [30, 120, 100, 15, transparent, <0 0 0 >, <'Легкие']

text [30, 160, 100, 15, transparent, <0 0 0 >, <'1 2 3']

text [30, 240, 100, 15, transparent, <0 0 0 >, <'Средние']

text [30, 280, 100, 15, transparent, <0 0 0 >, <'4 5 6']

text [30, 360, 100, 15, transparent, <0 0 0 >, <'Тяжелые']

text [30, 400, 100, 15, transparent, <0 0 0 >, <'7 8 9']

text [615, 85, 250, 15, transparent, <0 0 0>, <'опыт']

text [700, 85, 100, 15, transparent, <0 0 0>, >Грузчик_1.опыт]

text [615, 105, 250, 15, transparent, <0 0 0>, <'количество']

text [700, 105, 100, 15, transparent, <0 0 0>, >Грузчик_1.количество]

{если грузит}

Show_if Ящик_1.состояние = занят

bitmap [160, 120, rab, rabmask]

Show_if Ящик_2.состояние = занят

bitmap [320, 120, rab, rabmask]

Show_if Ящик_3.состояние = занят

bitmap [480, 120, rab, rabmask]

Show_if Ящик_4.состояние = занят

bitmap [160, 240, rab, rabmask]

Show_if Ящик_5.состояние = занят

bitmap [320, 240, rab, rabmask]

Show_if Ящик_6.состояние = занят

bitmap [480, 240, rab, rabmask]

Show_if Ящик_7.состояние = занят

bitmap [160, 360, rab, rabmask]

Show_if Ящик_8.состояние = занят

bitmap [320, 360, rab, rabmask]

Show_if Ящик_9.состояние = занят

bitmap [480, 360, rab, rabmask]

{если уже выгрузил}

Show_if Ящик_1.состояние = выгружен

bitmap [160, 120, pusto]

Show_if Ящик_2.состояние = выгружен

bitmap [320, 120, pusto]

Show_if Ящик_3.состояние = выгружен

bitmap [480, 120, pusto]

Show_if Ящик_4.состояние = выгружен

bitmap [160, 240, pusto]

Show_if Ящик_5.состояние = выгружен

bitmap [320, 240, pusto]

Show_if Ящик_6.состояние = выгружен

bitmap [480, 240, pusto]

Show_if Ящик_7.состояние = выгружен

bitmap [160, 360, pusto]

Show_if Ящик_8.состояние = выгружен

bitmap [320, 360, pusto]

Show_if Ящик_9.состояние = выгружен

bitmap [480, 360, pusto]

{Табло времени}

Show_if Time_now < Time

text [615, 125, 250, 15, transparent, <0 0 0>, <'осталось времени']

text [690, 125, 100, 15, transparent, <0 0 0>, >Time-(Time_now)]

Show_if Time_now > Time

text [615, 125, 250, 15, transparent, <0 0 0>, <'Осталось времени']

text [650, 125, 100, 15, transparent, <0 0 0>, >0]

$End


      1. Образцы операций.


// Проверка состояния игры.

$pattern ActionTimer : irregular_event

$relevant_resources

thisTimer : ObjTimer keep

$time = 0.01

$body

thisTimer

convert_event

CurTime set Cond( Less(thisTimer.CurTime, 1000.0), thisTimer.CurTime + 1, 0 )

$end


$pattern ActionCheckPlayer : rule

$relevant_resources

theGame : ClassGameState keep

$body

theGame

choice from

Грузчик_1.количество > 90

first

convert_rule

Turn set 2

$end


$Pattern ActionWaiting : rule

$relevant_resources

theGame : ClassGameState keep

$body

theGame

choice from

theGame.Turn = 1

first

convert_rule

Turn set 0

$end



$Pattern Образец_Выгрузка : keyboard trace

$Parameters

_param : such_as Ящики.номер

$Relevant_resources

_ящик : Ящики keep keep

_грузчик : Грузчик keep keep

theGame : ClassGameState keep NoChange

$Time = Рандом2(Выч_Сложности(_ящик.сложность, _грузчик.опыт), Выч_Сложности2(_ящик.сложность, _грузчик.опыт))

$Body


_ящик

Choice from _ящик.состояние = свободен and _ящик.номер = _param

first

Convert_begin

состояние set занят

Convert_end

состояние set выгружен

_грузчик

Choice from _грузчик.состояние_грузчика = свободен

first

Convert_begin

состояние_грузчика set работает

Convert_end

количество set _грузчик.количество + Выч_количество(_ящик.сложность)

опыт set Выч_опыт(_ящик.сложность, _грузчик.опыт)

состояние_грузчика set свободен

theGame

choice from theGame.Turn = 0

convert_begin

Turn set 1 $End


3


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

Файл
136430.rtf
21877-1.rtf
159686.rtf
162916.rtf
42251.rtf




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