Mulai sekarangMulai gratis

Optimasi Manufaktur: Score & Rank

Mari gunakan model kejadian-diskret yang sama untuk pabrik jam dinding dan menyiapkan rutinitas optimasi "Score & Rank". Untuk memudahkan Anda, proses manufaktur dirangkum kembali pada tabel di bawah. Informasi tersebut disimpan dalam sebuah list berisi dictionary bernama processes, dengan satu dictionary per proses. Kunci pada dictionary ini sesuai dengan judul kolom tabel.

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

Metode plot_results() yang digunakan untuk membuat plot pada latihan ini telah dimuat sebelumnya dan ditampilkan di bawah.

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

Loop pengambilan sampel Monte Carlo akan menghasilkan serangkaian kemungkinan lintasan proses dan memberikan skornya, seperti yang ditunjukkan pada gambar. Monte Carlo trajectories for different process scenario.

Latihan ini merupakan bagian dari kursus

Simulasi Peristiwa Diskret dengan Python

Lihat Kursus

Instruksi latihan

  • Tambahkan kontribusi skor dari setiap proses, dengan mengetahui bahwa durasi proses disimpan di process_duration_all[s, p] dan bobot masing-masing ada di proc_p["score_weight_0_10"].
  • Atur for-loop untuk menjalankan NUM_SIMULATIONS run Monte Carlo dengan s sebagai variabel dummy.
  • Jalankan mesin Monte Carlo yang disimpan dalam fungsi run_monte_carlo() (ini akan menghasilkan plot "score" dan "rank")

Latihan interaktif langsung praktik

Cobalah latihan ini dengan melengkapi kode contoh ini.

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
____
Edit dan Jalankan Kode