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

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

Содержание


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

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

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

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

Ресурсы 3

Операции 4

Интерфейс 4

Выполнение 5

Статистика 5

Приложение 6













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

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

В ресторане есть две группы столов (с одним человеком и с двумя) и разным количеством денег. Официант должен как можно быстрее обходить столы, чтобы заработать больше денег.



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



В ресторане 12 столов с разным количеством людей (1 или 2 человека, задается в условии задачи, что столы чередуются). У каждого столика разное количество денег отведенное на чаевые официанту. Время обслуживания зависит от количества людей, сидящих за столиком. Официант ограничен временем работы, по его истечению обслуживание столиков прекращается.



































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

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



Ресурс «Столы» описывает столиков с посетителями:

- стадия обслуживания столика;

-деньги на чаевые (10, 20, 30 или любая другая сумма по желанию);

- количество людей, сидящих за столиком (1 или 2).

$Resource_type Столы: permanent

$Parameters

состояние_стола : (необслужен, обслуживается, обслужен) = необслужен

деньги : integer

клиент : integer

$End



Ресурс «Официанты» предназначен для описания официанта:

$Resource_type Официанты : permanent

$Parameters

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

чаевые : integer = 0

$End



Ресурсы



Используется 13 постоянных ресурсов: 12 столиков и 1 официант:

$Resources

стол_1 : Столы trace * 10 1

стол_2 : Столы trace * 10 2

стол_3 : Столы trace * 10 1

стол_4 : Столы trace * 20 2

стол_5 : Столы trace * 30 1

стол_6 : Столы trace * 20 2

стол_7 : Столы trace * 10 1

стол_8 : Столы trace * 30 2

стол_9 : Столы trace * 10 1

стол_10 : Столы trace * 20 2

стол_11 : Столы trace * 30 1

стол_12 : Столы trace * 20 2

Официант_1 : Официанты trace * *

$End

Операции



В файле с операциями описана операция, которая будет регулировать скорость обслуживания официантом столиков.

$Operations

Работа : Образец_Работа

$End






Интерфейс





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



Цифрами обозначено количество чаевых, которое должен получить официант при обслуживании столика.









Выполнение



Model_name = My


Resource_file = my

OprIev_file = my

Statistic_file = my

Results_file = my

Trace_file = my

Frame_file = my

Frame_number = 1

Show_mode = Animation

Show_rate = 30000.0


Terminate_if Time_now >= 1000.0



Статистика



В ходе тестирования программы было рассмотрено три случайных версии:


$Sequence Рандом : real

$Type = uniform 123456789

$End


$Sequence Рандом1 : real

$Type = uniform 1345785

$End


$Sequence Рандом2 : real

$Type = uniform 112334111455664321113

$End


В первом случае выигрыш был 130.

Второй случай: 190

Третий случай: 140

Вывод: Видно, что оптимальный вариант №2, поскольку минимизировано время обслуживания столиков.



Приложение

FUN


$Constant

X_1 : real = 240.0 {время}

$End


$Function Проверка_официанта :such_as Официанты.состояние_официанта

$Type = algorithmic

$Parameters

время : real

$Body

Calculate_if время

Calculate_if время>X_1 Проверка_официанта=закончил

$End


$Sequence Рандом1 : real

$Type = uniform 1345785

$End


$Sequence Рандом2 : real

$Type = uniform 112334111455664321113

$End


$Sequence Рандом : real

$Type = uniform 123456789

$End


$Function Выч_Время :real

$Type = algorithmic

$Parameters

клиент : integer

$Body

Calculate_if клиент=1 Выч_Время=30.0

Calculate_if клиент=2 Выч_Время=60.0

$End



$Function Выч_Время2 :real

$Type = algorithmic

$Parameters

клиент : integer

$Body

Calculate_if клиент=1 Выч_Время2=10.0

Calculate_if клиент=2 Выч_Время2=20.0

$End

PAT


$Pattern Образец_Работа : operation trace

$Relevant_resources

_стол : Столы keep keep

_Официант : Официант_1 Keep Keep

$Time=Рандом2(Выч_Время(_стол.клиент), Выч_Время2(_стол.клиент))

$Body

_Официант


Choice from _Официант.состояние_официанта = свободен

first

Convert_begin

состояние_официанта set занят

Convert_end

чаевые set _Официант.чаевые + _стол.деньги

состояние_официанта set Проверка_официанта(Time_now)

_стол

Choice from _стол.состояние_стола = необслужен

first

Convert_begin

состояние_стола set обслуживается

Convert_end

состояние_стола set обслужен


$End



FRM

$Frame Кадр_1

$Back_picture = <255 255 255 > bg

Show



bitmap [20, 90, sc, scm]

bitmap [120, 90, sc2, sc2m]

bitmap [220, 90, sc, scm]

bitmap [320, 90, sc2, sc2m]

bitmap [420, 90, sc, scm]

bitmap [520, 90, sc2, sc2m]

bitmap [20, 290, sc, scm]

bitmap [120, 290, sc2, sc2m]

bitmap [220, 290, sc, scm]

bitmap [320, 290, sc2, sc2m]

bitmap [420, 290, sc, scm]

bitmap [520, 290, sc2, sc2m]

text [620, 105, 250, 15, transparent, <0 0 0>, <'Чаевые']

text [600, 105, 100, 15, transparent, <0 0 0>, >Официант_1.чаевые]

text [-60, 100, 100, 15, transparent, <0 0 0>, >стол_1.деньги]

text [ 40, 100, 100, 15, transparent, <0 0 0>, >стол_2.деньги]

text [140, 100, 100, 15, transparent, <0 0 0>, >стол_3.деньги]

text [240, 100, 100, 15, transparent, <0 0 0>, >стол_4.деньги]

text [340, 100, 100, 15, transparent, <0 0 0>, >стол_5.деньги]

text [440, 100, 100, 15, transparent, <0 0 0>, >стол_6.деньги]

text [-60, 300, 100, 15, transparent, <0 0 0>, >стол_7.деньги]

text [ 40, 300, 100, 15, transparent, <0 0 0>, >стол_8.деньги]

text [140, 300, 100, 15, transparent, <0 0 0>, >стол_9.деньги]

text [240, 300, 100, 15, transparent, <0 0 0>, >стол_10.деньги]

text [340, 300, 100, 15, transparent, <0 0 0>, >стол_11.деньги]

text [440, 300, 100, 15, transparent, <0 0 0>, >стол_12.деньги]

Show_if стол_1.состояние_стола = обслуживается

bitmap [20, 90, vr, vrm]

Show_if стол_2.состояние_стола = обслуживается

bitmap [120, 90, vr, vrm]

Show_if стол_3.состояние_стола = обслуживается

bitmap [220, 90, vr, vrm]

Show_if стол_4.состояние_стола = обслуживается

bitmap [320, 90, vr, vrm]

Show_if стол_5.состояние_стола = обслуживается

bitmap [420, 90, vr, vrm]

Show_if стол_6.состояние_стола = обслуживается

bitmap [520, 90, vr, vrm]

Show_if стол_7.состояние_стола = обслуживается

bitmap [20, 290, vr, vrm]

Show_if стол_8.состояние_стола = обслуживается

bitmap [120, 290, vr, vrm]

Show_if стол_9.состояние_стола = обслуживается

bitmap [220, 290, vr, vrm]

Show_if стол_10.состояние_стола = обслуживается

bitmap [320, 290, vr, vrm]

Show_if стол_11.состояние_стола = обслуживается

bitmap [420, 290, vr, vrm]

Show_if стол_12.состояние_стола = обслуживается

bitmap [520, 290, vr, vrm]

Show_if стол_1.состояние_стола = обслужен

bitmap [20, 90, so, som]

Show_if стол_2.состояние_стола = обслужен

bitmap [120, 90, so, som]

Show_if стол_3.состояние_стола = обслужен

bitmap [220, 90, so, som]

Show_if стол_4.состояние_стола = обслужен

bitmap [320, 90, so, som]

Show_if стол_5.состояние_стола = обслужен

bitmap [420, 90, so, som]

Show_if стол_6.состояние_стола = обслужен

bitmap [520, 90, so, som]

Show_if стол_7.состояние_стола = обслужен

bitmap [20, 290, so, som]

Show_if стол_8.состояние_стола = обслужен

bitmap [120, 290, so, som]

Show_if стол_9.состояние_стола = обслужен

bitmap [220, 290, so, som]

Show_if стол_10.состояние_стола = обслужен

bitmap [320, 290, so, som]

Show_if стол_11.состояние_стола = обслужен

bitmap [420, 290, so, som]

Show_if стол_12.состояние_стола = обслужен

bitmap [520, 290, so, som]

Show_if Официант_1.состояние_официанта = закончил

bitmap [621, 258, sc, scm]

text [583, 355, 100, 15, transparent, <0 0 0>, >Официант_1.состояние_официанта]


Show_if Time_now < X_1

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

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

Show_if Time_now > X_1

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

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

$End


PMD


$Results

Деньги : get_value Официант_1.чаевые

состояние_официанта : get_value Официант_1.состояние_официанта

$End

8







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