130 likes | 322 Views
بهنام خالق خِرد. مبانی برنامهسازی Fundamentals of Programming. مدرس: بینظیر بیگلری. جلسه 20: توابع تصادفی وشبیهسازی (1). عناوین. تولید اعداد تصادفی گشت تصادفی نمونهگیری تصادفی (فصل 12 از کتاب اصلی). جلسه 20. ماژول random.
E N D
بهنام خالق خِرد مبانی برنامهسازیFundamentals of Programming مدرس: بینظیر بیگلری جلسه 20: توابع تصادفی وشبیهسازی (1) مبانی برنامهسازی - دانشگاه صنعتی شریف
عناوین • تولید اعداد تصادفی • گشت تصادفی • نمونهگیری تصادفی (فصل 12 از کتاب اصلی) مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
ماژول random • یک ماژول، فایلی است حاوی تعاریف و دستورات پایتون که در برنامههای دیگر میتواند مورد استفاده قرار گیرد. • ماژولهای زیادی وجود دارند که قسمتی از کتابخانه استاندارد پایتون هستند. • گاهی لازم است در برنامه از اعداد تصادفی استفاده کنیم: • انجام یک بازی مبتنی بر شانس که در آن باید تاس یا سکه انداخته شود. • بُرزدن کارتها. • قراردادن ناوهای جنگی به طور تصادفی و آغاز بازی. • رمزگذاری فعالیتهای بانکی که از طریق اینترنت انجام میشود. • برای انجام این اعمال و مشابه آنها از ماژول random استفاده میکنیم. مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
ماژول random(ادامه) • متد randrange یک عدد صحیح بین آرگومانهای بالا و پایین ایجاد میکند؛ مشابه تابع range شامل عدد ابتدای بازه میشود ولی انتهای بازه را شامل نمیشود. • تمام اعداد احتمال رخداد یکسانی دارند و توزیع رخدادهای یکنواخت است. • همانند تابع range، میتوان به طور اختیاری اندازه گام را نیز تعیین کرد؛ اگر یک عدد تصادفی فرد و کوچکتر از صد مورد نظر ما باشد: مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
تولید اعداد تصادفی • متد random یک عدد ممیز شناور در بازه [0.0, 1.0) تولید میکند. • معمولاً روی نتیجه این متد آن را مقیاسبندی به بازه مطلوب میکنند که در مثال زیر در بازه [0.0, 5.0)بیان شدهاست و این توزیع یکسان و یکنواخت میباشد. مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
گشت تصادفی • مثال زیر نشان میدهد که چگونه میتوان یک لیست از مقادیر را بُر زد (shuffle) • از آنجا که shuffle نمیتواند مستقیماً با یک تابع تنبل مثل range کار کند بنابراین آن را با تابع list به یک لیست تبدیل کردهایم. مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
آزمون و قابلیت تکرار • تولید اعداد تصادفی براساس یک الگوریتم قطعی (تکرارپذیر و قابل پیشبینی) انجام میشود پس به آن تولیدکننده اعداد شبهتصادفی میگویند که حقیقتاً تصادفی نیستند. • با یک مقدار seed شروع میشوند و هر زمان که یک عدد تصادفی بخواهید، آن را بر اساس مقدار seed فعلی تولید میکند و وضعیت seed را که یک attrib. است بهروز مینماید. • برای خطایابی و نوشتن آزمون واحد باید قابلیت تکرار داشته باشیم چون برنامهها همیشه یک چیز واحد را اجرا میکنند پس میتوان اعداد تصادفی تولید کرد که همیشه seed اولیه یک مقدار مشخص باشد و این مسئله ممکن است تنها در زمان آزمون مطلوب باشد (به عنوان مثال وقتی میخواهید یک بازی که مبتنی بر شانس است انجام دهید درست نیست که دقیقاً همچون ترتیب دور بازی قبل باشد چون بازی خستهکننده میشود). تولید یک عدد بر اساس یکمقدار مشخص seed مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
لیست اعداد تصادفی • برای ایجاد لیستی حاوی n عدد تصادفی با حد پایین و بالای مشخص یک راه آن در ذیل بیان شدهاست: • گاهی وجود تکرار در بین اعداد تصادفی ایجادشده مطلوب است مثل نمونه بالا اما اگر اعداد تصادفی را به صورتی که تکراری نباشند بخواهیم ایجاد کنیم... مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
لیست اعداد تصادفی (ادامه) • مثلاً پنج ماه متمایز را از 12 ماه بخواهیم تصادفی انتخاب کنیم یک راهحل آن است که آنها بُر بزنیم و یک برش پنجتایی جدا نماییم. • در درسهای آماری اولین مثال که در آن اجازه تکرار داریم مسئلهای مطرح میشود که توپهایی از جعبه بیرون میآوریم و با جایگذاری یعنی هر توپ که خارج میشود شماره آن یادداشتشده و به جعبه بازمیگردد و دوباره توپ دیگری خارج میشود پس احتمال تکرار وجود دارد. • همین مسئله را اگر بدون جایگذاری در نظر بگیریم راهحل کمی متفاوت خواهد بود چون توپی که یک بار انتخاب میشود دیگر به جعبه باز نمیگردد و در نتیجه تکرار نخواهد شد. مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
انتخاب بدون جایگذاری • راهحل «بُر زدن و برش» اگر در یک دامنه کوچک مطرح شود مشکلی نیست امّا وقتی دامنه بسیار بزرگ است این راهحل مناسب نیست. • فرض کنید پنچ عدد در بین اعداد 1 تا ده میلیون قرار است انتخاب شوند و جایگذاری نداریم. تولید ده میلیون عدد و بُرزدن آنها سپس برش دادن لیست چه میزان کارایی را پایین میآورد: مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
بازیهای مبتنی بر شانس • انواع بازیهای مبتنی بر شانس که در آن انتخاب از بین گزینههایی که مشخص نیستند یا انداختن تاس یا سکه و یا بُرزدن کارتها و انتخاب از بین آنها با استفاده از راهحلهای گفته شده قابل شبیهسازی است. • بسته به نوع بازی که آیا جایگذاری ممکن است یا خیر میتوان راهحل درست را انتخاب نمود. مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
مثال • تابعی بنویسید که با دریافت عدد n به همان تعداد یک تاس را انداخته و با استفاده از یک نمودار میلهای تعداد رخدادهای هر عدد را رسم کند. defdice(n): ''‘Return a list that hasnumber of each number has been occurred ''' rng = random.Random() result = [0] * 6 for i in range(n): r = rng.randrange(0, 6) result[r] += 1 returnresult #main n = int(input('Number of throwing dice: ')) s = dice(n) ind= list(range(1, 7)) width = .25 bar(ind, s, width) show() مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20
ادامه مطلبدر جلسه بعد ادامه توابع تصادفی و شبیهسازی مبانی برنامهسازی - دانشگاه صنعتی شریف جلسه 20