ComBioLaw.De » Blog » เขียนโปรแกรม » Simulation : หวยใต้ดิน vs ไฮโล
Simulation : หวยใต้ดิน vs ไฮโล
มีโจทย์หนึ่งข้อ ที่ยากมาก ๆ แม้แต่ Prof. เองก็ยอมแพ้ แต่ก็ไม่ได้ออกมาเป็นข้อสอบ เพื่อแกล้งเด็ก นั่นก็คือ ต้องซื้อ Lotto (หวยเยอรมัน) อย่างน้อยเท่าไร และซื้ออย่างไรถึงจะถูกรางวัล หากวิธีการเล่น Lotto ง่ายเหมือนหวยบ้านเรา โจทย์ข้อนี้คงขาดความท้าทาย แต่ให้ตายเหอะ หวยเยอรมันมันซับซ้อนมากมาย จนวันนี้ผมก็ยังงง ๆ อยู่ว่ามันเล่นยังไง เลยกลายเป็นว่าโจทย์ข้อนี้จึงเป็นโจทย์คลาสสิก สำหรับวิชา combinatorics ไป ปกติแล้ว เวลาจะดูว่าการพนันแบบไหน น่าเล่นกว่ากัน จะไม่ได้ดูแค่ความน่าจะเป็นอย่างเดียว ต้องดูค่า expectation ด้วย เวลาคำนวนก็ยากน่าดู เพราะเราไม่รู้ว่า PDF (probability density function) ของการพนันนั้น ๆ เป็นอย่างไร ด้วยความที่ผมเป็นวิศกรผู้ขี้เกียจ เลยใช้วิธี simulation เอา โดยผมได้นำการพนัน ที่นิยมเล่นที่สุดของคนไทยสองอย่าง นำมาเปรียบเทียบกัน นั่นก็คือ หวยใต้ดิน กับ ไฮโล ซึ่งผลการ Simulation เป็นดังนี้ ... |
|
|||||||||||||||
|
#!/usr/bin/python from numpy.random import randint def lotto(plays, num_per_play): money = 0 wins = 0 not_play = [111, 222, 333, 444, 555, 666, 777, 888, 999, 012, 123, 234, 456, 678, 789, 987, 876, 765, 654, 432, 321, 210] for i in xrange(plays): to_play = {} for j in xrange(num_per_play): pay = 10 money = money-pay while True : play_num = randint(100,998) if not play_num in not_play and not play_num in to_play: break to_play[play_num] = pay win = randint(0,999) if win in to_play : money = money + 500 * to_play[win] wins = wins + 1 print money/float(plays), wins/float(plays) def hilo(plays) : money = 0 wins = 0 for i in xrange(plays): play = randint(1,7) win = [randint(1,7), randint(1,7), randint(1,7)] if play in win : money = money + 100 wins = wins+1 else : money = money - 100 print money/float(plays), wins/float(plays) if __name__ == '__main__' : hilo(1000000) lotto(100000 ,100) lotto(100000 ,10) lotto(100000 ,1)plain code ในตัวโปรแกรมผมได้ใช้ Gaussian PDF เป็นโมเดลในการ simulation เพราะรู้จักอยู่ตัวเดียว :P และในการเล่นหวย ผมได้ตัดเลขบางตัวออก ซึ่งดูแล้ว ไม่น่าจะมีคนซื้อ
ผลการ Simulation
สรุป
|
||||||||||||||||
23 Jul 07 | by | tags เขียนโปรแกรม Python การพนัน หวยใต้ดิน ไฮโล
bow_der_kleine
พี่แปงกำลังจะบอกว่า เราสามารถรู้ค่า p_x โดยไม่จำเป็นต้องรู้ pdf หรือเปล่าครับ ส่วนสวนนั้น ผมไม่แน่ใจครับ ว่าเป็นที่เดิมหรือเปล่า เพราะก่อนหน้านี้ไม่เคยไป แต่ไปมาแล้วรู้สึกว่าเป็นอะไรที่มีสีสันมาก แม้ว่าจะออกเทา ๆ หน่อยก็ตาม :P |
bow_der_kleine
ผมกำลังงงความคิดเห็นของพี่แปงมากขึ้นเรื่อย ๆ ครับ กรุณาเขียนให้ชัดเจนด้วยครับ |
โคตรสนองของโคตรเสนอ
ว่าจะโยงเรื่องนี้เอาไปเขียนบลอกตัวเองหากิน แต่ขี้เกียจอ้ะพี่ หนูชอบมากเรื่องเศรษฐศาสตร์การพนันเนี่ย แต่หนูตกเลขอ้ะ วิชาอื่นก็ไม่ได้เรื่อง เอาเป็นว่าหนูไม่เอาสมการตัวเลขมาเป็นตัวตั้งแล้วกัน แต่จะขอฟันธงว่าซื้อหวยยังไงก็รวยยาก เหตุผลก็คือว่า การซื้อหวยนั้นคนส่วนมากจะคิดว่าซื้อๆไปเหอะ ถูกก็ถือเป็นบุญที่ได้เงินมาใช้ฟรีๆ มันจะฟรีได้ยังไงในเมื่อมันเหมือนกับเอาเงินตัวเองไปฝากไว้กับเจ้ามือหวย ได้คืนมั่งไม่ได้คืนมั่ง แถมต้องส่งดอกทุกสิบห้าวัน แถมเงินที่ได้มามันไม่ใช่ลาภลอยนะ มันมีที่มาที่ไป คือได้เงินของตัวเองที่เสียๆไปมาใช้! ถ้าได้มากหน่อยก็คือเป็นเงินของคนอื่นที่ลงเรือลำเดียวกันที่ก็หวังว่าจะได้เงินของตัวเองคืนและได้เงินของคนอื่นไปใช้เหมือนกัน เล่นหวยมันอาจจะเหมือนกีฬา ตรงที่คนส่วนใหญ่มักจะนึกว่าเจ้ามือหรือกองสลากคือแชมป์ที่ต้องรักษาตำแหน่ง แต่คนเล่นหวยธรรมดาอย่างเราๆนี่เหมือนมือสมัครเล่นที่บังเอิญชนะบายได้เข้ารอบไฟนอล ถ้าแพ้ก็เต๊าๆเพราะเราไม่มีอะไรจะเสีย ถ้าชนะก็เป็นโชคที่ได้รางวัลมากอดจูบลูบคลำบ้าง เงินที่เสียไปกับหวยที่ไม่เคยถูกถือว่าเป็นการเดินสายซ้อมมือหาความเชี่ยวชาญในตัวเลขไปก่อน แต่ปัญหาที่ต่อมาก็คือ เมื่อถูกหวยบ้างแล้วเราก็ได้เลื่อนตำแหน่งขึ้นไปเป็นมือวางบ้าง ทีนี้การฟาดฟันเพื่อรักษาแชมป์จึงย่อมเกิดขึ้น คนเคยถูกหวยก็ยังคงซื้อหวยต่อไปหวังจะได้ครองแชมป์หลายสมัย คนไม่เคยถูกก็ตั้งหน้าตั้งตาซื้อต่อไปหวังจะเป็นมือวางกับเขาบ้าง การจะรวยด้วยหวยมันยากอยู่มาก เอาแค่เลขท้ายสองตัวนะ แค่ร้อยตัวเลขตั้งแต่ 00-99 มันจะออกมาให้ถูกอยู่เลขเดียวเท่านั้น ตัวเลขอื่นๆที่คนแทงอีกเก้าสิบเก้าตัวเลขล่ะ คิดง่ายๆ สมมุติว่าการที่คนแทงเลขแต่ละตัวด้วยจำนวนเงินห้าบาทเท่ากัน ตัวเลขเก้าสิบเก้าตัวที่ไม่ออกรางวัลเป็นเงิน 99x5=4950 เลขตัวที่ออกคนแทงห้าบาท สมมุติว่าบาทละเจ็ดสิบ คนถูกก็ได้ไปแค่ 350 เจ้ามือก็ยังได้เงินมาปูเตียงนอน 4600 แล้วคิดจะโค่นแชมป็อย่างเจ้ามือมันจะไหวเร๊อะ? |
โคตรสนองของโคตรเสนอ
อ้อ ลืมไป ที่เหลือเอาไปคิดเป็นการบ้านเอาเองนะจ๊ะระหว่างรางวัลเลขท้ายสามตัวหกรางวัล ที่มีความน่าจะเป็นอยู่ที่ 6:1,000 แต่เลขที่ออกแต่ละตัวมี่ค่าอยู่ที่ 1:1,000 รางวัลที่หนึ่งอยู่ที่ 1:100,000 ยังไม่นับความเสี่ยงของหวยไทยต่อการเจอเลขล็อค คิดแล้วหนูก็โอ่ว ม๊ายก่อด! |
pamkku
พึ่งจะเรียนจบเมื่อสัปดาห์ที่แล้ว เรื่อง Mathematical Expectation การยกตัวอย่างก็วนเวียนอยู่กับ ลูกเต๋า การถูกรางวัลลอตเตอรื และไพ่ the expected value random varible กรณีที่เป็น discrete คำนวณตามสูตรที่คุณแปงให้ไว้ กรณีที่เป็น continuous random variable คำนวณโดยการ intregration ตามสูตรที่คุณแปงให้ไว้เช่นกัน |
pamkku
ไม่แน่ใจว่าจะคุณ bow_der_kleine จะนำไปใช้ประโยชน์ได้รึเปล่า เนื่องจากเรียนทางด้าน biostatistic คณิตศาสตร์ที่เรียนคงจะไม่เข้มข้น ดุเดือด เหมือนกับทางฝั่งวิศวกรเรียนอยู่ก็เป็นได้ หากต้องการดูรายละเอียดอ้างอิงจากตำราของ John E.Freund Mathematical Statistic ,1992 Chapter 5 |
ใคร ๆ ก็บอกว่า การพนันเป็นสิ่งไม่ดี แต่เท่าที่สังเกต ไม่ว่าห้องเรียนคณิตศาสตร์ว่าด้วยเรื่องของสถิติที่ใด ก็มักจะยกเอาเรื่องของการพนัน มาเป็นตัวอย่างให้นักเรียนคิด อย่างตอนที่ผมเรียน ก็มีทั้งหวย โป้กเก้อ ไฮโล และอื่น ๆ อีกมากมาย ที่ถูกนำมาตั้งโจทย์ทางคณิตศาสตร์ให้นักศึกษาได้คิดกัน แบบง่าย ๆ ก็จะคิดแค่ความน่าจะเป็น แบบยากขึ้นมาหน่อย ก็จะมีเรื่องของ expectation เข้ามาเกี่ยวข้องด้วย
พี่แปง
"ต้องดูค่า expectation ด้วย เวลาคำนวนก็ยากน่าดู เพราะเราไม่รู้ว่า PDF (probability density function) ของการพนันนั้น ๆ เป็นอย่างไร"
ตรงนี้ไม่เกี่ยวมังครับ
E[X] = sum_x (x*p_X(x))
p_X = probability mass function = the probability of the event {X=x}
ปล. สวนนั้นกลับมาเปิดอีกแล้วเหรอครับ ได้ข่าวว่าคนตุรกีไปแย่งขายแล้วทำสกปรกก็เลยโดนกวาดล้างไป(อีกครั้ง)
ครั้งก่อนหน้าโดนเพราะว่ามีคนไปกินปลาราดพริกแล้วท้องร่วง แล้วตรวจพบว่าเกิดจากอาหารสกปรก
ปล. 2 ใครอยากดูคนเยอรมันถือกระเช้าใส่เครื่องปรุงเสริฟลูกค้าก็ไปดูได้ที่นั่นเน้อ
23 Jul 07