exponenta event banner

Оптимизация общих ресурсов в процессе пакетного производства

Обзор

В этом примере показано, как моделировать и оптимизировать использование общих ресурсов в системе, выявлять недостатки ресурсов и улучшать планирование мощностей. Пример основан на процессе пакетного производства, где производственные заказы обрабатываются только в соответствии с доступностью пакетных реакторов. В этом примере объекты 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 имитирует химический процесс для получения золя (типа коллоида). Шестиступенчатая рецептура моделирует основные операции в производстве золя. Выполнение этих шагов требует различных ресурсов. Реактор периодического действия обеспечивает встроенные возможности для выполнения таких шагов, как добавление цвета, добавление частиц и перемешивание. Таким образом, ресурсы, требуемые на этих этапах, не нуждаются в отдельном моделировании. С другой стороны, шаги по добавлению воды, нагреву и сливу требуют дополнительных ресурсов. Эти ресурсы совместно используются всеми реакторами периодического действия и ограничены производительностью производственной системы.

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

Например, когда использование воды достигает полной емкости, давление воды слишком низкое для доступа к другому реактору периодического действия. В этом случае производство в этом реакторе приостанавливается до тех пор, пока подача воды снова не станет доступной. В подсистеме Execute Chemical Process Recipe в примере моделируется такой процесс совместного использования ресурсов с блоком Queue с меткой Wait for Water Supply и блоком Entity Server с меткой Add Water в подсистеме Add Water. Параметр Capacity блока Entity Server моделирует емкость системы водоснабжения. Во время моделирования количество объектов в блоке «Очередь» указывает количество реакторов периодического действия, ожидающих воды. Количество объектов в блоке «Сервер» представляет количество реакторов пакетной обработки, имеющих доступ к воде.

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

Смоделированный процесс производства партии способен производить два типа партий: тип A и тип 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']);

Оптимизация емкости ресурсов

Теперь мы применим решатель генетических алгоритмов из инструментария глобальной оптимизации MATLAB к этой модели SimEvents, чтобы найти оптимальные мощности ресурсов для этой системы. Генетический алгоритм решает задачи оптимизации путём многократного изменения совокупности отдельных точек. Благодаря своему случайному характеру генетический алгоритм улучшает ваши шансы найти глобальное решение. Он не требует, чтобы функции были дифференцируемыми или непрерывными.

В этой оптимизации используются следующие переменные принятия решений:

  • Количество реакторов периодического действия

  • Количество резервуаров для воды

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

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

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

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

См. также

| | | | |

Связанные темы