AnyLogic
Развернуть
Размер шрифта

Склад

Storage in 2DСклад в графическом редакторе Storage in 3DСклад на 3D-анимации во время выполнения модели

Склад — это элемент разметки пространства, с помощью которого вы можете графически задать пространство склада, где агенты (материальные объекты) размещаются на стеллажах.

Один элемент Склад может содержать несколько стеллажей. На данный момент мы поддерживаем два способа размещения стеллажей на складе:

  • По отдельности — все стеллажи развернуты в одну сторону и с каждого проезда есть доступ только к одному стеллажу.

    Размещение стеллажей по отдельности

  • Спина к спине — стеллажи расположены попарно спиной друг к другу. Таким образом с каждого проезда есть доступ к двум стеллажам.

    Размещение стеллажей спина к спине

Каждый стеллаж состоит из ячеек. В одной ячейке хранится один агент (материальный объект). Ячейки внутри стеллажа образуют группы, которые определяют особенности заполнения стеллажа. Давайте рассмотрим разновидности группировки:

На примерах ниже изображен один стеллаж, который состоит из 2 секций и 5 полок. Глубина стеллажа — 5 ячеек.
Стеллаж с заполненным слотом Слот — один горизонтальный ряд ячеек, задающий глубину стеллажа. По умолчанию глубина слота в каждом стеллаже Склада — 1 ячейка.
Стеллаж с заполненной секцией Секция — один вертикальный ряд ячеек. Ширина стеллажа зависит от количества секций. По умолчанию каждый стеллаж Склада состоит из 5 секций.
Rack with one shelf filled Полка — несколько слотов, располагающихся друг за другом на одной высоте. Общая высота стеллажа зависит от количества полок. По умолчанию каждый стеллаж Склада содержит 1 полку.

В настоящий момент элемент Склад поддерживает следующие типы стеллажей:

  • Селективный — такой стеллаж наполняется секция за секцией. В каждой секции первым заполняется нижний слот, начиная с ячейки, находящейся на наибольшей глубине. Затем заполняется следующий слот по вертикали и так далее, пока секция не заполнится снизу доверху. Для этого типа стеллажей поддерживается метод LIFO: последний размещенный объект будет первым извлеченным.
  • Набивной — у такого стеллажа первыми наполняются самые глубокие ячейки на нижней полке в каждой секции, затем следующие по степени глубины, и так далее. Наполнение идет снизу вверх. Для этого типа стеллажей поддерживается метод LIFO: последний размещенный объект будет первым извлеченным.

Демонстрационная модель: Slotting Policies in Drive-in Storage

Склад может являться препятствием на пути пешеходов и транспортеров, перемещающихся в режиме произвольной навигации.

Создание склада

Есть два подхода к созданию склада: вы можете задать размеры составных элементов склада (стеллажей и секций) или задать количество стеллажей и секций.

Чтобы нарисовать склад на основании размеров

  1. Перетащите элемент Склад с палитры Разметка пространства в графический редактор.
  2. Задайте размеры составных элементов склада:
    • Задайте значение опций Кол-во стеллажей и Кол-во секций: вычисляется на основании размеров склада.
    • Задайте значения для свойств Глубина стеллажа, Ширина проезда и Ширина секции.
    • Задайте Кол-во ячеек в слоте.
    • Задайте значения для свойств Количество полок и Высота полки.
  3. Завершив настройку размеров отдельных элементов, задайте размеры самого склада, перетащив метку-манипулятор, находящуюся в нижнем правом углу элемента Склад в графическом редакторе. Количество стеллажей и секций будет увеличиваться/уменьшаться автоматически в соответствии с указанными размерами.

    Рисование склада на основании размеров

  4. В секции свойств Внешний вид вы можете изменить то, как выглядит ваш склад. Кроме того, вы можете настроить анимацию агентов (материальных объектов) внутри склада на запущенной модели, изменив значение свойства Анимация заполненных ячеек. При выборе значения подсветка (быстрый способ), ячейки, в которых размещены материальные объекты, будут просто подсвечиваться при запуске модели. Используйте этот вариант, если моделируете масштабные склады и нуждаетесь в хорошей производительности модели. Если производительность не является для вас ключевым фактором, выберите значение анимация агента: тогда выбранные фигуры анимации материальных объектов будут демонстрироваться внутри склада.
  5. Задайте ширину Области доступа в секции свойств Местоположение и размер. Область доступа — это пространство перед первым стеллажом склада. Любые относящиеся к сетям пути, проходящие через область доступа, могут использоваться транспортерами и ресурсами для движения к стеллажу.
  6. Завершив рисование склада, щелкните по кнопке Создать складскую сеть, чтобы при необходимости нарисовать пути внутри проездов склада.
    Не рекомендуется создавать складскую сеть до окончания рисования, так как сеть не будет автоматически подстраиваться под дальнейшие изменения в планировке и размерности склада. В случае модификации планировки, вам потребуется удалить имеющуюся сеть и создать новую с нуля.

Чтобы нарисовать склад на основании заданного количества стеллажей и секций

  1. Перетащите элемент Склад с палитры Разметка пространства в графический редактор.
  2. Задайте необходимые значения в полях Кол-во стеллажей и Кол-во секций.
  3. Задайте Кол-во ячеек в слоте.
  4. Задайте значения для свойств Количество полок и Высота полки.
  5. Задайте размеры самого склада, перетащив метку-манипулятор, находящуюся в нижнем правом углу элемента Склад в графическом редакторе. Размеры секций и проездов будут изменяться автоматически в соответствии с размером склада.

    Рисование склада на основании заданного вручную количества элементов

  6. Измените ширину проезда, если считаете нужным.
  7. Измените глубину стеллажа, если считаете нужным.
  8. В секции свойств Внешний вид вы можете изменить то, как выглядит ваш склад. Кроме того, вы можете настроить анимацию агентов (материальных объектов) внутри склада на запущенной модели, изменив значение свойства Анимация заполненных ячеек. При выборе значения подсветка (быстрый способ), ячейки, в которых размещены материальные объекты, будут просто подсвечиваться при запуске модели. Используйте этот вариант, если моделируете масштабные склады и нуждаетесь в хорошей производительности модели. Если производительность не является для вас ключевым фактором, выберите значение анимация агента: тогда выбранные фигуры анимации материальных объектов будут демонстрироваться внутри склада.
  9. Задайте ширину Области доступа в секции свойств Местоположение и размер. Область доступа — это пространство перед первым стеллажом склада. Любые относящиеся к сетям пути, проходящие через область доступа, могут использоваться транспортерами и ресурсами для движения к стеллажу.
  10. Завершив рисование склада, щелкните по кнопке Создать складскую сеть, чтобы при необходимости нарисовать пути внутри проездов склада.
    Не рекомендуется создавать складскую сеть до окончания рисования, так как сеть не будет автоматически подстраиваться под дальнейшие изменения в планировке и размерности склада. В случае модификации планировки, вам потребуется удалить имеющуюся сеть и создать новую с нуля.

Ячейка

Координаты каждой ячейки Склада — это набор индексов. Каждый из индексов соответствует одному из элементов склада: стеллажу, секции, полке, позиции самой ячейки. Для примера рассмотрим функцию getCell().

Предположим, у нас имеется Склад с именем storage, состоящий из 4 стеллажей. У каждого из этих стеллажей — по 5 секций и полок, а слоты состоят из 10 ячеек. Нам нужна ячейка, находящаяся на наибольшей глубине 3-й секции 4-го стеллажа. Поскольку подсчет индексов начинается с 0, нужно вызвать функцию storage.getCell(3, 2, 4, 9), в которой:

  • 3 — это индекс 4-го стеллажа
  • 2 — это индекс 3-й секции
  • 4 — индекс самой высокой (5-й из 5) полки
  • 9 — индекс самой глубокой (10-й из 10) ячейки

Блокирование ячеек

На складах могут быть пустые пространства, из-за которых нарушается симметричное расположение стеллажей внутри склада. Для моделирования таких пространств вы можете использовать специальные функции, блокирующие некоторые ячейки.

Через созданные таким образом пустóты, тем не менее, можно перемещать агентов (материальные объекты).

Перемещение агентов в контексте склада

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

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

Если вы создаете модель высокого уровня абстракции и не хотите описывать детально смоделированные процессы размещения и извлечения, то агенты (материальные объекты) могут прибывать на склад и перемещаться по нему самостоятельно.

Редактирование склада в графическом редакторе

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

Чтобы изменить ширину проездов

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

    Изменение ширины проездов в графическом редакторе

Чтобы изменить глубину стеллажей

  1. Передвиньте квадратную метку-манипулятор в задней части первого стеллажа склада, чтобы изменить глубину всех стеллажей.

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

Чтобы изменить площадь области доступа

  1. Передвиньте ромбическую метку-манипулятор на границе области доступа, чтобы изменить площадь этой области.

    Изменение площади области доступа в графическом редакторе

Свойства

Основные

Имя — Имя склада. Имя используется для идентификации и доступа к складу из кода и библиотечных блоков..

Исключить — Если опция выбрана, то склад будет исключен из модели.

Отображается на верхнем агенте — Если опция выбрана, то склад будет виден на презентации типа агента, в который будет вложен данный агент.

Блокировать — Если опция выбрана, то фигура будет считаться заблокированной и не будет реагировать на щелчки мыши. Таким образом, вы не сможете выбрать заблокированную фигуру в графическом редакторе до тех пор, пока вы не снимете с нее блокировку. Обычно это требуется, когда у вас есть какой-то фоновый рисунок, используемый как подложка для анимации, и вы хотите исключить возможность случайного редактирования этого фонового рисунка при рисовании фигур поверх него.

Видимость — Здесь указывается, будет ли фигура отображаться на анимации во время исполнения модели. Выберите да или нет, используя элемент управления. Если вам нужно, чтобы видимость динамически изменялась или зависела от каких-либо условий, вы можете указать здесь выражение, задающее видимость фигуры. Это выражение будет динамически вычисляться во время исполнения модели. Оно должно возвращать логическое (булево) значение. Фигура отображается в том случае, когда указанное выражение возвращает истинное значение, в противном случае фигура не видна.

Является препятствием — Если опция выбрана, этот склад будет служить препятствием для пешеходов и транспортеров, перемещающихся в режиме произвольной навигации.

Тип стеллажа — Тип стеллажа определяет, как именно агенты будут размещаться на хранение внутри склада. Доступны следующие варианты:

Селективный — такой стеллаж наполняется секция за секцией, с нижней полки и выше. Стартовой позицией считается ячейка, находящаяся на наибольшей глубине. Для этого типа стеллажей поддерживается метод LIFO: последний размещенный объект будет первым извлеченным. Захваченный ресурс или транспортер ожидает в проезде, пока не будет закончена процедура размещения объекта.
Набивной — у такого стеллажа первыми наполняются самые глубокие ячейки в каждой секции, затем следующие по степени глубины, и так далее, с нижней полки и выше. Для этого типа стеллажей поддерживается метод LIFO: последний размещенный объект будет первым извлеченным. Захваченный ресурс или транспортер подъезжает к ячейке, чтобы разместить объект.

Размещение стеллажей — Здесь вы можете выбрать, как именно будут расположены стеллажи на складе:

По отдельности — все стеллажи развернуты в одном направлении
Спина к спине — стеллажи расположены попарно спиной друг к другу

Глубина стеллажа — Здесь вы можете задать глубину отдельного стеллажа.

Кол-во стеллажей — Здесь вы можете указать, как задается количество стеллажей на вашем складе. Доступные опции:

задано явно — вы указываете Кол-во стеллажей в соответствующем поле свойств склада.
вычисляется на основании размеров склада — вы указываете размеры стеллажей, проездов и самого склада; после этого AnyLogic автоматически рассчитывает количество стеллажей внутри склада.

Ширина проезда — [Параметр виден, если Кол-во стеллажей: вычисляется на основании размеров склада] Здесь вы можете задать ширину отдельного проезда.

Кол-во стеллажей — [Параметр виден, если Кол-во стеллажей: Задано явно] Здесь вы можете задать, сколько всего стеллажей есть на складе.

Кол-во секций — Здесь вы можете указать, как задается количество секций на вашем складе. Доступные опции:

вычисляется на основании размеров склада — вы указываете размеры секций и склада; после этого AnyLogic автоматически рассчитывает количество секций в каждом стеллаже.
задано явно — вы указываете Кол-во секций в соответствующем поле свойств склада.

Ширина секции — [Параметр виден, если Кол-во секций: задано явно] Здесь вы можете задать ширину отдельной секции. Это значение используется при вычислении количества секций на стеллаж.

Кол-во секций — [Параметр виден, если Кол-во секций: вычисляется на основании размеров склада] Здесь вы можете задать, сколько секций есть у каждого стеллажа.

Создать складскую сеть — Щелкните по этой кнопке, чтобы нарисовать сеть путей и точечных узлов вдоль проездов склада и по его периметру. Транспортеры и агенты, использующие навигацию по заданному пути, смогут воспользоваться получившейся сетью для движения в контексте склада.

Стеллаж

Количество полок — Количество расположенных вертикально полок на каждом стеллаже.

Кол-во ячеек в слоте — Количество ячеек в глубину в каждом слоте.

Высота полки — Высота каждой полки.

Задать скорость внутри слота — Выберите эту опцию, чтобы задать скорость движения агента внутри слота. Если опция не выбрана, агент перемещается с собственной скоростью или со скоростью захваченного им ресурса.

Скорость внутри слота — [Параметр виден, если выбрана опция Задать скорость внутри слота] Скорость движения агента внутри слота.

Действия

При размещении агента — Код, который выполняется, когда агент (материальный объект) размещается в ячейке.

T agent — агент (материальный объект)
StorageCell cell — ячейка склада

При извлечении агента — Код, который выполняется, когда агент (материальный объект) извлекается из ячейки блоком Retrieve или в результате вызова функции склада retrieve().

T agent — агент (материальный объект)
StorageCell cell — ячейка склада
Внешний вид

Цвет полок — [Параметр виден, если Тип стеллажа: Селективный] цвет полок.

Цвет рамы — цвет рамы.

Анимация заполненных ячеек — Здесь вы можете указать, как агенты должны отображаться на складе во время запуска модели.

подсветка (быстрый способ) — анимация агентов не отображается. Ячейка заполняется цветом агента или комбинацией цветов расположенных вертикально агентов. Таким образом многоуровневые стеллажи отображаются более информативно, и анимация складов крупного масштаба функционирует более производительно. Вы можете задать цвет агента с помощью функции agent.setColor().
анимация агента — фигура анимации агента помещается в центр ячейки.

Рисовать стойки в 3D — [Параметр виден, если выбрана опция Отображать в: 2D и 3D или только в 3D] Отключите эту опцию, если не хотите, чтобы вертикальные элементы рамы отрисовывались в 3D-анимации. В этом случае на анимации видны только полки.

Кол-во секций между стойками — [Параметр виден, если выбрана опция Отображать в: 2D и 3D или только в 3D] Количество секций между вертикальными элементами рамы при их отрисовке в 3D-анимации. Не влияет на отображение 2D-анимации стеллажа.

Местоположение и размер

Уровень — уровень, на котором располагается склад.

X — X-координата склада (его верхнего левого угла).

Y — Y-координата склада (его верхнего левого угла).

Z — Z-координата склада. Располагается относительно Z-координаты уровня, на котором располагается склад.

Вращение — Угол вращения склада по часовой стрелки в проекции XY.

Длина склада — [Параметр виден, если Кол-во стеллажей: Задано явно] Длина стеллажа склада.

Ширина склада — [Параметр виден, если Кол-во секций: Задано явно] Ширина стеллажа склада.

Область доступа — Ширина прилежащей к стеллажам зоны, к которой могут вести пути сетей, доступные для перемещения агентов или транспортеров, использующих пути для навигации.

Специфические

Отображать в — Если выбрано В 2D и в 3D или Только в 3D, то будет создан трехмерный аналог двумерного склада. Тогда в режиме запуска модели двумерный склад будет отображаться там же, где он и была нарисована в графическом редакторе, а трехмерный будет виден в специальном элементе, предназначенном для просмотра трехмерной анимации — 3D окне.

Отображать имя — Если опция выбрана, то имя фигуры будет отображаться в графическом редакторе.

Функции

Основные
Функция Описание
Storage() Конструктор, который создает новый склад с параметрами по умолчанию. Вы можете задать значения параметрам с помощью кода перед инициализацией элементов разметки пространства.
Любые операции с ячейками следует выполнять после инициализации элементов разметки пространства.
RackUnitAggregator getStorageSystem() Возвращает систему складов, к которой принадлежит этот склад.
void setRackType(RackType type) Задает тип стеллажей: селективный или набивной.

type — тип стеллажей:
RACK_TYPE_DRIVE_IN(набивной)
RACK_TYPE_SELECTIVE(селективный)
RackPlacement getRackPlacement() Возвращает способ размещения стеллажей на данном складе. Допустимые значения:
RACK_PLACEMENT_BACK_TO_BACK — спина к спине
RACK_PLACEMENT_STAND_ALONE — по отдельности
void setRackPlacement(RackPlacement rackPlacement) Задает способ размещения стеллажей на данном складе.

rackPlacement — конфигурация стеллажей:
RACK_PLACEMENT_STAND_ALONE(по отдельности)
RACK_PLACEMENT_BACK_TO_BACK(спина к спине)
Конфигурация склада
Функция Описание
int getNumberOfRacks() Возвращает количество стеллажей на этом складе.
void setNumberOfRacks(int numberOfRacks) Задает количество стеллажей на этом складе. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

numberOfRacks — новое количество стеллажей
int getNumberOfBays() Возвращает количество секций на один стеллаж.
void setNumberOfBays(int numberOfBays) Задает количество секций на один стеллаж. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

numberOfBays — новое количество секций
int getNumberOfCellsPerSlot() Возвращает количество ячеек на один слот.
void setNumberOfCellsPerSlot(int numberOfCells) Задает количество ячеек на один слот. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

numberOfCells — новое количество ячеек
int getNumberOfShelves() Возвращает количество полок на один стеллаж.
void setNumberOfShelves(int numberOfShelves) Задает количество полок на один стеллаж. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

numberOfShelves — новое количество полок
double getRackDepth(LengthUnits units) Возвращает глубину стеллажа в заданных единицах измерения длины.

units — константа, задающая единицы измерения длины
void setRackDepth(double rackDepth, LengthUnits units) Задает глубину стеллажа в заданных единицах измерения длины. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

rackDepth — новая глубина стеллажа
units — константа, задающая единицы измерения длины
double getShelfHeight(LengthUnits units) Возвращает высоту полки в заданных единицах измерения длины.

units — константа, задающая единицы измерения длины
void setShelfHeight(double shelfHeight, LengthUnits units) Задает высоту полки в заданных единицах измерения длины. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

shelfHeight — новая высота полки
units — константа, задающая единицы измерения длины
double getCellWidth(LengthUnits units) Возвращает ширину ячейки в заданных единицах измерения длины.

units — константа, задающая единицы измерения длины
void setCellWidth(double cellWidth, LengthUnits units) Задает ширину ячейки в заданных единицах измерения длины. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

cellWidth — новая ширина ячейки
units — константа, задающая единицы измерения длины
double getAisleWidth(LengthUnits units) Возвращает ширину проезда в заданных единицах измерения длины.

units — константа, задающая единицы измерения длины
void setAisleWidth(double aisleWidth, LengthUnits units) Задает ширину проезда в заданных единицах измерения длины. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

aisleWidth — новая ширина проезда
units — константа, задающая единицы измерения длины
double getAccessZone(LengthUnits units) Возвращает ширину области доступа в заданных единицах измерения длины.

units — константа, задающая единицы измерения длины
void setAccessZone(double zoneWidth, LengthUnits units) Задает ширину области доступа в заданных единицах измерения длины. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

zoneWidth — новая ширина области доступа
units — константа, задающая единицы измерения длины
Ячейки

Все перечисленные ниже функции можно вызвать только после инициализации элементов разметки пространства.

Функция Описание
StorageCell getCell(Agent agent) Возвращает ячейку, содержащую указанного агента.

agent — агент (материальный объект)
StorageCell getCell(int rack, int bay, int shelf, int deepPosition) Возвращает указанную ячейку.

rack — индекс стеллажа bay — индекс секции shelf — индекс полки deepPosition — индекс ячейки
List<StorageCell> getCells() Возвращает список ячеек, отсортированный в соответствии с типом хранения.
StorageCell getRandomFreeCell() Возвращает доступную для резервирования ячейку в случайном слоте склада.
List<StorageCell> freeCells(int rack) Возвращает список всех доступных ячеек в указанном стеллаже.

rack — индекс стеллажа
List<StorageCell> freeCells(int rack, int bay) Возвращает список всех доступных ячеек в указанной секции.

rack — индекс стеллажа bay — индекс секции
List<StorageCell> freeCells(int rack, int bay, int shelf) Возвращает список всех доступных ячеек на указанной полке.

rack — индекс стеллажа
bay — индекс секции shelf — индекс полки
int nFreeCells() Возвращает общее количество свободных ячеек на складе.
int nFreeCells(int rack) Возвращает общее количество свободных ячеек в указанном стеллаже.

rack — индекс стеллажа
int nFreeCells(int rack, int bay) Возвращает общее количество свободных ячеек в указанной секции.

rack — индекс стеллажа
bay — индекс секции
int nFreeCells(int rack, int bay, int shelf) Возвращает общее количество свободных ячеек на указанной полке.

rack — индекс стеллажа
bay — индекс секции shelf — индекс полки
Слот

Все перечисленные ниже функции можно вызвать только после инициализации элементов разметки пространства.

Функция Описание
StorageSlot getSlot(int rack, int bay, int shelf) Возвращает указанный слот.

rack — индекс стеллажа
bay — индекс секции
shelf — индекс полки
Для работы со слотом можно использовать специальные функции, возвращающие его местоположение на складе.
Скорость внутри слота

Все перечисленные ниже функции можно вызвать только после инициализации элементов разметки пространства.

Функция Описание
boolean isSpecifiedInslotSpeed() Возвращает true, если для перемещения внутри слотов была задана определенная скорость. В противном случае возвращает false.
void setSpecifiedInslotSpeed(boolean enabled) Задает определенную скорость перемещения внутри слотов, если в параметре функции передано true. Если передано false, заданная скорость не используется.

enabled — если true, скорость перемещения внутри слотов будет отличаться от стандартной; если false, то используется стандартная скорость.
double getInslotSpeed(SpeedUnits units) Возвращает скорость перемещения внутри слотов в заданных единицах измерения скорости.

units — a константа, задающая единицы измерения скорости
void setInslotSpeed(double speed, SpeedUnits units) Задает скорость перемещения внутри слотов в заданных единицах измерения скорости.

speed — новая скорость перемещения внутри слотов
units — a константа, задающая единицы измерения скорости
Агенты

Все перечисленные ниже функции можно вызвать только после инициализации элементов разметки пространства.

Функция Описание
int size() Возвращает число агентов, помещенных на склад.
List<Agent> getAgents() Возвращает список агентов, помещенных на склад, отсортированный в соответствии с типом хранения.
Agent getRandomAgent() Возвращает случайного агента из числа помещенных на склад. Если склад пуст, возвращает null.
boolean contains(Agent agent) Возвращает true, если переданный параметром агент был помещен на склад. В противном случае возвращает false.
Agent getAgentInCell(int rack, int bay, int shelf, int deepPosition) Возвращает агента, помещенного в заданную ячейку.

rack — индекс стеллажа
bay — индекс секции
shelf — индекс полки
deepPosition — индекс ячейки
Резервирование

Все перечисленные ниже функции можно вызвать только после инициализации элементов разметки пространства.

Функция Описание
boolean hasSpace(int rack, int bay, int shelf) Возвращает true, если в указанном слоте есть ячейки, доступные для резервирования. В противном случае возвращает false.

rack — индекс стеллажа
bay — индекс секции
shelf — индекс полки
boolean hasSpace() Возвращает true, если в указанном складе есть ячейки, доступные для резервирования. В противном случае возвращает false.
int nReserved() Возвращает количество зарезервированных, но не занятых ячеек.
List<StorageCell> reservedCells(int rack, int bay, int shelf) Возвращает список зарезервированных ячеек, находящихся в указанном слоте.

rack — индекс стеллажа
bay — индекс секции
shelf — индекс полки
List<StorageCell> reservedCells(int rack, int bay) Возвращает список зарезервированных ячеек, находящихся в указанной секции.

rack — индекс стеллажа
bay — индекс секции
void setReservation(Agent agent, int rack, int bay, int shelf) Резервирует ячейку для заданного агента в заданном слоте. Конкретная ячейка определяется в момент размещения агента.

agent — агент (материальный объект)
rack — индекс стеллажа
bay — индекс секции
shelf — индекс полки
void setReservation(Agent agent, int rack, int bay) Резервирует ячейку для заданного агента в заданной секции. Конкретная ячейка определяется в момент размещения агента.

agent — агент (материальный объект)
rack — индекс стеллажа
bay — индекс секции
void cancelReservation(Agent agent) Отменяет резервирования, сделанные для заданного агента.

agent — агент (материальный объект)
Операция размещения

Все перечисленные ниже функции можно вызвать только после инициализации элементов разметки пространства.

Функция Описание
void store(Agent agent) Размещает указанного агента на складе. Если нет подходящих для резервирования ячеек, возникает ошибка.

agent — агент (материальный объект)
void store(Agent agent, int rack, int bay, int shelf) Размещает указанного агента в указанном слоте. Если нет подходящих для резервирования ячеек, возникает ошибка.

agent — агент (материальный объект)
rack — индекс стеллажа
bay — индекс секции
shelf — индекс полки
void store(Agent agent, int rack, int bay) Размещает указанного агента в указанной секции. Если нет подходящих для резервирования ячеек, возникает ошибка.

agent — агент (материальный объект)
rack — индекс стеллажа
bay — индекс секции
void store(Agent agent, int rack) Размещает указанного агента на указанном стеллаже. Если нет подходящих для резервирования ячеек, возникает ошибка.

agent — агент (материальный объект)
rack — индекс стеллажа
Операция извлечения

Все перечисленные ниже функции можно вызвать только после инициализации элементов разметки пространства.

Функция Описание
Agent retrieve(Agent agent) Извлекает со склада и возвращает ранее размещенного агента.

agent — агент (материальный объект)
Agent retrieve(int rack, int bay, int shelf) Извлекает со склада и возвращает следующего доступного агента из указанного слота.

rack — индекс стеллажа
bay — индекс секции
shelf — индекс полки
Agent retrieve(int rack, int bay) Извлекает со склада и возвращает следующего доступного агента из указанной секции.

rack — индекс стеллажа
bay — индекс секции
Agent retrieve(int rack) Извлекает со склада и возвращает следующего доступного агента с указанного стеллажа.

rack — индекс стеллажа
Склад как препятствие
Функция Описание
boolean isObstacle() Возвращает true, если стеллажи на этом складе являются препятствием для пешеходов и транспортеров, работающих в режиме произвольной навигации. В противном случае возвращает false.
void setObstacle(boolean isObstacle) Задает, являются ли стеллажи на этом складе препятствием для пешеходов и транспортеров, работающих в режиме произвольной навигации.

isObstacle — передайте true, чтобы сделать стеллажи препятствием; в противном случае передайте false.
Местоположение склада
Функция Описание
double getX() Возвращает значение координаты X для этого склада.
void setX(double x) Задает значение координаты X для этого склада. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

x — новое значение координаты X
double getY() Возвращает значение координаты Y для этого склада.
void setY(double y) Задает значение координаты Y для этого склада. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

y — новое значение координаты Y
double getZ() Возвращает значение координаты Z для этого склада.
void setZ(double z) Задает значение координаты Z для этого склада. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

z — новое значение координаты Z
double getRotation() Возвращает угол поворота склада по часовой стрелке, в радианах.
void setRotation(double rotation) Задает угол поворота склада по часовой стрелке, в радианах. Эту функцию нельзя вызвать после инициализации элементов разметки пространства.

rotation — новый угол поворота по часовой стрелке, в радианах
Внешний вид склада
Функция Описание
Color getShelvesColor() Возвращает цвет полок стеллажей.
void setShelvesColor(Color shelvesColor) Задает цветполок стеллажей. Эта функция не будет выполняться для складов с набивным типом стеллажей.

shelvesColor — новый цвет полок
Color getFrameColor() Возвращает цвет рамы стеллажей.
void setFrameColor(Color frameColor) Задает цветрамы стеллажей.

frameColor — новый цвет рамы
Уровень
Функция Описание
Level getLevel() Возвращает уровень, на котором расположен данный склад.
Статистика
Функция Описание
int capacity() Возвращает максимальное количество агентов, которое можно разместить на этом складе. Заблокированные ячейки вычитаются из результата.
int nStored() Возвращает общее количество размещенных агентов. Можно сбросить значение, вызвав функцию resetStats().
int nRetrieved() Возвращает общее количество извлеченных агентов. Можно сбросить значение, вызвав функцию resetStats().
double utilization() Возвращает загруженность склада. Загруженность высчитывается в виде значения с плавающей запятой в диапазоне [0, 1], соответствующего отношению занятых ячеек к общей вместимости склада.
void resetStats() Сбрасывает статистику склада: количество размещенных и извлеченных агентов.

Функции слота

В этом разделе перечислены функции класса StorageSlot. Их можно вызывать только после инициализации элементов разметки пространства.

Расположение на складе
Функция Описание
Storage getStorage() Возвращает склад, к которому относится этот слот.
int getRack() Возвращает индекс стеллажа, к которому относится этот слот.
int getShelf() Возвращает индекс полки, к которой относится этот слот.
int getBay() Возвращает индекс секции, к которой относится этот слот.

Функции ячейки

В этом разделе перечислены функции класса StorageCell. Их можно вызывать только после инициализации элементов разметки пространства.

Расположение на складе
Функция Описание
Storage getStorage() Возвращает склад, к которому относится эта ячейка.
int getRack() Возвращает индекс стеллажа, к которому относится эта ячейка.
int getShelf() Возвращает индекс полки, к которой относится эта ячейка.
int getBay() Возвращает индекс секции, к которой относится эта ячейка.
int getDeepPosition() Возвращает индекс этой ячейки в слоте.
Agent getAgent() Возвращает агента, размещенного в этой ячейке. Если ячейка пуста, возвращает null.

agent — агент (материальный объект)
Размещение и извлечение
Функция Описание
boolean isAvailableToStore() Возвращает true, если ячейка доступна и резервирование разрешено. В противном случае возвращает false.
boolean isAvailableToRetrieve() Возвращает true, если ячейка доступна и содержит агента. В противном случае возвращает false.
void store(Agent agent) Размещает указанного агента в этой ячейке. Агент помещается в ячейку незамедлительно и без анимации. Для данного агента не должно быть зарезервировано другой ячейки. Для ячейки, для которой вызывается функция, должно быть разрешено резервирование.

agent — агент (материальный объект)
Agent retrieve() Извлекает со склада и возвращает агента, занимающего ячейку. Ячейка не должна быть пустой.
Резервирование
Функция Описание
boolean isFree() Возвращает true, если ячейка пуста и не зарезервирована для агента. В противном случае возвращает false.
void setReservation(Agent agent) Резервирует ячейку для указанного агента. В момент вызова функции ячейка не должна быть зарезервирована для другого агента, иначе возникнет ошибка.

agent — агент (материальный объект)
Agent cancelReservation() Снимает резервирование для агента, который зарезервировал эту ячейку и возвращает этого агента. Чтобы эта функция сработала, ячейка должна быть зарезервирована агентом.
Блокировка ячеек
Функция Описание
boolean isActive() Возвращает true, если ячейка не заблокирована и нормально функционирует. В противном случае возвращает false.
void deactivate() Блокирует ячейку и запрещает любые операции с ней. Агенты (материальные объекты) могут быть транспортированы через пространство, занятое заблокированными ячейки. Эту функцию можно использовать для моделирования складов, на которых время от времени занимаются обычно пустые области. Если ячейка блокируется во время выполнения модели, разблокировать ее нельзя.
Как мы можем улучшить эту статью?