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

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

Теперь построим тот же анализ методом Монте-Карло, используя версию модели на SimPy. В модели SimPy есть генератор manufacturing_process, который имитирует различные процессы, и функция run_monte_carlo, которая запускает модель несколько раз и сохраняет результаты в массив NumPy с именем time_record.

Код для построения графиков аналогичен коду из предыдущего упражнения, однако он вынесен в функцию plot_results(), которая показана ниже.

def plot_results():

    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")
    fig.set(xlim=(0, len(processes) + 1))
    plt.plot() 

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

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

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

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

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

  • Учтите длительность процесса с помощью yield для process_duration.
  • Сохраните текущее время в time_record.
  • Запустите цикл for для n_trajectories выборок с переменной-заглушкой t.
  • Создайте окружение SimPy, добавьте процессы и запустите модель.

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

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

def manufacturing_process(env):
    global time_record
    for p in range(len(processes)):
        proc_p = processes[p]
        process_duration = random.gauss(proc_p["Average_Duration"], proc_p["Standard_Deviation"])

        # Clock-in and yield the process_duration
        yield ____

        # Save the current time in time_record
        time_record[p + 1] = ____

def run_monte_carlo(n_trajectories):

    # Run a for-loop for n_trajectories samples with dummy variable t
    ____

        # Create the SimPy environment, add processes and run the model
        env = ____
        env.____(manufacturing_process(env))
        env.____()
        
        plot_results()
    plt.show()

run_monte_carlo(n_trajectories = 100)
Редактировать и запускать код