بهنام خالق خِرد مبانی برنامه سازی F UNDAMENTALS OF P ROGRAMMING مدرس : بینظیر بیگلری جلسه :21 توابع تصادفی وشبیهسازی ( )2 دانشکده مهندسی کامپیوتر مبانی برنامهسازی

Download Report

Transcript بهنام خالق خِرد مبانی برنامه سازی F UNDAMENTALS OF P ROGRAMMING مدرس : بینظیر بیگلری جلسه :21 توابع تصادفی وشبیهسازی ( )2 دانشکده مهندسی کامپیوتر مبانی برنامهسازی

‫بهنام خالق خِرد‬
‫مبانی برنامه سازی‬
‫‪F UNDAMENTALS OF P ROGRAMMING‬‬
‫مدرس‪ :‬بینظیر بیگلری‬
‫جلسه ‪ :21‬توابع تصادفی وشبیهسازی (‪)2‬‬
‫دانشکده مهندسی کامپیوتر‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی‬
‫شریف‬
‫عناوین‬
‫‪2‬‬
‫‪ ‬توزیع رخدادها‬
‫‪‬‬
‫توزیع نرمال‬
‫‪‬‬
‫قضیه حد مرکزی‬
‫‪ ‬مسئله هشت وزیر (فصل ‪ 14‬از کتاب اصلی)‬
‫‪ ‬ماژول ‪time‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫توزیع رخ دادها‬
‫‪3‬‬
‫‪‬‬
‫در علم آمار و احتمال اگر رخدادها را در یک نمودار رسم کنیم سطح زیر نمودار ‪ 1‬خواهد بود‪.‬‬
‫‪‬‬
‫بهترین شاخص مركزي توصیف هر توزیع كمي‪ ،‬میانگین است‪.‬‬
‫‪‬‬
‫بهترین شاخص مركزي براي میانگین‪ ،‬انحراف معیار است‪.‬‬
‫‪‬‬
‫توزیع نرمال‪ ،‬یکی از مهمترین توزیعهای احتمالی پیوسته در نظریه احتماالت است‪ .‬دلیل اصلی‬
‫این پدیده‪ ،‬نقش توزیع نرمال در قضیة حد مرکزی است‪ .‬این قضیه میگوید که هنگامی که تعداد‬
‫بسیار زیادی متغیر تصادفی با توزیع دلخواه (و البته با واریانس محدود) را با هم جمع کنیم و‬
‫میانگین بگیریم‪ ،‬توزیع نهایی به توزیع نرمال میل میکند‪ .‬به همین خاطر هنگامی که شاهد تأثیر‬
‫جمعی بسیاری از پدیدههای تصادفی هستیم‪ ،‬نتیجة نهایی با توزیع نرمال قابل توصیف است‪.‬‬
‫‪‬‬
‫این قانون که تحت شرایط و مفروضات طبیعی نیز برقرار است‪ ،‬سبب شده که برایند نوسانهای‬
‫مختلف تعداد زیادی از متغیرهای ناشناخته‪ ،‬در طبیعت به صورت توزیع نرمال آشکار شود‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫توزیع نرمال‬
‫‪4‬‬
‫‪‬‬
‫با اینکه متغیرهای زیادی بر میزان خطای اندازهگیری یک کمیت اثر میگذارند‪( ،‬مانند خطای‬
‫دید‪ ،‬خطای وسیله اندازهگیری‪ ،‬شرایط محیط و ‪ )...‬اما با اندازهگیریهای متعدد‪ ،‬برایند این‬
‫خطاها همواره دارای توزیع نرمال است که حول مقدار ثابتی پراکنده شده است‪ .‬مثالهای دیگری‬
‫از این نوسانهای طبیعی‪ ،‬طول قد‪ ،‬وزن یا بهرة هوشی افراد است‪.‬‬
‫‪‬‬
‫این توزیع گاهی به دلیل استفاده کارل فردریک گاوس از آن در کارهای خود با نام توزیع گوسی‬
‫(گاوسی) نامیده میشود؛ همچنین به دلیل شکل این توزیع‪ ،‬با نام انحنای زنگولهای (زنگدیس)‬
‫نیز معروف است‪.‬‬
‫‪‬‬
‫تابع احتمال این توزیع دارای دو پارامتر است که یکی تعیینکنندة مکان )‪ (μ‬و دیگری‬
‫تعیینکنندة مقیاس)‪ (σ‬توزیع هستند‪.‬‬
‫‪‬‬
‫منحنی تابع احتمال حول میانگین توزیع‪ ،‬متقارن است‪ .‬در حالت خاص اگر ‪ μ = 0‬و ‪σ = 1‬‬
‫باشد توزیع‪ ،‬نرمال استاندارد نامیده میشود‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫توزیع نرمال‬
‫( ادامه )‬
‫‪5‬‬
‫‪ ‬شاخصهای نماینده توزیع نرمال‪:‬‬
‫‪‬‬
‫‪‬‬
‫میانگین )‪ :)µ‬نشاندهنده تراکم دادهها حول یک مقدار‬
‫انحراف معیار )‪ :(σ‬نشاندهنده میزان پراکندگی دادهها از میانگین‬
‫احتمال‬
‫‪1‬‬
‫‪95%‬‬
‫‪66%‬‬
‫‪µ + 2σ‬‬
‫دانشکده مهندسی کامپیوتر‬
‫‪µ+σ‬‬
‫‪µ‬‬
‫جلسه ‪21‬‬
‫‪µ-σ‬‬
‫‪µ - 2σ‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫تابع توزیع‬
‫‪6‬‬
‫‪ ‬از ماژول ‪ random‬توابع ‪ gauss‬و ‪ normalvariate‬وجود دارد که شبیه به هم‬
‫هستند فقط تابع ‪ gauss‬شیب تندتری دارد و هر دوی آنها دو پارامتر دارند‪ :‬میانگین و‬
‫انحراف از معیار‪.‬‬
‫‪ ‬مثال‪ :‬توزیع نرمال (گاوسی) با میانگین ‪ 10‬و انحراف از معیار ‪ 1‬را با نمودار‬
‫هیستوگرام رسم کنید‪.‬‬
‫* ‪from pylab import‬‬
‫‪import random‬‬
‫‪# test‬‬
‫][ = ‪res‬‬
‫‪for i in range(100000):‬‬
‫])‪res += [random.gauss(10, 1‬‬
‫)‪hist(res, bins = 50‬‬
‫)(‪show‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫قضیه حد مرکزی‬
‫‪7‬‬
‫‪ ‬این قضیه میگوید که هنگامی که تعداد بسیار زیادی متغیر تصادفی با توزیع دلخواه (و‬
‫البته با واریانس محدود) را با هم جمع کنیم و میانگین بگیریم‪ ،‬توزیع نهایی به توزیع‬
‫نرمال میل میکند‪.‬‬
‫‪ ‬برای امتحان این قضیه‪ ،‬تعداد دلخواهی تاس در نظر میگیریم (متغیرهای تصادفی) و‬
‫در هر دور آنها را میاندازیم و عددهای دیدهشده را با هم جمع میکنیم‪ .‬تعداد این‬
‫دورها را اگر زیاد کنیم توزیع آنها به صورت نرمال خواهد بود‪.‬‬
‫‪ ‬اگر با اعداد بدست آمده نمودار هیستوگرام رسم کنیم شبیه توزیع نرمال(گاوسی) خواهد‬
‫شد‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
8
‫برنامه قضیه حد مرکزی‬
def dice(k):
''' Return the sum of k random dice '''
sum = 0
for i in range(k):
r = random.randrange(1, 7)
sum += r
return sum
def experiment(steps, k):
''' Run experiment '''
res = []
for i in range(steps):
s = dice(k)
res += [s]
return res
# main
k = int(input('Number of Dice: '))
res = experiment(100000, k)
hist(res, bins = 5 * k + 1, range = (k, 6 * k))
show()
‫ دانشگاه صنعتی شریف‬- ‫مبانی برنامهسازی‬
21 ‫جلسه‬
‫دانشکده مهندسی کامپیوتر‬
‫مسئله هشت وزیر‬
‫‪9‬‬
‫‪ ‬پازل هشت وزیر‪ ،‬مسئلهای است که هشت وزیر را در‬
‫یک صفحه ‪ 8×8‬شطرنج طوری قرار دهیم که هیچ دو‬
‫وزیری یکدیگر را تهدید نکنند؛ بنابراین هیچ دو‬
‫وزیری نباید در یک سطر یا در یک ستون و یا در‬
‫یک قطر قرار داشته باشند‪.‬‬
‫‪ ‬میخواهیم برنامهای بنویسیم که تمام راهحلهای این‬
‫مسئله را بیابد‪.‬‬
‫‪ ‬در واقع میخواهیم این مسئله را به ‪ N‬وزیر و یک‬
‫صفحه ‪ N×N‬تعمیم دهیم‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪15‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫مسئله هشت وزیر‬
‫‪‬‬
‫( ادامه )‬
‫‪10‬‬
‫اول باید به این فکر کنیم که چگونه میخواهیم وضعیت صفحه شطرنج را ذخیره کنیم (ساختار‬
‫داده)؛ همچنین منطق و توابع مورد نیاز برای حل مسئله چه چیزی باید باشد؟ چگونه وزیر بعدی‬
‫را به صفحه اضافه کنیم که با دیگر وزیران موجود روی صفحه تعارض نداشته باشد‪.‬‬
‫• گامهای یافتن یک ساختار داده مناسب و الگوریتم مناسب‬
‫برای حل مسئله مستقل از هم انجام میشود‪.‬‬
‫• یک ساختارداده مناسب برای این مسئله ماتریس ‪ 8×8‬که‬
‫هر درایه اگر یک باشد به معنای وجود وزیر در آن نقطه‬
‫است و اگر صفر باشد به معنای خالی بودن آن خانه است‪.‬‬
‫•‬
‫همچنین باید به این مسئله نیز دقت کرد که چگونه یک صفحه خالی نمایش داده شود و چگونه‬
‫میتوان آن را تغییر داد‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪15‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫مسئله هشت وزیر‬
‫( ادامه )‬
‫‪11‬‬
‫‪ ‬ایدة دیگر‪ ،‬استفاده از لیستی است که محل وزیران را نگهمیدارد مثلا‪:‬‬
‫‪ ‬یا لیستی از چندتاییها که سطر و ستون مکانها را نشان میدهد‬
‫‪ ‬اگر از اندیس لیست استفاده کنیم نیازی نیست که از دوتایی‬
‫کمک بگیریم و تنها لیستی از شماره سطرها نگهمیداریم‪.‬‬
‫‪ ‬از آنجا که در این مسئله نباید هیچ دو وزیری در یک ستون قرارگیرند پس خود استفاده‬
‫از لیست این موضوع را در بر دارد ولی همیشه انتخاب این روش درست نیست‪.‬‬
‫علوهبر این‪ ،‬اعداد تکراری در لیست وجود ندارد پس هیچ دو وزیری در یک سطر‬
‫نیز قرار ندارند‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫الگوریتم حل ‪ 8‬وزیر‬
‫‪ ‬اولین جایگشت اعداد‬
‫اصلی قرار دارند‪.‬‬
‫‪12‬‬
‫است که نشان میدهد تمام وزیران روی قطر‬
‫‪ ‬روش ما این است که جایگشتهای مختلفی ایجاد کرده و کنترل میکنیم آیا دو وزیری‬
‫وجود دارند که روی یک قطر باشند‪.‬‬
‫‪ ‬هر قطر دارای شیب ‪ 1‬یا ‪ -1‬است پس سؤال ما این است که فاصله بین دو مکان‪ x ،‬و‬
‫‪ y‬یکسان دارند بنابراین از قدرمطلق استفاده میکنیم چون ممکن است قطر‪ ،‬راست یا‬
‫چپ باشد‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫الگوریتم حل ‪ 8‬وزیر‬
‫( ادامه )‬
‫‪13‬‬
‫‪ ‬از جایگاه صفر شروع میکنیم و اولین وزیر را در هر سطری از ستون صفرم میتوان‬
‫گذاشت؛ وقتی میخواهیم دومین وزیر را در صفحه بگذاریم چک میکنیم که روی‬
‫سطری قرار نگیرد که با وزیر قبلی تداخل داشته باشد و این کار را برای تمام وزیران‬
‫انجام میدهیم که با وزیران سمت چپ کنترل شوند‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫الگوریتم حل ‪ 8‬وزیر‬
‫( ادامه )‬
‫‪14‬‬
‫‪ ‬با استفاده از تابع زیر میتوان هر جایگشتی از لیست را کنترل کرد که آیا تداخل دارد یا‬
‫نه‪.‬‬
‫‪ ‬حاال تنها کاری که باید کرد این است که جایگشتهای مختلف ایجاد کنیم و آن را کنترل‬
‫کنیم تا باالخره جواب پیدا شود‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫مرحله آخر راه حل ‪ 8‬وزیر‬
‫‪15‬‬
‫‪ ‬از ابتدا قرار بود تمام جوابهای مسئله را بیابیم؛ حاال تنها کاری که باید کرد این است‬
‫که تمام جایگشتها را کنترل کرد که آیا جواب میتواند باشد و برای ‪ N‬شیء‪N! ،‬‬
‫جایگشت وجود دارد و برای ‪8‬وزیر‪ 8! ،‬یعنی ‪ 40320‬مورد مختلف را باید چک کرد‬
‫که در مقابل ‪ )4426165368( 64‬زیاد نیست‪.‬‬
‫‪8‬‬
‫‪ ‬در حقیقت ما فضای مسئله را از ‪ 4/4‬میلیارد مورد به تنها ‪ 40320‬مورد کاهش‬
‫دادهایم‪.‬‬
‫‪ ‬حال با بُرزدن لیستی شامل اعداد صفر تا ‪ 7‬هر بار امتحان میکنیم که آیا میتواند‬
‫جواب باشد یا خیر‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫مرحله آخر راه حل ‪ 8‬وزیر‬
‫( ادامه )‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫‪16‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫ماژول‬
‫‪TIME‬‬
‫‪17‬‬
‫‪ ‬وقتی با الگوریتمهای پیچیده یا برنامههای بزرگ کار میکنیم یک مسئله مهم‪ ،‬کارامدی‬
‫ُکد ماست‪.‬‬
‫‪ ‬یک راه برای این اندازهگیری استفاده از ماژول ‪ time‬است که با کمک تابع ‪ clock‬که‬
‫یک عدد ممیز شناور برمیگرداند و بیانگر ثانیههاییست که از ابتدای اجرای برنامه‬
‫گذشته است‪.‬‬
‫‪ ‬برای اندازهگیری زمان اجرای یک تکه کد‪ ،‬قبل از آن با تخصیص مقدار بازگرداندهشده‬
‫توسط این تابع به متغیر ‪ t0‬و تکرار آن بعد از تکه کد مذکور ولی با متغیر ‪ t1‬و به‬
‫دست آوردن اختلف این دو متغیر (‪ )t1-t0‬به مقصود خواهیم رسید‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫ادامه مطلب در جلسه بعد‬
‫‪18‬‬
‫پروندهها‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪21‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬