SimPy로 만드는 이산 사건 모델의 Monte Carlo 샘플링
이제 동일한 Monte-Carlo 샘플링 분석을, 모델의 SimPy 버전을 사용해 구축해 보겠습니다. SimPy 모델에는 다양한 공정을 시뮬레이션하는 manufacturing_process라는 제너레이터가 있고, 모델을 여러 번 실행해 정보를 time_record라는 NumPy 배열에 저장하는 run_monte_carlo 함수가 있습니다.
결과를 그리는 코드는 이전 연습 문제에서 사용한 것과 비슷하지만, 아래에 보이는 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()
Monte-Carlo 샘플링 루프는 그림과 같이 가능한 여러 공정 궤적을 생성합니다.

이 연습은 강의의 일부입니다
Python으로 배우는 이산 사건 시뮬레이션
연습 안내
process_duration을 진행시키고 yield 하세요.- 현재 시간을
time_record에 저장하세요. - 더미 변수
t를 사용해n_trajectories샘플을 도는 for 루프를 실행하세요. - 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)