1. Nauka
  2. /
  3. Kursy
  4. /
  5. Symulacja zdarzeń dyskretnych w Pythonie

Connected

ćwiczenie

Optymalizacja produkcji: Score & Rank

Użyjmy tego samego modelu zdarzeń dyskretnych fabryki zegarów ściennych i skonfigurujmy procedurę optymalizacji „Score & Rank". Dla wygody proces produkcyjny został ponownie zebrany w tabeli poniżej. Informacje są przechowywane na liście słowników o nazwie processes, po jednym słowniku na każdy proces. Klucze słownika odpowiadają nagłówkom kolumn tabeli.

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

Metoda plot_results() używana do generowania wykresów w tym ćwiczeniu jest wstępnie załadowana i przedstawiona poniżej.

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()

Pętla próbkowania Monte Carlo wygeneruje serię możliwych trajektorii procesów i oceni je, co przedstawia poniższy rysunek. Monte Carlo trajectories for different process scenario.

Instrukcje

100 XP
  • Dodaj wkład każdego procesu do oceny, wiedząc, że czas trwania procesów jest przechowywany w process_duration_all[s, p], a odpowiadające im wagi – w proc_p["score_weight_0_10"].
  • Ustaw pętlę for tak, aby wykonała NUM_SIMULATIONS przebiegów Monte Carlo, używając s jako zmiennej iteracyjnej.
  • Uruchom silnik Monte Carlo przechowywany w funkcji run_monte_carlo() (spowoduje to wygenerowanie wykresów „score" oraz „rank")