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

Общая информация

Библиотека Моделирования Потоков позволяет вам моделировать хранение и перенос жидкостей, объемного вещества или множества дискретных элементов, которые вы не хотите моделировать по отдельности.

Библиотека включает в себя такие блоки как Tank, Pipeline, Valve, FluidSource и FluidDispose. Есть также блоки для направления, объединения и разделения потока. Кроме того, имеется блок BulkConveyor, разработанный для моделирования переноса объемных веществ или конденсирующихся летучих веществ. Вы можете найти полный список блоков Библиотеки Моделирования Потоков здесь.

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

Блоки Библиотеки Моделирования Потоков накладывают линейные ограничения на скорость потока жидкости, такие как максимальная скорость потока, пропорциональная скорость потока и так далее. Исполняющий модуль библиотеки увеличивает до предела количество жидкости, проходящей через систему. В результате скорость течения жидкости является кусочно-постоянной (постоянной в пределах определенных временных интервалов) и меняется только в дискретные моменты времени.

Линейная природа гидродинамики позволяет использовать LP-решатель (для линейного программирования), для того чтобы вычислять максимальную скорость потока жидкости. Решатель вызывается только в определенные моменты изменений, что делает скорость исполнения моделей из Библиотеки Моделирования Потоков намного выше, чем у моделей из Системной Динамики. Вместе с тем, LP вычисления намного более точны, так как в LP решателе не используются временные шаги. Мы рекомендуем использовать Библиотеку Моделирования Потоков в тех случаях, когда система линейна, а Системную Динамику использовать только в том случае, если система является нелинейной, то есть когда в модели присутствуют непрерывные циклы обратной связи или постоянное изменение скорости движения потока жидкости.

Увеличение скоростей потоков до максимума и приоритеты потоков

По умолчанию, данные блоки Библиотеки Моделирования Потоков заставляют LP решатель до максимума увеличить скорости их выходных потоков: FluidSource, AgentToFluid, Tank, и BulkConveyor. Кроме того, блоки FluidMerge и FluidSplit в режиме приоритетов формируют запросы на увеличения скорости потока до максимума на одном из входов или выходов. Это реализуется путем повышения приоритета (коэффициента) скорости движения соответствующего потока в целевой функции линейного программирования. По умолчанию, величина скорости этого потока получает приоритет 1, а всех остальных потоков — приоритет 0.

Однако, это не всегда приводит к желаемому результату. Пользователь может настроить диаграммы процесса так, что в них будут наблюдаться конфликты приоритетов, и библиотека не сможет распознать правильные приоритеты для решения изначально поставленной задачи без необходимости ввода дополнительных данных. Библиотека Моделирования Потоков позволяет предоставить эти данные в виде значений приоритетов, установленных самим пользователем. Помочь отследить несоответствие потоков заданным приоритетам может цветовая индикация нарушения приоритетов в блоках FluidSplit и FluidMerge.

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

Максимальные и минимальные значения скоростей и уровней

Если значение скорости во время выполнения модели равняется Utils.MAXIMUM_RATE (1.0E10), модель остановится и появится сообщение об ошибке "Flow rate evaluated to the maximum value. You need to set a limit for this rate.". Это происходит ввиду того, что максимальная скорость, как правило, не является нормальной величиной, чаще следствием того, что пользователь не указал где-либо ограничение скорости. Чтобы избежать подобной ситуации, необходимо указать ограничение максимальной скорости в свойствах блоков диаграммы процессов.

Единицы измерения

В Библиотеке Моделирования Потоков количество жидкости или сыпучего материала измеряется в единицах двух типов: массы и объема. Используются следующие единицы измерения массы:

  • Килограмм
  • Тонна

И следующие единицы измерения объема:

  • Литр
  • Метр кубический
  • Нефтяной баррель

В рамках одной диаграммы процесса, состоящей из блоков Библиотеки Моделирования Потоков (одной "сети потоков"), необходимо использовать единицы измерения одного типа: либо массы, либо объема. В противном случае, если в одном блоке параметры заданы в единицах измерения массы, а в другом - в единицах измерения объема, при запуске модели возникнет ошибка "Не совпадают единицы измерения".

Во внутренних настройках Библиотека Моделирования Потоков конвертирует любые единицы измерения массы в килограммы и любые единицы измерения объема - в метры кубические. Для внутренних расчетов используются секунды.

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

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

Обработка численных ошибок

В Библиотеке Моделирования Потоков скорости потоков, временные интервалы и другие значения часто рассчитываются заново при помощи линейных формул: объем = скорость потока * временной интервал и т.д. Как следствие, могут возникать численные ошибки. Например, если вместимость резервуара равна 100 м3 и скорость поступающего потока поддерживается на уровне ровно 1 м3 в секунду на протяжении ровно 100 секунд, "буквальная" реализация резервуара могла бы привести тому, что его объем равен, скажем, 100 /- 1e-12 м3. Библиотека Моделирования Потоков по возможности сводит к минимуму последствия от численных ошибок, приводя рассчитываемые величины к необходимым значениям. Для этого используется Utils.TOLERANCE - внутренняя константа, применяемая для всех типов величин в библиотеке.

Константа TOLERANCE используется в следующих важных местах:

  • Объем жидкости в блоках Tank, Pipeline, BulkConveyor, FluidSource, FluidToAgent, FluidPickup и объем жидкости, прошедшей через блок Valve, приводятся к 0 и к максимальной вместимости там, где это применимо.
  • Блоки Tank, Pipeline и BulkConveyor не создают партии, чей размер меньше TOLERANCE.
  • TOLERANCE используется, чтобы проверить пустой или полный блок Tank, а также, чтобы проверить, достигло ли вещество определенного уровня (выше/ниже уровня).
  • Все вышеперечисленное также относится к составным блокам, в которые входит блок Tank.
  • Блоки FluidPickup и FluidToAgent используют TOLERANCE, чтобы проверить набрался ли заданный объем вещества.
  • В блоке BulkConveyor вариации плотности, находящиеся в пределах TOLERANCE, не учитываются (не приводят к созданию новых объемных "порций").
  • Объемы, которые задает пользователь, не могут быть меньше значения TOLERANCE, в том числе: вместимость, начальный объем, объемы для выдачи порций и объемы для помещения в блок, размеры порций и т.д.

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

Для значений скорости в Библиотеке Моделирования Потоков введена соответствующая константа Utils.RATE_TOLERANCE со значением 1.0e-9. Она используется в следующих случаях:

  • Если пользователь указывает положительное значение скорости ниже значения RATE_TOLERANCE, это значение будет интерпретироваться как ошибочное.
  • Если при перерасчете скорости ее значение оказывается ниже значения RATE_TOLERANCE, оно будет приведено к 0.

Динамическая взаимоблокировка

Теоретически, при настройке потоков может возникнуть динамическая взаимоблокировка: бесконечная петля событий с нулевым прогрессом по времени. Простейшим примером является пользовательское действие, заданное в поле При изменении скорости какого-либо блока Библиотеки Моделирования Потоков. Это действие вызывает еще один пересчет скорости и, как следствие, еще один вызов действия При изменении скорости. Разумеется, мы рекомендуем не создавать подобные действия. Тем не менее, могут возникать и более сложные ситуации. Например, опустошение резервуара является событием, которое может вызвать перерасчет скорости, а этот перерасчет скорости в свою очередь может переключить резервуар в не опустошенное состояние. Вследствие этого скорости возвращаются к исходному состоянию, а резервуар снова становится пустым. Несмотря на то, что нет универсального решения проблемы динамической взаимоблокировки, мы рекомендуем попробовать настроить нестандартные приоритеты скоростей в блоках Split / Merge, и таким образом стабилизировать систему скоростей.

Как мы можем улучшить эту статью?