วิทย์ม.ต้น: “ปัญหาเลือกคู่” (Optimal Stopping Problem)

(ลิงก์ดาวโหลดอยู่ด้านล่าง)

เราคุยต่อเนื่องมากจากสัปดาห์ที่แล้วที่เด็กๆได้รู้จัก “ปัญหาเลือกคู่” แล้วให้พยายามเขียนโปรแกรมเช็คว่าเป็นจริงตามที่ทฤษฎีบอกหรือไม่ เรามาเฉลยกันในห้องครับ

 “ปัญหาเลือกคู่” (marriage problem หรือ secretary problem) หรือรู้จักในชื่อทั่วไปคือ optimal stopping problem คือสมมุติว่าเรามีโอกาสคบคนทั้งหมด n คน โดยที่ต้องคบทีละคน และต้องเลิกคบกับคนปัจจุบันก่อนที่จะไปคบคนต่อไป เมื่อเลิกคบกับใครแล้วห้ามกลับไปคบกับเขาอีก แล้วต้องตัดสินใจว่าจะเลือกใครเป็นคู่ โดยหวังว่าจะเลือกคนที่ดีที่สุดใน n คนนี้ 

ปรากฎว่ามีวิธีที่ทำให้เรามีโอกาสประมาณ 37% ที่จะเลือกคนที่ดีที่สุดได้ ไม่ว่าจำนวน n จะเป็น 3, 10, 100, หรือ 1 ล้าน คือให้คบคนไป n/e คนก่อน (e เป็นค่าคงที่ 2.71828… เรียกว่าค่าอีหรือค่าคงที่ของออยเลอร์) อย่าพึ่งเลือกคนเหล่านี้ จากนั้นให้เลือกคนแรกที่ดีกว่าคนที่เคยคบมา (หรือเลือกคนสุดท้ายเมื่อไม่เหลือใครแล้ว) ยกตัวอย่างเช่นถ้าเราคิดว่าคงมีเวลาคบคน 10 คน ค่า n ของเราก็คือ 10 ดังนั้นให้เราคบไป 10/e = 10/2.71828… = 3.6787.. เท่ากับประมาณ 4 โดยที่เรายังไม่ตัดสินใจเลือกใครใน 4 คนนี้ ต่อไปเราคบกับคนที่เหลือทีละคน แล้วเลือกคนแรกที่ดีกว่าคนที่เราเคยคบมา ถ้าหาไม่ได้ก็เลือกคนสุดท้าย

หน้าตาโปรแกรมที่ทดสอบวิธีหาคู่แบบนี้ก็จะมีหน้าตาประมาณนี้ครับ:

ให้คอมพิวเตอร์ทดลองแทนคน 10,000 คนได้ผลสำเร็จประมาณ 37% หรือมากกว่าครับ:

ผมบันทึกตัวอย่างเหล่านี้ไว้ให้เด็กๆและผู้สนใจเข้ามาดูทบทวนโดยสามารถโหลด Jupyter Notebook ได้ที่นี่ หรือดูออนไลน์ได้ที่นี่นะครับ

One thought on “วิทย์ม.ต้น: “ปัญหาเลือกคู่” (Optimal Stopping Problem)”

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.