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.

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.

Latihan ini merupakan bagian dari kursus
Simulasi Peristiwa Diskret dengan Python
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 diproc_p["score_weight_0_10"]. - Atur for-loop untuk menjalankan
NUM_SIMULATIONSrun Monte Carlo denganssebagai 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
____