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

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

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

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

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

Создайте модель

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

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

  1. В блоке Entity Generator, набор Entity type name к Customers и Time source к 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. В блоке Resource Pool задайте Resource name как ShoppingCart. Установите Resource amount на 20.

    Начальным значением доступных магазинных тележек является 20.

  3. В блоке Resource Acquirer, набор ShoppingCart как Selected Resources и набор Maximum number of waiting entities к Inf.

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

  4. В блоке Entity Server, набор Capacity к Inf.

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

  5. В блоке Entity Server, набор Service time source к 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. Соедините статистическую величину Average wait, w от блока Resource Acquirer до блока To Workspace и установите его Variable name на 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- мелкое потребительское время ожидания.

Смотрите также

| | | | | |

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

Больше о

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