НачатьНачать бесплатно

Метод Монте-Карло для дискретно-событийных моделей

Представьте завод по производству настенных часов. Спрос на продукцию неуклонно растёт, и теперь он превышает производственные мощности. Завод работает на полную мощность уже несколько месяцев, и вы хотите лучше понять его поведение и узкие места — чтобы принимать более обоснованные управленческие решения и планировать будущие инвестиции и расширение.

Дискретно-событийная модель производственных процессов уже разработана, и теперь вы хотите провести анализ методом Монте-Карло для исследования различных сценариев. Производственный процесс описан в таблице ниже; данные сохранены в виде списка словарей processes, по одному словарю на каждый процесс. Ключи словаря соответствуют заголовкам столбцов таблицы. Следующие пакеты уже импортированы: numpy as np, matplotlib.pyplot as plt, seaborn as sns, random, pandas as pd и time.

Таблица с названиями процессов и их временными характеристиками: средним значением и стандартным отклонением.

Цикл выборки методом Монте-Карло сформирует набор возможных траекторий процесса, как показано на рисунке. Траектории Монте-Карло для различных сценариев процесса.

Это упражнение является частью курса

Дискретно-событийное моделирование на Python

Посмотреть курс

Инструкции к упражнению

  • Настройте основной цикл for для выборки методом Монте-Карло, рассчитанный на n_trajectories выборок с переменной-счётчиком t.
  • Используйте гауссово распределение из пакета random, чтобы псевдослучайным образом оценить продолжительность процесса.

Интерактивное практическое упражнение

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

n_trajectories = 100

# Run a Monte-Carlo for-loop for n_trajectories samples
____

    for p in range(len(processes)):
        proc_p = processes[p]

        # Random gauss method to pseudo-randomly estimate process duration
        process_duration = ____(proc_p["Average_Duration"], proc_p["Standard_Deviation"])
        time_record[p + 1] = time_record[p] + process_duration

    df_disc = pd.DataFrame({cNam[0]: process_line_space, cNam[1]: time_record})
    fig = sns.lineplot(data=df_disc, x=cNam[0], y=cNam[1], marker="o")  # Step_10
    fig.set(xlim=(0, len(processes) + 1))
    plt.plot()
plt.grid()
plt.show()
Редактировать и запускать код