Оптимизируйте модели 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- мелкое потребительское время ожидания.

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

| | | | | |

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

Больше о