เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การปรับให้เหมาะสมในกระบวนการผลิต: Score & Rank

มาใช้โมเดลการจำลองเชิงเหตุการณ์ไม่ต่อเนื่องของโรงงานนาฬิกาแขวนเดิม แล้วตั้งค่ากระบวนการปรับให้เหมาะสมแบบ "Score & Rank" กัน ตารางด้านล่างสรุปกระบวนการผลิตไว้อีกครั้งเพื่อความสะดวก ข้อมูลถูกเก็บไว้ในรายการของดิกชันนารีชื่อ processes โดยมีหนึ่งดิกชันนารีต่อหนึ่งกระบวนการ คีย์ของดิกชันนารีนี้ตรงกับหัวคอลัมน์ในตาร

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

เมธอด plot_results() ที่ใช้สร้างกราฟในแบบฝึกหัดนี้ถูกโหลดไว้ล่วงหน้าแล้ว และแสดงโค้ดด้านล่างนี้

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 sampling จะสร้างชุดเส้นทางกระบวนการที่เป็นไปได้ แล้วให้คะแนนแต่ละเส้นทาง ดังที่แสดงในรูปด้านล่าง Monte Carlo trajectories for different process scenario.

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ดูคอร์ส

คำแนะนำการฝึกหัด

  • เพิ่มค่าคะแนนของแต่ละกระบวนการ โดยทราบว่าระยะเวลาของกระบวนการถูกเก็บไว้ใน process_duration_all[s, p] และน้ำหนักที่สอดคล้องกันอยู่ใน proc_p["score_weight_0_10"]
  • กำหนด for loop ให้รัน Monte Carlo จำนวน NUM_SIMULATIONS ครั้ง โดยใช้ s เป็นตัวแปรดัมมี
  • รัน Monte Carlo engine ที่เก็บอยู่ในฟังก์ชัน run_monte_carlo() (ซึ่งจะสร้างทั้งกราฟ "score" และ "rank")

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

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
____
แก้ไขและรันโค้ด