Добавлен: 30.06.2023
Просмотров: 105
Скачиваний: 5
Введение
В данной курсовой работе будет построена и рассмотрена модель работы склада готовой продукции. Исходные данные для построения модели:
На склад готовой продукции предприятия каждые 5±2 мин поступают изделия типа А партиями по 500 штук и каждые 20±5 мин изделия типа Б партиями по 2000 штук. С интервалами 10±5 мин к складу подъезжают грузовики, в каждый из которых загружаются 1000 штук изделий типа А и Б. Погрузка начинается, если на складе присутствуют в нужном количестве изделия обоих типов. На стоянке у склада могут находиться одновременно не более трех грузовиков, включая грузовик, стоящий под погрузкой. Грузовики, заставшие стоянку занятой, уезжают порожними.
Необходимо смоделировать работу склада в течение времени, достаточного для загрузки 50 грузовиков, и определить:
– число грузовиков, уехавших без груза,
– среднее число хранящихся на складе изделий типа А,
– среднее число хранящихся на складе изделий типа Б.
Моделирование систем работы складов является актуальной задачей при данной экономической ситуации, так как это позволяет сымитировать и проанализировать любой, какой бы сложности не был объект, и при необходимости внести улучшения в существующую работу данного предприятия.
Глава 1. Выбор метода
При построении данной модели возможно применение нескольких методов, таких как аналитическое и имитационное моделирование.
Аналитическое моделирование - математический прием исследования систем, который позволяет получать точные решения.
При решении данным методом формулируются математические законы, связывающие объекты системы. Решением уравнений получают теоретические результаты, проверяемые в дальнейшем на адекватность.
Достоинством аналитического моделирования является многократность использования для выявления общих теоретических закономерностей простых линейных цепей, систем и устройств.
Недостатком метода является то, что по мере усложнения воздействий на модель и увеличения порядка и числа уравнений состояния, исследование аналитическими методами наталкивается на трудности, связанные с чрезмерно громоздкими, сложными и трудно осмысляемыми выражениями, то есть этот метод идеален только для сравнительно простых систем. Так же невозможно создать аналитическую модель, если рассматривать поведение какой-либо системы во времени или если в системе присутствуют такие параметры, как время, нелинейности, причинные связи, случайные переменные.
Имитационное моделирование – это вид математического моделирования, реализуемого с помощью набора специальных имитирующих компьютерных программ и технологий программирования
(А.А. Емельянов, Е.А. Власова, Р.В. Дума; Под ред. А.А. Емельянова. Имитационное моделирование экономических процессов: Учеб. пособие - М.: Финансы и статистика, 2002. - 368 с.- С. 5).
Имитационное моделирование включает в себя два этапа: конструирование модели и постановка экспериментов.
Достоинством имитационного моделирования является реализация сложных систем без возможности экспериментировать с физическими объектами, затрачивая минимум средств. Так же достоинством является то, что метод позволяет имитировать поведение системы во времени, при этом моделируя систему с медленной изменчивостью или систему с быстропротекающими процессами, время можно замедлять или ускорять.
Исходя из условий задачи данного курсового проекта, я буду использовать метод имитационного моделирования. При решении аналитическим методом условия придется упростить, что в свою очередь повлияет на точность полученных результатов.
Глава 2. Имитационная модель
Решая поставленную задачу по средствам имитационного моделирования нет смысла делать какие-либо допущения, так как это приведет к понижению точности результатов.
Для автоматизации составления описания модели и получения на его основе исходного текста программной модели в моделирующей системе Pigrim предусмотрен специальный конструктор Gem (Прокимнов Н.Н. Handbook по дисциплине «Математическое моделирование», Московский финансово-промышленный университет «Университет», 2014.). Данный конструктор значительно облегчает работу при создании модели, так как для пользователя не надо обладать глубокими познаниями в программировании, а достаточно с помощью конструктора построить граф модель, описать все присутствующие в ней узлы, а конструктор сам сгенерирует программу на C++, используемую нами в дальнейшем. Граф модель для решения поставленной задачи приведена на рисунке 1.
Рисунок 1
После размещения всех узлов и связей между ними, необходимо провести инициализацию модели. Под инициализацией модели понимается установка параметров моделирования. С помощью инструмента ModBeg зададим название модели и время моделирования. Так как в нашей задаче нет определенного времени, а есть условие «смоделировать работу склада в течение времени, достаточного для загрузки 50 грузовиков», то пишем в строке время значение, которое превысит время погрузки 50 грузовиков, а остановку моделирования будем осуществлять программно, по событию, с помощью функции interrupt(), фиксируя при этом время необходимое для погрузки и все остальные данные.
В инструменте ModEnd оставляем значения по умолчанию и приступаем к определению переменных. Добавляем следующие переменные:
- counttovarA типа int и присваиваем значение 0, для подсчета количества изделий типа А, поступающих на склад;
- counttovarB типа int и присваиваем значение 0, для подсчета количества изделий типа Б, поступающих на склад;
- countcar типа int и присваиваем значение 0, для подсчета количества грузовиков, находящихся у склада;
- countincar типа int и присваиваем значение 0, для подсчета количества погрузок.
Переходим к описанию узлов. Три узла ag (AG) применяются для создания транзактов, имитирующих поступление изделий одного и второго типов на склад и прибытие грузовиков. В них мы заполняем значения интервала времени генерации транзактов и устанавливаем приоритет.
Два узла term (T) служат для фиксации значений уехавших грузовиков и произведенных погрузок. Для нашего примера в узле 111 никаких дополнительных настроек не требуется, а в узле 110 напишем код C++, в соответствии с которым будет отмечаться каждая погрузка, а когда это число достигнет значения 50, то произойдет остановка процесса моделирования.
Узел key (K), номер 106, применен для контроля количества грузовиков находящихся у склада. Если переменная countcar равна трем, то транзакт переходит в узел term, отмечая этим уехавший грузовик, если переменная countcar меньше 3, то транзакт проходит в узел 107, при этом к переменной прибавляется единица.
Узлы queue (Q), номер 104 и 105 фиксируют поступление изделий соответствующих типов и передают все на склад. Все поставка количественно приравнивается к числовому значению и записываются в переменных counttovarA и counttovarB.
Узлы queue (Q), номер 107, имитирует необходим для фиксации в очереди прибывших грузовиков на погрузку и обработку условий, при которых начинается погрузка, т.е. присутствие обоих типов изделий в количестве не менее 1000 штук и присутствие грузовика на стоянке. Если все условия выполняются, то выдается команда на открытие узла key (K), номер 109, и транзакт проходит в узел term (T), номер 110, что и является погрузкой грузовика. Так же в узле key (K), номер 109, отнимается погруженное количество изделий и грузовик, в который произведена погрузка, и еще раз проверяются условия. Если одного из типов изделий не хватает в нужном количестве, либо нет грузовика на стоянке, то вырабатывается команда на закрытие узла номер 109.
Генерируем в конструкторе Gem C++ файл, в котором и будет содержаться текст программной модели для дальнейшей компиляции в Visual C++. Исходный текст программной модели:
#include <Pilgrim.h>
forward
{
int fw;
int counttovarA=0;
int counttovarB=0;
int countcar=0;
int countincar=0;
modbeg("Склад готовой продукции", 112, 1000, (long)time(NULL), none, none, none,none, 2);
ag("Изделия А", 101, 1, norm, 5, 2, none, 104);
ag("Изделия Б", 102, 1, norm, 20, 5, none, 105);
ag("Грузовики", 103, 2, norm, 10, 5, none, 106);
network(dummy, dummy)
{
top(104):
queue("Кол-во изделийА", none, 107);
clcode{
counttovarA=counttovarA+500;
}
place;
top(105):
queue("Кол-во изделийБ", none, 107);
clcode{
counttovarB=counttovarB+2000;
}
place;
top(106):
if( countcar>=3 )
{
fw=111;
}
else
{
countcar=countcar+1;
fw=107;
}
key("Ограничение кол-ва грузовиков", fw);
clcode{
}
place;
top(107):
if ((counttovarA>=1000) && (counttovarB>=1000) && (countcar>0))
{
rels (109);
}
queue("Склад", prty, 109);
place;
top(109):
key("Разрешение на погрузку", 110);
clcode{
countcar=countcar-1;
counttovarA=counttovarA-1000;
counttovarB=counttovarB-1000;
if ((counttovarA<1000) || (counttovarB<1000) || (countcar==0))
{
hold (109);
}
}
place;
top(110):
term("Погрузка");
clcode{
countincar=countincar+1;
if (countincar==50)
{
interrupt();
}
}
place;
top(111):
term("Уехавшие грузовики");
place;
fault(123);
}
modend("pilgrim.rep", 1, 8, page);
return 0;
}
В интегрированной среде разработки приложений на языке C++, Visual C++, создадим проект, добавим файл модели, полученный в результате работы с конструктором Gem, скомпелируем файл EXE и проведем несколько экспериментов. Полученные значения:
- эксперимент 1
*---------------------------------------------------------------------------------------------*
| НАЗВАНИЕ МОДЕЛИ: Склад готовой п |
| ВРЕМЯ МОДЕЛИРОВАНИЯ: 532.12 Лист: 1 |
|---------------------------------------------------------------------------------------------|
| No | Наименование | Тип |Точ-|Загруз-| M [t] | C [t] |Счетчик|Кол.|Оcт.|Состояние узла|
|узла| узла | узла | ка |ка(%=),| среднее |квадрат |входов |кан.|тр. |в этот момент |
| | | | |Путь(км) время |коэф.вар.|и hold | | | |
| 101 Изделия А ag - - 5.32 0.14 101 1 1 открыт |
| 102 Изделия Б ag - - 20.31 0.08 27 1 1 открыт |
| 103 Грузовики ag - - 9.58 0.22 56 1 1 открыт |
| 104 Кол-во изделийА queue - - 0.00 49.35 100 1 0 открыт |
| 105 Кол-во изделийБ queue - - 0.00 0.00 26 1 0 открыт |
| 106 Ограничение кол key - %= 0.0 0.00 1.00 0 1 0 открыт |
| 107 Проверка queue - - 24.37 0.09 178 1 128 открыт |
| 109 Разрешение на п key - %= 98.9 11.70 0.26 46 1 1 закрыт |
| 110 Погрузка term - - 24.08 0.09 50 0 1 закрыт |
| 111 Уехавшие грузов term - - 0.00 0.00 3 0 0 открыт |
*---------------------------------------------------------------------------------------------*
- эксперимент 2
*---------------------------------------------------------------------------------------------*
| НАЗВАНИЕ МОДЕЛИ: Склад готовой п |
| ВРЕМЯ МОДЕЛИРОВАНИЯ: 540.01 Лист: 1 |
|---------------------------------------------------------------------------------------------|
| No | Наименование | Тип |Точ-|Загруз-| M [t] | C [t] |Счетчик|Кол.|Оcт.|Состояние узла|
|узла| узла | узла | ка |ка(%=),| среднее |квадрат |входов |кан.|тр. |в этот момент |
| | | | |Путь(км) время |коэф.вар.|и hold | | | |
| 101 Изделия А ag - - 4.86 0.14 112 1 1 открыт |
| 102 Изделия Б ag - - 17.89 0.06 30 1 1 открыт |
| 103 Грузовики ag - - 11.02 0.19 50 1 1 открыт |
| 104 Кол-во изделийА queue - - 0.00 139.23 111 1 0 открыт |
| 105 Кол-во изделийБ queue - - 0.00 0.00 29 1 0 открыт |
| 106 Ограничение кол key - %= 0.0 0.00 1.00 0 1 0 открыт |
| 107 Проверка queue - - 8.52 0.60 189 1 139 открыт |
| 109 Разрешение на п key - %= 99.4 11.67 0.16 47 1 1 закрыт |
| 110 Погрузка term - - 8.69 0.57 50 0 1 закрыт |
*---------------------------------------------------------------------------------------------*
- эксперимент 3
*---------------------------------------------------------------------------------------------*
| НАЗВАНИЕ МОДЕЛИ: Склад готовой п |
| ВРЕМЯ МОДЕЛИРОВАНИЯ: 515.93 Лист: 1 |
|---------------------------------------------------------------------------------------------|
| No | Наименование | Тип |Точ-|Загруз-| M [t] | C [t] |Счетчик|Кол.|Оcт.|Состояние узла|
|узла| узла | узла | ка |ка(%=),| среднее |квадрат |входов |кан.|тр. |в этот момент |
| | | | |Путь(км) время |коэф.вар.|и hold | | | |
| 101 Изделия А ag - - 4.90 0.17 106 1 1 открыт |
| 102 Изделия Б ag - - 17.89 0.06 29 1 1 открыт |
| 103 Грузовики ag - - 10.53 0.21 50 1 1 открыт |
| 104 Кол-во изделийА queue - - 0.00 248.15 105 1 0 открыт |
| 105 Кол-во изделийБ queue - - 0.00 7.76 28 1 0 открыт |
| 106 Ограничение кол key - %= 0.0 0.00 1.00 0 1 0 открыт |
| 107 Проверка queue - - 2.20 5.71 182 1 132 открыт |
| 109 Разрешение на п key - %= 98.7 10.39 0.20 50 1 1 закрыт |
| 110 Погрузка term - - 2.24 5.58 50 0 1 закрыт |
*---------------------------------------------------------------------------------------------*
- эксперимент 4
*---------------------------------------------------------------------------------------------*
| НАЗВАНИЕ МОДЕЛИ: Склад готовой п |
| ВРЕМЯ МОДЕЛИРОВАНИЯ: 499.09 Лист: 1 |
|---------------------------------------------------------------------------------------------|
| No | Наименование | Тип |Точ-|Загруз-| M [t] | C [t] |Счетчик|Кол.|Оcт.|Состояние узла|
|узла| узла | узла | ка |ка(%=),| среднее |квадрат |входов |кан.|тр. |в этот момент |
| | | | |Путь(км) время |коэф.вар.|и hold | | | |
| 101 Изделия А ag - - 4.49 0.17 111 1 1 открыт |
| 102 Изделия Б ag - - 19.71 0.09 26 1 1 открыт |
| 103 Грузовики ag - - 9.42 0.27 54 1 1 открыт |
| 104 Кол-во изделийА queue - - 0.00 999.99 110 1 0 открыт |
| 105 Кол-во изделийБ queue - - 0.00 0.00 25 1 0 открыт |
| 106 Ограничение кол key - %= 0.0 0.00 1.00 0 1 0 открыт |
| 107 Проверка queue - - 6.18 1.94 185 1 135 открыт |
| 109 Разрешение на п key - %= 99.9 13.11 0.30 39 1 1 закрыт |
| 110 Погрузка term - - 6.30 1.88 50 0 1 закрыт |
| 111 Уехавшие грузов term - - 0.00 0.19 3 0 0 открыт |
*---------------------------------------------------------------------------------------------*