Оптимизация совместно используемых ресурсов в процессе серийного производства

Обзор

Этот пример показывает, как смоделировать и оптимизировать использование совместно используемых ресурсов в системе, чтобы идентифицировать дефициты ресурса и улучшить планирование мощностей. Пример основан на процессе серийного производства, где производственные заказы обрабатываются только согласно доступности пакетных реакторов. В примере сущности SimEvents® представляют и производственные заказы производственного процесса и пакетные реакторы, которые требуются, чтобы обрабатывать их. Позже в примере, мы найдем оптимальные мощности ресурса системы путем применения решателя Генетического алгоритма MATLAB Global Optimization Toolbox.

modelname = 'seExampleBatchProduction';
open_system(modelname);
scopes = find_system(modelname, 'LookUnderMasks', 'on', 'BlockType', 'Scope');
cellfun(@(x)close_system(x), scopes);
set_param(modelname, 'SimulationCommand', 'update');

Структура модели

В верхнем уровне модели Генераторы Сущности моделируют генерацию и отставание производственных заказов путем генерации сущностей, которые представляют производственные заказы. Когда новая сущность сгенерирована, блок Obtain Reactor запрашивает пакетный реактор обработать заказ. После того, как Выполнение Химической подсистемы Рецепта Процесса завершает порядок согласно заданному химическому рецепту процесса, блок маркировал релизы Release Reactor пакетным реактором назад в пул ресурсов, где это теперь доступно, чтобы обработать новый заказ. Подсистема Анализа данных анализирует данные, связанные с завершением производственных заказов.

Совместно используемые ресурсы в производственном процессе

Выполнение Химической подсистемы Рецепта Процесса моделирует химический процесс, чтобы произвести sol (тип коллоида). Рецепт с шестью шагами моделирует основные операции в производстве sol. Выполнение этих шагов требует различных ресурсов. Пакетный реактор предусматривает встроенные возможности выполнить шаги как добавляющий цвет, добавляя частицы и движение. Таким образом ресурсы, требуемые этими шагами, не должны быть смоделированы отдельно. С другой стороны, шаги, чтобы добавить воду, нагрейтесь, и дренаж требуют дополнительных ресурсов. Эти ресурсы совместно используются всеми пакетными реакторами и ограничиваются способностью промышленной системы.

open_system([modelname '/Execute Chemical Process Recipe']);

Например, когда использование воды достигает полной мощности, гидравлическое давление является слишком низким для другого пакетного реактора для доступа. В этом случае производство в том реакторе делает паузу, пока водоснабжение не становится доступным снова. В Выполнении Химической подсистемы Рецепта Процесса модели в качестве примера такой процесс разделения ресурсов с блоком Queue маркировал Wait for Water Supply, и блок Entity Server маркировал Add Water в Добавить Водной подсистеме. Полный параметр блока Entity Server моделирует способность водоснабжения. Во время симуляции количество сущностей в блоке Queue указывает на количество пакетных реакторов, ожидающих воды. Количество сущностей в блоке Server представляет количество пакетных реакторов, получающих доступ к воде.

open_system([modelname '/Execute Chemical Process Recipe/Add Water']);

Смоделированный процесс серийного производства способен к созданию двух типов пакетов: тип A и тип B. Несмотря на то, что основные шаги, требуемые произвести любой пакет, являются тем же самым, химические рецепты процесса отличаются. Например, рецепт, чтобы произвести тип B требует большего количества воды, таким образом, шаг, чтобы добавить воду занимает больше времени, чтобы завершиться.

Результаты и отображения

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

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

sim(modelname);
open_system([modelname '/Data Analysis/Order Backlog']);

Другие результаты системы включают следующее и видны в подсистеме Анализа данных:

  • Среднее количество пакетов, ожидающих воды

  • Среднее количество пакетов, ожидающих тепла

  • Среднее количество пакетов, ожидающих дренажа

  • Использование пакетных реакторов

  • Использование водоснабжения

  • Использование теплоснабжения

  • Использование высушивающего средства

  • Пропускная способность типа пакет

  • Пропускная способность пакета типа 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']);

Оптимизация мощностей ресурса

Мы теперь применим решатель Генетического алгоритма от Global Optimization Toolbox MATLAB до этой модели SimEvents, чтобы найти оптимальные мощности ресурса к этой системе. Генетический алгоритм решает задачи оптимизации путем повторного изменения генеральной совокупности отдельных точек. Из-за его случайного характера, генетический алгоритм улучшает ваши возможности нахождения глобального решения. Это не требует, чтобы функции были дифференцируемы или непрерывны.

Переменные решения в этой оптимизации:

  • Количество пакетных реакторов

  • Количество баков для воды

  • Количество нагревателей

  • Количество дренажей

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

cellfun(@(x)close_system(x), scopes);

disp('ResourceCapacity before optimization =');
disp(ResourceCapacity);
close_system([modelname '/Data Analysis/Order Backlog']);
ResourceCapacity = seExampleRunOptimizationForBatchProductionProcess();
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: 12).
Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance
and constraint violation is less than options.ConstraintTolerance.
Elapsed time is 55.819572 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