ПочатиПочніть безкоштовно

Оптимізація виробництва: Score & Rank

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

Table with process names and their duration statistics, namely mean and standard deviation.

Метод 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()

Цикл вибірки Монте‑Карло згенерує низку можливих траєкторій процесів і поставить їм бали, як показано на рисунку. Monte Carlo trajectories for different process scenario.

Ця вправа є частиною курсу

Дискретно-подієве моделювання в 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
____
Редагувати та запускати код