В этом примере показано, как смоделировать и оптимизировать использование общих ресурсов в системе, идентифицировать недостатки ресурсов и улучшить планирование мощностей. Пример основан на пакетном процессе производства, в котором производственные порядки обрабатываются только в соответствии с наличием пакетных реакторов. В примере сущности SimEvents ® представляют как производственные порядки производственного процесса, так и пакетные реакторы, которые необходимы для их обработки. Позже в примере мы найдем оптимальные ресурсные мощности системы, применив решатель Генетического алгоритма MATLAB Global Optimization Toolbox.
modelname = 'seBatchProduction'; open_system(modelname); scopes = find_system(modelname, 'LookUnderMasks', 'on', 'BlockType', 'Scope'); cellfun(@(x)close_system(x), scopes); set_param(modelname, 'SimulationCommand', 'update');
На верхнем уровне модели генераторы сущностей моделируют генерацию и отставание производственных порядков путем генерации сущностей, которые представляют производственные порядки. Когда генерируется новая сущность, блок Получить Реактор запрашивает пакетный реактор, чтобы обработать порядок. После того, как подсистема Execute Chemical Process Recipe выполнит порядок согласно заданной рецептуре химического процесса, блок Release Reactor отпускает пакетный реактор обратно в пул ресурсов, где он теперь доступен для обработки нового порядка. Подсистема анализа данных анализирует данные, связанные с выполнением производственных порядков.
Подсистема Execute Chemical Process Recipe моделирует химический процесс для производства sol (типа коллоида). Шестиступенчатый рецепт моделирует основные операции в производстве sol. Выполнение этих шагов требует различных ресурсов. Периодический реактор обеспечивает встроенные возможности для выполнения таких шагов, как добавление цвета, добавление частиц и перемешивание. Таким образом, ресурсы, требуемые этими шагами, не должны моделироваться отдельно. С другой стороны, шаги по добавлению воды, нагреванию и сливу требуют дополнительных ресурсов. Эти ресурсы разделяются всеми пакетными реакторами и ограничены мощностями промышленной системы.
open_system([modelname '/Execute Chemical Process Recipe']);
Например, когда использование воды достигает полной производительности, давление воды слишком низкое для доступа к другому периодическому реактору. В этом случае производство в этом реакторе останавливается до тех пор, пока водоснабжение не станет доступным снова. В подсистеме Execute Chemical Process Recipe пример моделирует такой процесс совместного использования ресурсов с блоком Queue, помеченным как Wait for Water Supply и блоком Entity Server, помеченным как Add Water в подсистеме Add Water. Параметр Capacity Сущности Server блока моделирует пропускную способность водопровода. Во время симуляции количество сущностей в блоке Queue указывает количество пакетных реакторов, ожидающих воды. Количество сущностей в блоке Server представляет количество пакетных реакторов, получающих доступ к воде.
open_system([modelname '/Execute Chemical Process Recipe/Add Water']);
Смоделированный процесс производства партии способен производить два типа партий: тип А и тип В. Хотя основные шаги, необходимые для производства любой партии, являются одинаковыми, рецепты химического процесса различны. Например, рецепт для производства типа B требует большего количества воды, поэтому шаг для добавления воды занимает больше времени, чтобы завершить.
Во время симуляции Подсистема анализа данных отображает несколько результатов, чтобы показать эффективность производственного процесса.
Наиболее наглядным результатом здесь является первый результат, Среднее количество порядков в отставании, который представляет время ожидания порядков, когда система пытается идти в ногу с притоком.
sim(modelname);
open_system([modelname '/Data Analysis/Order Backlog']);
Другие результаты системы включают следующее и можно увидеть в Подсистеме Анализа Данных:
Среднее количество партий, ожидающих воды
Среднее количество партий, ожидающих тепла
Среднее количество партий, ожидающих слива
Использование периодических реакторов
Использование водоснабжения
Использование теплоснабжения
Использование дренажной установки
Пропускная способность пакета типа A
Пропускная способность пакета типа B
open_system([modelname '/Data Analysis/Waiting For Water']); open_system([modelname '/Data Analysis/Waiting For Heat']); open_system([modelname '/Data Analysis/Waiting For Drain']); open_system([modelname '/Data Analysis/Utilization Reactors']); open_system([modelname '/Data Analysis/Utilization Water']); open_system([modelname '/Data Analysis/Utilization Heaters']); open_system([modelname '/Data Analysis/Utilization Drains']); open_system([modelname '/Data Analysis/ThroughputA']); open_system([modelname '/Data Analysis/ThroughputB']);
Теперь мы применим решатель Генетического алгоритма из MATLAB Global Optimization Toolbox к этой модели SimEvents, чтобы найти оптимальные ресурсные мощности для этой системы. Генетический алгоритм решает задачи оптимизации, неоднократно модифицируя население отдельных точек. Благодаря своей случайной природе генетический алгоритм улучшает ваши шансы на нахождение глобального решения. Это не требует, чтобы функции были дифференцируемыми или непрерывными.
Переменные принятия решений в этой оптимизации:
Количество периодических реакторов
Количество баков с водой
Количество нагревателей
Количество стоков
Генетический алгоритм устанавливает эти переменные, так как он запускает несколько симуляций модели через переменную ResourceCapacity. Начальные значения ресурсных мощностей показаны ниже:
cellfun(@(x)close_system(x), scopes); disp('ResourceCapacity before optimization ='); disp(ResourceCapacity); close_system([modelname '/Data Analysis/Order Backlog']); ResourceCapacity = seRunOptimizationForBatchProductionProcess(); disp('ResourceCapacity after optimization ='); disp(ResourceCapacity);
ResourceCapacity before optimization = 2 2 2 2 Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6). Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance and constraint violation is less than options.ConstraintTolerance. Elapsed time is 112.822855 seconds. Parallel pool using the 'local' profile is shutting down. ResourceCapacity after optimization = 13 2 4 2
Теперь мы можем ресимулировать после применения результатов процесса оптимизации назад к модели, чтобы увидеть, что это значительно уменьшило отставание по заказу.
sim(modelname);
open_system([modelname '/Data Analysis/Order Backlog']);
%cleanup bdclose(modelname); clear model scopes
Entity Generator | Сервер сущности | Очередь | Приобретатель ресурсов | Пул ресурсов | Ресурс Releaser