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

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

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

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

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

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

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

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

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

| | | | | |

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

Больше о

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