Üretim Optimizasyonu: Score & Rank
Hadi aynı duvar saati fabrikasının ayrık olay modelini kullanalım ve bir "Score & Rank" optimizasyon rutini kuralım. Kolaylık olması için, üretim süreci aşağıdaki tabloda tekrar özetlendi. Bilgiler, her bir süreç için bir sözlük olacak şekilde processes adlı bir sözlük listesinde saklandı. Bu sözlüğün anahtarları tablo sütun başlıklarıyla eşleşir.

Bu egzersizde grafiklerin üretilmesi için kullanılan plot_results() yöntemi önceden yüklendi ve aşağıda gösteriliyor.
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 örnekleme döngüsü, şekilde gösterildiği gibi olası süreç yörüngeleri üretecek ve bunları puanlayacaktır.

Bu egzersiz
Python ile Ayrık Olay Benzetimi
kursunun bir parçasıdırEgzersiz talimatları
- Her sürecin puan katkısını ekle: süreç sürelerinin
process_duration_all[s, p]içinde, ilgili ağırlıkların iseproc_p["score_weight_0_10"]içinde saklandığını biliyorsun. - For döngüsünü, kukla değişken olarak
skullanarakNUM_SIMULATIONSadet Monte-Carlo çalıştırması yapacak şekilde ayarla. run_monte_carlo()fonksiyonunda saklı Monte Carlo motorunu çalıştır (bu hem "score" hem de "rank" grafikleri üretecektir).
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
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
____