ฟังก์ชันวัตถุประสงค์และการปรับระบบให้เหมาะสม

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

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

การปรับระบบให้เหมาะสม

  • การปรับระบบให้เหมาะสม

    • ระบุการกำหนดค่าการดำเนินงานที่เหมาะสมที่สุด
  • กระบวนการที่ขับเคลื่อนโดยมนุษย์

    • ผลผลิตสูงสุดด้วยต้นทุนต่ำสุด (ทรัพยากรและเวลาน้อยลง)
  • ระบุกระบวนการที่ส่งผลต่อผลลัพธ์ของระบบมากที่สุด

  • การสุ่มตัวอย่างแบบมอนเตคาร์โล

    • วัดความสำเร็จและจัดอันดับผลลัพธ์
  • ฟังก์ชันวัตถุประสงค์

    • ฟังก์ชันเป้าหมายสำหรับกำหนดเป้าหมายประสิทธิภาพ
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ฟังก์ชันวัตถุประสงค์

  • นิพจน์ทางคณิตศาสตร์ที่อธิบายเป้าหมายผลลัพธ์

  • ให้คะแนนสถานการณ์จำลอง

ตัวอย่าง

  • กระบวนการ A: 35%
  • กระบวนการ B: 20%
  • กระบวนการ C: 45%

รวม: 100%

  • กระบวนการ C มีน้ำหนักสูงสุด

Search & Stop: รันการกำหนดค่าโมเดลต่าง ๆ และหยุดเมื่อตรงตามเงื่อนไขที่ต้องการ

while total_duration < 24:
      model_to_run()

Score & Rank: ให้คะแนนผลลัพธ์การจำลองตามเกณฑ์การถ่วงน้ำหนัก

for i in range(num_runs):
   out_1, out_2 = model_to_run(i)
   scores[i] = 0.3 * out_1 + 0.7 * out_2
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

แนวทางที่ 1: Search & Stop

  • ใช้การสุ่มตัวอย่างแบบมอนเตคาร์โลเพื่อรันหลายสถานการณ์
  • ประกอบด้วยกระบวนการที่ไม่กำหนดแน่นอนหลายรูปแบบ
  • ลูปค้นหาสถานการณ์ที่เหมาะสมจะหยุดเมื่อตรงตามเงื่อนไข

ตัวอย่าง

scenario_num = 0
while scenario_num == 0 or total_duration[s] > 40:
  scenario_num += 1
  env = simpy.Environment()
  env.process(manufacturing_proc(env))
  env.run()
  plot_results()

กราฟแสดง response envelope ของกิจกรรมการผลิตที่ประกอบด้วยกระบวนการลำดับขั้นต่อเนื่อง โดยเส้นสีน้ำเงินด้านล่างคือการรันสุดท้ายที่ผ่านเงื่อนไขของวิธี Search & Stop

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

แนวทางที่ 2: Score & Rank

  • ใช้การสุ่มตัวอย่างแบบมอนเตคาร์โลเพื่อรันหลายสถานการณ์
  • ให้คะแนนและจัดอันดับผลลัพธ์

ตัวอย่าง: อุตสาหกรรมการผลิต

ประกอบด้วยงานลำดับขั้นต่าง ๆ (หรือกระบวนการ) เช่น สายการผลิตรถยนต์

def objective_function_calc():
  score_objfunc = np.ones(num_scenarios)

  for s in range(num_scenarios):
    for p in range(len(processes)):

      score_objfunc[s] += (
         processes[p]["duration_hours"]
         * processes[p]["score_weight"])
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

แนวทางที่ 2: Score & Rank

คะแนน

"RED": คะแนนต่ำ; "BLUE": คะแนนสูง Scatter plot แสดงคะแนนฟังก์ชันวัตถุประสงค์ของสถานการณ์จำลองต่าง ๆ สำหรับกระบวนการ "Unloading and Preparing", "Cutting" และ "Polishing"

การจัดอันดับ

จัดอันดับการรันการจำลองตามคะแนน กราฟจัดอันดับสถานการณ์ตามคะแนนฟังก์ชันวัตถุประสงค์ของสถานการณ์จำลองต่าง ๆ สำหรับกระบวนการ "Unloading and Preparing", "Cutting" และ "Polishing"

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

การระบุกระบวนการวิกฤตที่จำกัดประสิทธิภาพ

Search & Stop

กราฟแสดง response envelope ของกิจกรรมการผลิตที่ประกอบด้วยกระบวนการลำดับขั้นต่อเนื่อง โดยเส้นสีน้ำเงินด้านล่างคือการรันสุดท้ายที่ผ่านเงื่อนไขของวิธี Search & Stop พร้อมเน้นระยะเวลาขั้นต่ำของแต่ละกระบวนการจากการจำลองที่ดีที่สุด

  • เส้น "Blue" ผ่านเงื่อนไข "stop"

    • ระยะเวลารวม = 30 นาที
  • ผลลัพธ์แยกย่อยของการจำลองที่ "ดีที่สุด":

    • กระบวนการ 1: ประมาณ 10 นาที (sum = 20 min)
    • กระบวนการ 2: ประมาณ 10 นาที (sum = 20 min)
    • กระบวนการ 3: ประมาณ 8 นาที (sum = 28 min)
    • กระบวนการ 4: ประมาณ 2 นาที (sum = 30 min)
  • "กระบวนการ 1" มีความสำคัญในการบรรลุเป้าหมายนี้

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

การระบุกระบวนการวิกฤตที่จำกัดประสิทธิภาพ

คะแนน

วัตถุประสงค์: คะแนนต่ำสุด = ระยะเวลาสั้นที่สุด Scatter plot แสดงคะแนนฟังก์ชันวัตถุประสงค์ของสถานการณ์จำลองต่าง ๆ สำหรับกระบวนการ "Unloading and Preparing", "Cutting" และ "Polishing" พร้อมเน้นระยะเวลาขั้นต่ำของแต่ละกระบวนการจากการจำลองที่ดีที่สุด

การจัดอันดับ

"กระบวนการ 1" มีความสำคัญในการบรรลุเป้าหมายนี้ กราฟจัดอันดับสถานการณ์ตามคะแนนฟังก์ชันวัตถุประสงค์ของสถานการณ์จำลองต่าง ๆ สำหรับกระบวนการ "Unloading and Preparing", "Cutting" และ "Polishing" พร้อมเน้นระยะเวลาขั้นต่ำของแต่ละกระบวนการจากการจำลองที่ดีที่สุด

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

มาฝึกกันเถอะ!

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

Preparing Video For Download...