بهنام خالق خِرد مبانی برنامه سازی 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
مبانی برنامهسازی -دانشگاه صنعتی شریف