مسئله مونتی هال یک معمای معروف است که از یک برنامه تلویزیونی آمریکایی به نام “Let’s Make a Deal” گرفته شده است. در این مقاله، من به شما برنامهای را برای شبیه سازی مسئله مونتی هال با زبان برنامه نویسی پایتون معرفی خواهم کرد.
مقدمه ای بر مسئله معروف مونتی هال
شواهد نشان میدهد که درک این بازی برای بسیاری از افراد سخت است و زمانی که مسئله مونتی هال در روزنامهها یا فهرستهای بحث مطرح میشود، معمولاً منجر به یک بحث طولانی در نامههای سردبیران و تابلوهای اطلاعرسانی الکترونیکی میشود.
مسئله مونتی هال به این صورت است:
-
این برنامه سه درب دارد. یک جایزه مانند ماشین یا تعطیلات پشت یک درب قرار دارد و دو درب دیگر یک جایزه بیارزش به نام “Zonk” پنهان کردهاند؛ در بیشتر بحثها، Zonk یک بز است.
-
شرکتکننده یکی از دربها را انتخاب میکند. ما فرض میکنیم که شرکتکننده هیچ اطلاعات داخلی از اینکه کدام درب جایزه را پنهان کرده ندارد، بنابراین او به طور تصادفی یک درب را انتخاب میکند.
-
مجری خوشبرخورد، مونتی هال، یکی از دربهای دیگر را باز میکند، همیشه دربی را که بز پشت آن قرار دارد انتخاب میکند و همیشه به شرکتکننده این فرصت را میدهد که انتخاب خود را تغییر دهد و به درب باقیمانده که باز نشده است برود.
-
شرکتکننده تصمیم میگیرد که درب خود را تغییر دهد یا به انتخاب اولیهاش پایبند بماند.
سورس شبیه سازی مونتی هال با پایتون
شبیه سازی مسئله مونتی هال با پایتون بسیار ساده است. ما یک تابع خواهیم نوشت که از ماژول تصادفی پایتون استفاده میکند تا انتخاب کند که کدام درب جایزه را پنهان کرده است، انتخاب اولیه شرکتکننده و اینکه مونتی کدام دربها را باز خواهد کرد.
یک پارامتر ورودی کنترل میکند که آیا شرکتکننده تصمیم به تغییر انتخاب خود میگیرد یا نه، و سپس تابع یک مقدار بولی برمیگرداند که نشان میدهد آیا انتخاب نهایی شرکتکننده درب برنده بوده است یا خیر.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import random from random import seed, randint import numpy def game(winningdoor, selecteddoor, change=False): assert winningdoor < 3 assert winningdoor >= 0 # Presenter removes the first door that was not selected neither winning removeddoor = next(i for i in range(3) if i != selecteddoor and i != winningdoor) # Player decides to change its choice if change: selecteddoor = next(i for i in range(3) if i != selecteddoor and i != removeddoor) # We suppose the player never wants to change its initial choice. return selecteddoor == winningdoor if __name__ == '__main__': playerdoors = numpy.random.random_integers(0,2, (1000 * 1000 * 1,)) winningdoors = [d for d in playerdoors if game(1, d)] print("Winning percentage without changing choice: ", len(winningdoors) / len(playerdoors)) winningdoors = [d for d in playerdoors if game(1, d, change=True)] print("Winning percentage while changing choice: ", len(winningdoors) / len(playerdoors)) |
سورس های کاربردی پایتون
- سورس چاپ رنگی متن با پایتون
- سورس ساعت دیجیتال با پایتون
- سورس دریافت تصاویر زنده از دوربین تلفن همراه در پایتون
- سورس اختصاری کردن کلمات در پایتون
- سورس ساخت داستان تصادفی در پایتون
- سورس ساخت پسورد تصادفی در پایتون
- سورس ماشین حساب BMI با پایتون
- سورس دریافت چند ورودی با حلقه while در پایتون
- سورس نمایش نوتیفیکیشن در دسکتاپ با پایتون
- سورس استخراج متن از ویدیو با پایتون
- گرافیک های لاک پشتی با پایتون
در صورت تمایل از بخش سورس و پروژه پایتون دیدن فرمایید.
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- انتشار: ۲۸ فروردین ۱۴۰۴
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- دوره های تخصصی برنامه نویسی
- رپورتاژ
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره آموزش Go
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس