BaşlayınÜcretsiz Başlayın

Ü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.

Süreç adları ve süre istatistikleri, yani ortalama ve standart sapma, içeren tablo.

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. Farklı süreç senaryoları için Monte Carlo yörüngeleri.

Bu egzersiz

Python ile Ayrık Olay Benzetimi

kursunun bir parçasıdır
Kursu Görüntüle

Egzersiz 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 ise proc_p["score_weight_0_10"] içinde saklandığını biliyorsun.
  • For döngüsünü, kukla değişken olarak s kullanarak NUM_SIMULATIONS adet 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
____
Kodu Düzenle ve Çalıştır