Оптимізація виробництва: Score & Rank
Скористаймося тим самим дискретно-подієвим модулем фабрики настінних годинників і налаштуймо процедуру оптимізації «Score & Rank». Для зручності виробничий процес знову підсумовано в таблиці нижче. Інформацію збережено у списку словників під назвою processes, по одному словнику на процес. Ключі кожного словника відповідають заголовкам стовпців таблиці.

Метод plot_results(), який використовується для побудови графіків у цій вправі, попередньо завантажено й наведено нижче.
def plot_results(objective_func):
# Score
fig, axes = plt.subplots(1, len(processes), sharey=True, figsize=(10, 8))
for p in range(len(processes)):
sns.scatterplot(ax=axes[p], x=process_duration_all[:, p], y=objective_func, c=objective_func, cmap="turbo_r")
axes[p].set_title(processes[p]["Name"], rotation = 20, horizontalalignment='left')
axes[p].set_xlabel("Duration [min]", rotation = -10)
axes[p].grid()
axes[0].set_ylabel("Objective function score")
plt.show()
# Rank
index_sort = np.argsort(objective_func)
fig, axes = plt.subplots(1, len(processes), sharey=True, figsize=(10, 8))
for p in range(len(processes)):
sns.lineplot(ax=axes[p], x=np.linspace(0, NUM_SIMULATIONS, NUM_SIMULATIONS),
y=process_duration_all[index_sort, p], color="orchid")
axes[p].set_title(processes[p]["Name"], rotation = 20, horizontalalignment='left')
axes[p].set_xlabel("Score-ranked scenarios", rotation = -10)
axes[p].grid()
axes[0].set_ylabel("Duration [min]")
plt.show()
Цикл вибірки Монте‑Карло згенерує низку можливих траєкторій процесів і поставить їм бали, як показано на рисунку.

Ця вправа є частиною курсу
Дискретно-подієве моделювання в Python
Інструкції до вправи
- Додайте внесок у підсумковий бал від кожного процесу, враховуючи, що тривалості процесів зберігаються в
process_duration_all[s, p], а відповідні ваги — вproc_p["score_weight_0_10"]. - Налаштуйте цикл for на виконання
NUM_SIMULATIONSзапусків Монте‑Карло зsяк службовою змінною. - Запустіть рушій Монте‑Карло, що збережений у функції
run_monte_carlo()(він згенерує графіки «score» та «rank»)
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
def objective_function_calc():
objective_func = np.ones(NUM_SIMULATIONS)
for s in range(NUM_SIMULATIONS):
for p in range(len(processes)):
proc_p = processes[p]
# Add the score contribution of each process
objective_func[s] += ____
plot_results(objective_func)
def run_monte_carlo():
# Set the for-loop to run NUM_SIMULATIONS Monte-Carlo runs
____
env = simpy.Environment()
env.process(manufractoring_process(env, s))
env.run()
objective_function_calc()
# Run the Monte Carlo function
____