Выборка методом Монте-Карло для дискретно-событийной модели с 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)