exponenta event banner

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

Чтобы оптимизировать модели в рабочих процессах, которые включают выполнение нескольких моделирований, можно создать тесты моделирования с помощью Simulink.SimulationInput объект.

Модель продуктового магазина

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

В этом примере блок генератора объектов представляет запись клиента в хранилище. При необходимости клиенты ожидают в очереди и получают корзину покупок через блок «Приобретение ресурсов». Блок Пул ресурсов представляет доступные корзины покупок в магазине. Блок сервера сущностей представляет время, которое каждый клиент проводит в хранилище. Клиенты возвращают корзины покупок через блок Resource Releaser, в то время как блок Entity Terminator представляет уход клиента из магазина. Статистика «Среднее ожидание» (Average wait) w из блока «Приобретение ресурсов» (Resource Acquirer) сохраняется в рабочей области блоком «В рабочую область» (To Workspace) из библиотеки Simulink ®.

Построение модели

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

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

  1. В блоке «Генератор объектов» задайте для имени типа объекта значение Customers и источник времени для MATLAB action. Затем введите этот код.

    persistent rngInit;
    if isempty(rngInit)
        seed = 12345;
        rng(seed);
        rngInit = true;
    end
    
    % Pattern: Exponential distribution
    mu = 1;
    dt = -mu*log(1-rand());

    Время между поступлениями клиента берется из экспоненциального распределения со средним значением 1 минута.

  2. В блоке Пул ресурсов укажите имя ресурса как ShoppingCart. Установите значение «» Сумма ресурса 20.

    Начальная стоимость доступных корзин покупок: 20.

  3. В блоке Resource Acquirer установите значение ShoppingCart в качестве выбранных ресурсов и установить максимальное количество ожидающих объектов равным Inf.

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

  4. В блоке Entity Server установите значение Capacity равным Inf.

    Пример предполагает неограниченное количество покупателей, которые могут совершать покупки в магазине.

  5. В блоке Entity Server установите для источника времени обслуживания значение MATLAB action и введите код ниже.

    persistent rngInit;
    if isempty(rngInit)
        seed = 123456;
        rng(seed);
        rngInit = true;
    end
    
    % Pattern: Uniform distribution
    % m: Minimum, M: Maximum
    m = 20; 
    M = 40;
    dt = m+(M-m)*rand;

    Время, которое клиент проводит в филиале, берется из равномерного распределения на интервале между 20 минут и 40 минут.

  6. Соедините среднее ожидание, w статистика из блока «» Получение ресурсов «» с блоком «» В рабочую область «» и задайте для его имени переменной значение AverageCustomerWait.

  7. Установка времени моделирования на 600.

    Продолжительность одного моделирования равна 10 часов работы, что 600 минут.

  8. Сохраните модель.

    В этом примере модель сохраняется с именем GroceryStore_ShoppingCartExample.

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

  1. Откройте новый сценарий MATLAB ® и запустите этот код MATLAB для нескольких имитаций.

    1. Инициализируйте модель и доступное количество корзин покупок для каждого моделирования, которое определяет количество моделирований.

      % Initialize the Grocery Store model with
      % random intergeneration time and service time value
      mdl = 'GroceryStore_ShoppingCartExample';
      isModelOpen = bdIsLoaded(mdl);
      open_system(mdl);
      
      % Range of number of shopping carts that is 
      % used in each simulation
      ShoppingCartNumber_Sweep = (20:1:50);
      NumSims = length(ShoppingCartNumber_Sweep);

      В каждом моделировании количество доступных корзин покупок увеличивается на 1.

    2. Выполните каждое моделирование с соответствующим доступным значением корзины покупок и выведите результаты.

      % Run NumSims number of simulations
      NumCustomer = zeros(1,NumSims);
      for i = 1:1:NumSims
          in(i) = Simulink.SimulationInput(mdl);
          % Use one ShoppingCartNumber_sweep value for each iteration
          in(i) = setBlockParameter(in(i), [mdl '/Resource Pool'], ...
          'ResourceAmount', num2str(ShoppingCartNumber_Sweep(i)));
      end
      
      % Output the results for each simulation
      out = sim(in);
    3. Соберите и визуализируйте результаты.

      % Compute maximum average wait time for the
      % customers for each simulation
      MaximumWait = zeros(1,NumSims);
      for i=1:NumSims
          MaximumWait(i) = max(out(1, i).AverageCustomerWait.Data);
      end
      % Visualize the plot
      plot(ShoppingCartNumber_Sweep, MaximumWait,'bo');
      grid on
      xlabel('Number of Available Shopping Carts')
      ylabel('Maximum Wait Time')
  2. Просмотрите график, отображающий максимальное среднее время ожидания клиентов как функцию доступных корзин покупок.

    График отображает компромисс между 46 корзины покупок доступны для нулевого времени ожидания по сравнению с 33 корзины покупок для 2-минутное время ожидания клиента.

См. также

| | | | | |

Связанные примеры

Подробнее