Коллеги, спасибо за очень информативный и полезный курс. Прошёл три лекции. Столкнулся с проблемой, что обе модели не могут закончить расчёт по причине ограничения бесплатной версии "создано максимально допустимое число динамически создаваемых агентов (50000)". По скриншотам Лекции 2 видно, что да, модель создает гораздо больше 50000 агентов. В принципе, мне то и диплом не особо нужен. Но хотелось бы выполнить практические работы. Нет ли возможности откорректировать эту проблему? Или может я чего не так делаю? Еще раз спасибо за прекрасный курс! |
Модель процесса изготовления в цехе деталей
Построение событийной части модели
В событийную (функциональную) часть модели включим указанные ранее сегменты. Поскольку построение модели это итерационный процесс, то размещение сегментов и объектов AnyLogic будем корректировать до тех пор, пока не посчитаем достаточным их взаимное расположение для корректной с нашей точки зрения работы модели и её презентации.
Начнём с сегмента имитации процесса подготовки заготовки.
Подготовка заготовки
Данный сегмент предназначен для имитации поступления заготовки, ожидания в очереди, имитации непосредственно подготовки заготовки и отправки на выполнение первой операции.
- В Палитре выделите Презентация. Перетащите элемент Прямоугольник. На странице Местоположение и размер установите: X: 20, Y: 300, Ширина: 240, в поле Высота: 150.
- Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Подготовка заготовки (Рис. 2.8).
- В Палитре выделите Библиотека моделирования процессов. Перетащите объект source на диаграмму т Main и разместите в прямоугольнике с именем Подготовка заготовки.
- Для записи и хранения параметров детали в дополнительные поля заявок нужно создать нестандартный класс заявки. Создайте класс заявки Detail.
- В панели Проект Щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать Java класс.
- Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса Detail.
- В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
- Появится вторая страница Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
double n; double a; double Tn1;
Поле n будет использоваться для занесения номера выполняемой с деталью операции. Эти номера необходимы для определения операций, на которые нужно повторно отправить детали с пункта окончательного контроля. Поле a предназначено для занесения кода первого или повторного выполнения операций.
- Оставьте выбранными флажки Создать конструктор и Создать метод toString().
- Щёлкните кнопку Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
- Теперь нужно преобразовать Java класс в тип агента. Для этого щёлкните правой кнопкой мыши в панели Проект только что созданный Java класс и в контекстном меню выберите Преобразовать Java класс в тип агента.
- Появится окно c автоматически созданными параметрами нестандартного типа заявок Detail.
- Из Палитры Основная перетащите на сегмент Исходные данные элемент Переменная. На странице Основные панели Свойства дайте Имя: b, установите Тип: double.
- Выделите объект source. На странице Основные панели Свойства установите свойства согласно Рис. 2.9.
В коде, приведенном ниже, который вы ввели в поле свойства Действия При выходе:, используются данные созданных ранее двух массивов.
entity.n=uniform_pos(); if (entity.n <= верВарЗаг.get(1)) entity.Tn1=срВрПодгЗаг.get(1); else if (entity.n > верВарЗаг.get(1) && entity.n <= верВарЗаг.get(2)) entity.Tn1=срВрПодгЗаг.get(2); else if (entity.n > верВарЗаг.get(2) && entity.n <= верВарЗаг.get(3)) entity.Tn1=срВрПодгЗаг.get(3); else if (entity.n > верВарЗаг.get(3) && entity.n <= верВарЗаг.get(4)) entity.Tn1=срВрПодгЗаг.get(4); else if (entity.n > верВарЗаг.get(4) && entity.n <= верВарЗаг.get(5)) entity.Tn1=срВрПодгЗаг.get(5); else if (entity.n > верВарЗаг.get(5) && entity.n <=верВарЗаг.get(6)) entity.Tn1=срВрПодгЗаг.get(6);
- Выделите объект queue и на странице Основные панели Свойства установите свойства:
- Имя: очЗаг
- Тип заявки: Detail
- Максимальная вместимость: установить флажок.
- Выделите объект delay и на странице Основные панели Свойства установите свойства:
- Имя: подЗаг
- Тип заявки: Detail
- Тип: Определённое время
- Время задержки: exponential (1/entity.Tn1)
- Вместимость: 1
- Действия При выходе: entity.a = 1;
Сегменты Операция 1, Операция 2, Операция 3
Каждый из сегментов операций 1, 2 и 3 предназначен для имитации выполнения соответствующей операции, включающей ожидание в очереди, непосредственно выполнение операции, контроль её качества, отправку на пункт окончательного контроля в случае брака, приём на повторное выполнение операции и контроль.
- Из палитры Презентация Перетащите три элемента Прямоугольник так, как на Рис. 2.10. На странице Местоположение и размер панели Свойства введите: для первого прямоугольника X: 20, Y: 60; для второго - X: 280, Y: 60; для третьго - X: 530, Y: 60. Для всех Ширина: 240, Высота: 180.
- Перетащите три элемента text и на странице Основные панели Свойства в поле Текст: каждого из них введите Операция 1, Операция 2, Операция 3 соответственно (Рис. 2.10).
- Из Библиотеки моделирования процессов перетащите для каждого сегмента два объекта queue, два объекта delay и один объект selectOutput, разместите и соедините как на Рис. 2.10.
- Выделите поочередно объекты, начиная с объекта queue сегмента Операция 1, и на странице Основные панели Свойства установите свойства согласно Рис. 2.10 и Табл. 2.4.
На сегменте Операция 1 поясним принятые имена объектов: очОп1 - очередь на операцию 1; выпОп1 - имитация выполнения операции 1; очКонОп1 - очередь на контроль после операции 1; конОп11 - имитация контроля после операции 1; конОп12 - розыгрыш результата контроля.
Объект | Свойства | Значения |
---|---|---|
Сегмент Операция 1 | ||
queue | Имя | очОп1 |
Тип заявки | Detail | |
Максимальная вместимость | Установите флажок | |
delay | Имя | выпОп1 |
Тип заявки | Detail | |
Тип | Определённое время | |
Время задержки | exponential (1/T1) | |
Вместимость | 1 | |
queue1 | Имя | очКонОп1 |
Тип заявки | Detail | |
Максимальная вместимость | Установите флажок | |
delay1 | Имя | конОп11 |
Тип заявки | Detail | |
Тип | Определённое время | |
Время задержки | exponential (1/Tk1) | |
Вместимость | 1 | |
Действия При выходе | entity.n = 1; | |
selectOutput | Имя | конОп12 |
Тип заявки | Detail | |
Выход true выбирается | Заданной вероятностью | |
Вероятность | 1-q1 | |
Сегмент Операция 2 | ||
queue | Имя | очОп2 |
Тип заявки | Detail | |
Максимальная вместимость | Установите флажок | |
delay | Имя | выпОп2 |
Тип заявки | Detail | |
Тип | Определённое время | |
Время задержки | exponential (1/T2) | |
Вместимость | 1 | |
queue1 | Имя | очКонОп2 |
Тип заявки | Detail | |
Максимальная вместимость | Установите флажок | |
delay1 | Имя | конОп21 |
Тип заявки | Detail | |
Тип | Определённое время | |
Время задержки | exponential (1/Tk2) | |
Вместимость | 1 | |
Действия При выходе | entity.n = 2 | |
selectOutput | Имя | конОп22 |
Тип заявки | Detail | |
Выход true выбирается | Заданной вероятностью | |
Вероятность | 1-q2 | |
Сегмент Операция 3 | ||
queue | Имя | очОп3 |
Тип заявки | Detail | |
Максимальная вместимость | Установите флажок | |
delay | Имя | выпОп3 |
Тип заявки | Detail | |
Тип | Определённое время | |
Время задержки | exponential (1/T3) | |
Вместимость | 1 | |
queue1 | Имя | очКонОп3 |
Тип заявки | Detail |
Создание нового активного объекта
На Рис. 2.10 показаны четыре функциональных сегмента модели, которые построены с использованием 18 объектов AnyLogic. Если вы начнёте создавать очередной сегмент, то после перетаскивания второго объекта появится сообщение: Ограничение ознакомительной версии: нельзя создавать более 20 вложенных объектов. Поэтому остальные сегменты модели нам нужно разместить на втором активном объекте. Создайте этот объект.
- На панели Проекты Щёлкните правой кнопкой мыши Main, с которым вы работаете в данный момент, и выберите из контекстного меню Создать/Тип агента.
- Откроется окно Шаг 1. Создание нового типа агента.
- Оставьте Не использовать шаблоны типов агентов.
- Задайте в поле Имя нового агента: Kontrol.
- Если нужно, в поле Описание: введите описание сущности, моделируемой этим типом агента.
- Щёлкните кнопку Готово.
Создание экземпляра нового типа агента
Согласно логике процесса изготовления деталей надо после выполнения каждой из трёх операций в случае брака отправить забракованные детали на пункт окончательного контроля. С последнего получить и отправить детали на повторное выполнение тех операций, после которых они были забракованы. Кроме того, готовые детали необходимо передать на склад готовых деталей. Таким образом, для связи с активным объектом Main потребуются семь портов (3+3+1).
Создайте экземпляр нового типа агента Kontrol.
- Из Палитры Основная перетащите элемент Порт и разместите сверху в левом ряду (Рис. 2.8).
- На странице Основные панели Свойства имя port замените именем наОп1.
- Скопируйте элемент Порт с именем наОп1.
- Вставьте два элемента Порт (см. Рис. 2.11). При вставке последовательно будут изменяться их имена: наОп2, наОп3.
- Из Палитры Основная перетащите элемент Порт и разместите сверху в правом ряду (см. Рис. 2.11).
- На странице Основные панели Свойства имя port замените именем брОп1 (идентификатор означает, что через этот порт отправляются бракованные детали после операции 1 на пункт окончательного контроля).
- Скопируйте элемент Порт с именем брОп1.
- Вставьте два элемента Порт (см. Рис. 2.11).
- Из Палитры Основная перетащите элемент Порт и разместите внизу в правом ряду (см. Рис. 2.11).
- На странице Основные панели Свойства имя port замените именем готДет.
- По мере размещения элементов Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
- Возвратитесь на Main. На панели Проект выделите Kontrol, перетащите на тип агента Main экземпляр типа агента Kontrol, разместите как на Рис. 2.12.
- Экземпляр нового типа агента Kontrol создан. На странице Основные панели Свойства уберите флажок Отображать имя и в поле Имя: введите на_контроль.
- В Палитре выделите Презентация. Перетащите элемент Прямоугольник и разместите как на Рис. 2.12. На странице Местоположение и размер панели Свойства введите: X: 570, Y: 270, Ширина: 140, Высота: 220.
- Перетащите элемент text и на странице Основные панели Свойства в поле Текст введите На окончательный контроль.
Теперь для движения заявок-деталей в модели необходимо надлежащим образом соединить входы и выходы объектов сегментов Операция 1, Операция 2 и Операция 3 с портами.
- Соедините выходы F (false) объектов конОп12, конОп22, конОп32 с портами брОп1, брОп2, брОп3 соответственно.
- Соедините порты наОп1, наОп2, наОп3 с входами объектов очОп1, очОп2, очОп3 соответственно.
- Соедините выход Т (true) объекта конОп32 сегмента Операция 3 с портом готДет.
На Рис. 2.12 вы видите ещё объекты. Перейдём к размещению их на агенте верхнего уровня Main.