การสุ่มเหตุการณ์และเมธอดแบบ Pseudo-random

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

Diogo Costa (PhD, MSc)

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

การสุ่มกระบวนการ (หรือเหตุการณ์)

การสุ่มคืออะไร?

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

ข้อควรทราบ: คอมพิวเตอร์ไม่สามารถสร้างตัวเลขที่สุ่มได้จริงๆ โดยธรรมชาติ

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

Random vs. Pseudo-random

การสร้างตัวเลขแบบ "สุ่มจริง"

  • ตัวเลขที่สุ่มได้อย่างแท้จริง
  • ความสุ่มถูกจำกัดโดยข้อจำกัดของเครื่อง

การสร้างตัวเลขแบบ Pseudo-random

  • ตัวเลขถูกสร้างตามการแจกแจงความน่าจะเป็น
  • การแจกแจงทางสถิติจะชัดขึ้นเมื่อจำนวนตัวอย่างเพิ่มขึ้น

ตัวอย่าง: โรงงานที่มีงานประกอบด้วยมือ

กราฟกระจายแสดงระยะเวลาของงานประกอบด้วยมือที่ทำซ้ำหลายครั้ง

  • การแจกแจงความน่าจะเป็นเหมาะสมกว่าสำหรับการสร้างการเกิดขึ้นครั้งถัดไปแบบ pseudo-random
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

แพ็กเกจสำหรับ Pseudo-randomization

สามารถใช้แพ็กเกจสถิติได้หลายตัว:

  • NumPy
  • SciPy
  • statsmodels
  • pandas
  • Random
  • scikit-learn

แพ็กเกจ Random

  • สร้างตัวเลขแบบ random และ pseudo-random

จุดเน้นของเรา

  • เมธอดที่ใช้บ่อยในโมเดล discrete-event
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ตัวเลขสุ่มในช่วงที่กำหนด

จำนวนเต็มสุ่มในช่วงที่กำหนด

เมธอด:

random.randint(start, end)

ตัวอย่าง: จำนวนเต็มสุ่มระหว่าง 3 (รวม) และ 9 (ไม่รวม)

random.randint(3, 9)
5

ตัวเลขทศนิยมสุ่มในช่วงที่กำหนด

เมธอด:

random.uniform(start, end)

ตัวอย่าง: ตัวเลขทศนิยมสุ่มระหว่าง 3 และ 9

random.uniform(3, 9)
6.4557754
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ตัวอย่างสุ่มและ sequence

ตัวอย่างสุ่มจาก sequence

เมธอด:

random.sample(mylist, k=number_samples)

ตัวอย่าง: 2 สมาชิกสุ่มจากลิสต์

mylist = ["apple", "banana", "cherry"]
random.sample(mylist, k=2)
['cherry', 'banana']

สับเปลี่ยนลิสต์ (เรียงลำดับสมาชิกใหม่)

เมธอด:

random.shuffle(mylist)

ตัวอย่าง: การเรียงลำดับสมาชิกในลิสต์ใหม่แบบสุ่ม

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

การแจกแจงแบบเกาส์และเอกซ์โพเนนเชียล

การแจกแจงแบบเกาส์

เมธอด:

random.gauss(average, standard_dev)

ตัวอย่าง: ตัวเลขทศนิยม pseudo-random ที่มีค่าเฉลี่ย 100 และส่วนเบี่ยงเบนมาตรฐาน 50

random.gauss(100, 50)
123.59383

การแจกแจงแบบเอกซ์โพเนนเชียล

เมธอด:

random.expovariate(lambda)
  • if lambda>0, results [0, infinity]
  • if lambda<0, results [-infinity, 0]

ตัวอย่าง: ตัวเลขทศนิยม pseudo-random โดยใช้การแจกแจงแบบเอกซ์โพเนนเชียลที่ lambda เท่ากับ 1.5: random.expovariate(1.5)

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

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

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

Preparing Video For Download...