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

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

МЭИ







Отчет

по лабораторной работе № 3

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



по курсу:

«Теория принятия решений»

















выполнил студент

группы А-13-05

Жебет Алексей

Оглавление:

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

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

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

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

Ресурсы 4

Операции 5

Выполнение 5

Функции 5

Описание графики 6

Интерфейс 9

Статистика 10

Приложение 10


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





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

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

Имеется погрузчик, который ожидает багаж возле ленты:

Время появления сумки на ленте выбирается случайно, из интервала 0.005-0.02 ч. После появления сумки на ленте, погрузчик перекладывает её себе в кузов, на это уходит 0.02ч. и по окончании процесса погрузки ожидает следующую сумку, затем повторяет процесс погрузки, и так пока не заполнится кузов. По заполнению кузова погрузчик отправляется к самолету, и тратит на это (0.02 + 0.005 * кол-во сумок в кузове), тем самым учитывается вес багажа.

Находясь возле самолета, погрузчик перекладывает сумки из кузова в багажное отделение самолета, тратя на это по 0.015ч. на каждую сумку. Затем, с уже пустым кузовом он отправляется к ленте.

Следует заметить, что в модели предусмотрена возможность динамической смены погрузчиков, на погрузчики других объемов: 1, 2, 3, 4 сумки.

Погрузчик прекращает загружать самолет, когда в багажнике самолета не останется места для сумок.

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



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

В модели используется ресурс ПогрузчикС, и его тип- Погрузчик.

$Resource_type погрузчик : permanent

$Parameters

объём_багажника: integer [0..4] = 4

сумки_в_багажнике: integer [0..4] = 0

место_погрузчика : (на_ленте, самолета) = на_ленте

сумка_на_ленте: integer

сумок_в_самолете: integer=0

идёт_есть_сумка: integer[0..1]=0

идёт_разгрузка: integer[0..1]=0

идёт_укладка: integer[0..1]=0

погрузчик_идёт_самолетой: integer[0..1]=0

погрузчик_идёт_на_ленту: integer[0..1]=0

$End





Ресурсы

В модели используется единственный ресурс, который включает в себя все данные о состоянии погрузчика и погрузки в целом, и имеет тип погрузчик


$Resources

погрузчикС: погрузчик trace * * * 1 * * * * * *



$End



Операции

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

$Operations

есть_сумка : О_есть_сумки

добавление_в_багажнико : о_добавления_в_багажнико

погрузчик_идет_самолету : о_погрузчик_идет_самолету

выгрузка_сумки : о_выгрузка_сумки

погрузчик_идет_на_ленту : о_погрузчик_идет_на_ленту

новый_объём_1 : о_смена_объёма_багажника '1' 1

новый_объём_2 : о_смена_объёма_багажника '2' 2

новый_объём_3 : о_смена_объёма_багажника '3' 3

новый_объём_4 : о_смена_объёма_багажника '4' 4

$End

Выполнение

Model_name =loader

\\загрузка

Resource_file =loader

OprIev_file =loader

Statistic_file =loader

Results_file =loader

Trace_file =loader

Frame_file =loader

Frame_number =1

Show_mode = Animation

Show_rate = 50.0

\\ условие выхода и выход

Terminate_if погрузчикС.сумк_в_самолете > объём_багсама- погрузчикС.объём_багажника

Функции

FUN

$Constant

объём_багсама : integer = 32 \\ объем багажника самолета

$End

$Sequence Интервал_сумки : real \\ интервал появления сумки на ленте

$Type = uniform 154895

$End

Описание графики



\\ $Frame <имя_кадра>

\\ [ Show_if <условие_показа_кадра> ]

\\ $Back_picture = <описание_фоновой_картинки>

\\ [ <описание_элементов_отображения> ]

\\ $End


$Frame Кадр1

$Back_picture = <100 100 100> fon

Show

//bitmap [0, 176, q ,w]



Show_if погрузчикС.место_погрузчика = на_ленте

bitmap [150, 340, loader,loaderm]



Show_if погрузчикС.место_погрузчика = самолета

bitmap [350, 340, loader,loaderm]



Show_if погрузчикС.сумкы_в_багажнике = 0 and погрузчикС.место_погрузчика = на_ленте

bitmap [15, 290, loadbasket,loadbasketf]

Show_if погрузчикС.сумкы_в_багажнике = 1 and погрузчикС.место_погрузчика = на_ленте

bitmap [15, 290, loadbasket1,loadbasketf]

Show_if погрузчикС.сумкы_в_багажнике = 2 and погрузчикС.место_погрузчика = на_ленте

bitmap [15, 290, loadbasket2,loadbasketf]

Show_if погрузчикС.сумкы_в_багажнике = 3 and погрузчикС.место_погрузчика = на_ленте

bitmap [15, 290, loadbasket3,loadbasketf]

Show_if погрузчикС.сумкы_в_багажнике = 4 and погрузчикС.место_погрузчика = на_ленте

bitmap [15, 290, loadbasket4,loadbasketf]

Show_if погрузчикС.сумкы_в_багажнике = 0 and погрузчикС.место_погрузчика = самолета

bitmap [500, 290, loadbasket,loadbasketf]

Show_if погрузчикС.сумкы_в_багажнике = 1 and погрузчикС.место_погрузчика = самолета

bitmap [500, 290, loadbasket1,loadbasketf]

Show_if погрузчикС.сумкы_в_багажнике = 2 and погрузчикС.место_погрузчика = самолета

bitmap [500, 290, loadbasket2,loadbasketf]

Show_if погрузчикС.сумкы_в_багажнике = 3 and погрузчикС.место_погрузчика = самолета

bitmap [500, 290, loadbasket3,loadbasketf]

Show_if погрузчикС.сумкы_в_багажнике = 4 and погрузчикС.место_погрузчика = самолета

bitmap [500, 290, loadbasket4,loadbasketf]



Show_if погрузчикС.сумка_на_ленте = 0 and погрузчикС.место_погрузчика = на_ленте

bitmap [20, 15, ud_p,udf]

Show_if погрузчикС.сумка_на_ленте = 1 and погрузчикС.место_погрузчика = на_ленте

bitmap [20, 15, ud_sr,udf]

Show_if погрузчикС.погрузчик_идёт_самолетой = 1

bitmap [300, 195, str_plane,str_f]

Show_if погрузчикС.погрузчик_идёт_на_ленту = 1

bitmap [220, 195, str_band,str_f]



Show_if погрузчикС.идёт_укладка = 1

bitmap [100, 200, str_in,bagstr_f]

Show_if погрузчикС.идёт_разгрузка = 1

bitmap [450, 230, str_out,bagstr_f]





Show_if погрузчикС.идёт_есть_сумка = 1

text [ 175,24, 100, 20, <0 0 0>, <0 255 0>, 'NO BAG' ]

Show_if погрузчикС.сумка_на_ленте = 1

text [ 175,24, 200, 20, <0 0 0>, <0 255 0>, 'BAG ON BAND' ]



Show_if погрузчикС.идёт_разгрузка = 1

text [ 175,24, 200, 20, <0 0 0>, <0 255 0>, 'LOADIN IN THE PLANE' ]



Show_if погрузчикС.погрузчик_идёт_самолетой = 1

text [ 175,24, 200, 20, <0 0 0>, <0 255 0>, 'GO TO THE PLANE' ]



Show_if погрузчикС.погрузчик_идёт_на_ленту = 1

text [ 175,24, 200, 20, <0 0 0>, <0 255 0>, 'GO TO THE BAND' ]



Show_if погрузчикС.сумк_в_самолете >= 0

text [ 490,239, 120, 20, <0 0 0>, <0 255 0>, 'BAGS ON BOARD' ]

Show_if погрузчикС.сумк_в_самолете >= 0

text [ 610,239, 120, 20, <0 0 0>, <0 255 0>, погрузчикС.сумк_в_самолете]

Show_if погрузчикС.сумк_в_самолете >= 0

text [ 520,260, 30, 20, <0 0 0>, <0 255 0>, 'OF']

Show_if погрузчикС.сумк_в_самолете >= 0

text [ 550,260, 40, 20, <0 0 0>, <0 255 0>, объём_багсама]

Show_if погрузчикС.место_погрузчика = самолета

bitmap [470, 100, samolet,samoletf]



$End



Интерфейс

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


  1. Строка состояния

  2. Отображает процесс загрузки в кузов погрузчика

  3. Багажная лента (отображает присутствие сумки)

  4. Отображает занятость кузова погрузчика

  5. Отображает количество багажных мест в самолете (общее и занятое)

  6. Сам погрузчик


Клавиатура:

В процессе моделирования есть возможность менять объём кузова, путём нажатия на соответствующую цифру на клавиатуре в диапазоне 1-4


Статистика

время_на_поход_к_ленте FALSE 0 0 0 1.79769e+308 2.22507e-308

время_на_возвращение_самолетой FALSE 0 0 0 1.79769e+308 2.22507e-308

время_на_разгрузку FALSE 0 0 0 1.79769e+308 2.22507e-308

время_на_укладку TRUE 1 0.617973 0.0004 0.02 0.02

время_на_есть_сумку FALSE 1 0.382027 0.000152866 0.0123639 0.0123639

В результате изменения начальных значений генераторов случайных чисел результаты меняются незначительно.

Вывод: При использовании кузовов большего объёма, расход времени значительно сокращается

Приложение



//Обработчик появления сумки

$Pattern О_есть_сумки : operation

$Relevant_resources

_погрузчик : погрузчикС keep keep

$Time = Интервал_сумки(0.005, 0.02)

$Body

_погрузчик

Choice from _погрузчик.сумки_в_багажнике < _погрузчик.объём_багажника and

_погрузчик.сумка_на_ленте = 0 and

_погрузчик.место_погрузчика = на_ленте and

_погрузчик.идёт_есть_сумка = 0

first

Convert_begin {trace}

идёт_есть_сумка set 1

Convert_end {trace}

сумка_на_ленте set _погрузчик.сумка_на_ленте + 1

идёт_есть_сумка set 0

$End


\\ Добавляет сумку в багажник

$Pattern о_добавления_в_багажнико : operation

$Relevant_resources

_погрузчик : погрузчикС keep Keep

$Time = 0.02

$Body

_погрузчик

Choice from _погрузчик.сумкы_в_багажнике < _погрузчик.объём_багажника and

_погрузчик.сумка_на_ленте > 0 and

_погрузчик.место_погрузчика = на_ленте and

_погрузчик.идёт_укладка = 0

first

Convert_begin {trace}

идёт_укладка set 1

Convert_end

сумкы_в_багажнике set _погрузчик.сумкы_в_багажнике + 1

сумка_на_ленте set _погрузчик.сумка_на_ленте - 1

идёт_укладка set 0;

$End


\\ Переход погрузчика к самолету

$Pattern о_погрузчик_идет_самолетой : operation

$Relevant_resources

_погрузчик : погрузчикС keep Keep

$Time = 0.02 + 0.005 * _погрузчик.сумкы_в_багажнике

$Body

_погрузчик

Choice from _погрузчик.сумкы_в_багажнике = _погрузчик.объём_багажника and

_погрузчик.место_погрузчика = на_ленте and

_погрузчик.погрузчик_идёт_самолетой = 0

first

Convert_begin {trace}

погрузчик_идёт_самолетой set 1

Convert_end

место_погрузчика set самолета

погрузчик_идёт_самолетой set 0

$End


\\ Выгрузка сумок из багажника в багажное отделение самоолета

$Pattern о_выгрузка_сумкы : operation

$Relevant_resources

_погрузчик: погрузчикС keep Keep

$Time = 0.015

$Body

_погрузчик

Choice from _погрузчик.сумкы_в_багажнике > 0 and

_погрузчик.место_погрузчика = самолета and

_погрузчик.идёт_разгрузка=0

first

Convert_begin {trace}

идёт_разгрузка set 1

Convert_end

сумкы_в_багажнике set _погрузчик.сумкы_в_багажнике - 1

сумк_в_самолете set _погрузчик.сумк_в_самолете + 1

идёт_разгрузка set 0

$End


\\ Переход погрузчика к ленте

$Pattern о_погрузчик_идет_на_ленту : operation

$Relevant_resources

_погрузчик : погрузчикС keep Keep

$Time = 0.02

$Body

_погрузчик

Choice from _погрузчик.сумкы_в_багажнике = 0 and

_погрузчик.место_погрузчика = самолета and

_погрузчик.погрузчик_идёт_на_ленту = 0

first

Convert_begin {trace}

погрузчик_идёт_на_ленту set 1

Convert_end

место_погрузчика set на_ленте

погрузчик_идёт_на_ленту set 0

$End


\\ Изменение объема багажника

$Pattern о_смена_объёма_багажника : keyboard

$Parameters новый_объём : integer = 4

$Relevant_resources

_погрузчик : погрузчикС keep Keep

$Time = 0.0

$Body

_погрузчик

Choice from новый_объём<=4 and новый_объём>0

first

Convert_begin

объём_багажника set новый_объём

Convert_end

$End


13










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