
دانلود پروژه متلب سنکرون سازی شبکه حسگر بی سیم با استفاده از الگوریتم کرم شب تاب firefly
دانلود پروژه متلب سنکرون سازی شبکه حسگر بی سیم با استفاده از الگوریتم کرم شب تاب firefly
دانلود پروژه متلب سنکرون سازی شبکه حسگر بی سیم با استفاده از الگوریتم کرم شب تاب firefly
امروزه میراگرهای جرمی تنظیم شونده به طور گسترده ای در جهت کاهش ارتعاشات لرزه ای سازه های مهندسی مورد استفاده قرار می گیرند. کارایی این سیستم ها مستلزم یک تنظیم مناسب از پارامترهای آن است. در این مقاله، روشی کارا و موثر برای طراحی میراگرهای جرمی تنظیم شده چندگانه بهینه (MTMD) برای تقلیل پاسخ لرزهای سازه ها پیشنهاد شده است که مبتنی بر تعریف یک مسئله بهینه سازی چند هدفه است. در تحقیق حاضر مسئله بهینه سازی با هدف تنظیم پارامترهای بهینه MTMD تعریف و برای حل آن از الگوریتم بهینه سازی چند هدفه فاخته استفاده شده است. پارامترهای تنظیم MTMD به عنوان متغیرهای طراحی درنظر گرفته شده است. از آنجایی که اساساً تنظیم پارامترهای MTMD یک مسئله بهینه سازی چند هدفه می باشد، لذا سه تابع هدف شامل کمینه کردن بیشینه جابجایی بام، بیشینه شتاب بام و بیشینه جابجایی TMD ها در مسئله بهینه سازی مورد توجه قرار گرفته است. نتایج حاصل از شبیه سازی های عددی برای یک قاب برشی ده طبقه در معرض زلزله نشان می دهند که الگوریتم بهینه سازی چند هدفه فاخته قادر است با توجه به اهداف طراح، راه حل های مناسبی را در قالب منحنی های پرتو برای تنظیم پارامترهای بهینه MTMD ها ارائه دهد که ناشی از ایجاد یک مصالحه مناسب میان توابع هدف در تعارض با هم می باشند. همچنین نتایج نشان می دهند MTMD ها پاسخ های لرزه ای سازه را به نحو مطلوب کاهش می دهند، همچنین نتایج نشان می دهد که عملکرد MTMD به زلزله ورودی، نسبت جرمی TMD و تعداد TMD ها بستگی دارد.
سال انتشار: 1394
تعداد صفحات: 10
فرمت فایل: pdf
پایان نامه کارشناسی الگوریتم ژنتیک
161 صفحه در قالب word
چکیده
الگوریتم ژنتیک (Genetic Algorithm - GA) تکنیک جستجویی در علم رایانه برای یافتن راهحل تقریبی برای بهینهسازی و مسائل جستجو است. الگوریتم ژنتیک نوع خاصی از الگوریتمهای تکامل است که از تکنیکهای زیستشناسی فرگشتی مانند وراثت و جهش استفاده میکند.
در واقع الگوریتمهای ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیشبینی یا تطبیق الگو استفاده میکنند. الگوریتمهای ژنتیک اغلب گزینه خوبی برای تکنیکهای پیشبینی بر مبنای تصادف هستند. مختصراً گفته میشود که الگوریتم ژنتیک (یا GA) یک تکنیک برنامهنویسی است که از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده میکند. مسألهای که باید حل شود ورودی است و راهحلها طبق یک الگو کد گذاری میشوند که تابع fitness نام دارد هر راه حل کاندید را ارزیابی میکند که اکثر آنها به صورت تصادفی انتخاب میشوند.
کلاً این الگوریتمها از بخش های زیر تشکیل میشوند: تابع برازش، نمایش، انتخاب، تغییر.
کلمات کلیدی: الگوریتم ژنتیک، هیوریستیک، ترکیب و جهش، تکامل طبیعی داروین، معمای هشت وزی
فهرست مطالب
فصل اول 1
1-1- مقدمه 2
1-2- به دنبال تکامل 3
1-3- ایدۀ اصلی استفاده از الگوریتم ژنتیک 4
1-4- درباره علم ژنتیک 6
1-5- تاریخچۀ علم ژنتیک 6
1-6- تکامل طبیعی (قانون انتخاب طبیعی داروین) 7
1-7- رابطه تکامل طبیعی با روشهای هوش مصنوعی 10
1-8- الگوریتم 11
1-8-1- الگوریتمهای جستجوی ناآگاهانه 12
1-8-1-الف- جستجوی لیست 12
1-8-1-ب- جستجوی درختی 13
1-8-1-پ- جستجوی گراف 14
1-8-2- الگوریتمهای جستجوی آگاهانه 14
1-8-2-الف- جستجوی خصمانه 15
1-9- مسائل NP-Hard 15
1-10- هیوریستیک 17
1-10-1- انواع الگوریتمهای هیوریستیک 19
فصل دوم 21
2-1- مقدمه 22
2-2- الگوریتم ژنتیک 23
2-3- مکانیزم الگوریتم ژنتیک 25
2-4- عملگرهای الگوریتم ژنتیک 28
2-4-1- کدگذاری 28
2-4-2- ارزیابی 29
2-4-3- ترکیب 29
2-4-4- جهش 29
2-4-5- رمزگشایی 30
2-5- چارت الگوریتم به همراه شبه کد آن 30
2-5-1- شبه کد و توضیح آن 31
2-5-2- چارت الگوریتم ژنتیک 33
2-6- تابع هدف 34
2-7- روشهای کد کردن 34
2-7-1- کدینگ باینری 35
2-7-2- کدینگ جایگشتی 36
2-7-3- کد گذاری مقدار 37
2-7-4- کدینگ درخت 38
2-8- نمایش رشتهها 39
2-9- انواع روشهای تشکیل رشته 41
2-10- باز گرداندن رشتهها به مجموعه متغیرها 42
2-10-1- تعداد بیتهای متناظر با هر متغیر 43
2-11- جمعیت 44
2-11-1- ایجادجمعیت اولیه 44
2-11-2- اندازه جمعیت 45
2-12- محاسبه برازندگی (تابع ارزش) 46
2-13- انواع روشهای انتخاب 48
2-13-1- انتخاب چرخ رولت 49
2-13-2- انتخاب حالت پایدار 51
2-13-3- انتخاب نخبه گرایی 51
2-13-4- انتخاب رقابتی 52
2-13-5- انتخاب قطع سر 52
2-13-6- انتخاب قطعی بریندل 53
2-13-7- انتخاب جایگزینی نسلی اصلاح شده 53
2-13-8- انتخاب مسابقه 54
2-13-9- انتخاب مسابقه تصادفی 54
2-14- انواع روشهای ترکیب 54
2-14-1- جابهجایی دودوئی 55
2-14-2- جابهجایی حقیقی 58
2-14-3- ترکیب تکنقطهای 59
2-14-4- ترکیب دو نقطهای 60
2-14-5- ترکیب n نقطهای 60
2-14-6- ترکیب یکنواخت 61
2-14-7- ترکیب حسابی 62
2-14-8- ترتیب 62
2-14-9- چرخه 63
2-14-10- محدّب 64
2-14-11- بخش_نگاشته 64
2-15- احتمال ترکیب 65
2-16- تحلیل مکانیزم جابجایی 66
2-17- جهش 66
2-17-1- جهش باینری 69
2-17-2- جهش حقیقی 69
2-17-3- وارونه سازی بیت 70
2-17-4- تغییر ترتیب قرارگیری 70
2-17-5- وارون سازی 71
2-17-6- تغییر مقدار 71
2-18- محک اختتام اجرای الگوریتم ژنتیک 72
2-19- انواع الگوریتمهای ژنتیکی 72
2-19-1- الگوریتم ژنتیکی سری 73
2-19-2- الگوریتم ژنتیکی موازی 74
2-20- مقایسه الگوریتم ژنتیک با سیستمهای طبیعی 75
2-21- نقاط قوّت الگوریتمهای ژنتیک 76
2-22- محدودیتهای GAها 78
2-23- استراتژی برخورد با محدودیتها 79
2-23-1- استراتژی اصلاح عملگرهای ژنتیک 79
2-23-2- استراتژی رَدّی 79
2-23-3- استراتژی اصلاحی 80
2-23-4- استراتژی جریمهای 80
2-24- بهبود الگوریتم ژنتیک 81
2-25- چند نمونه از کاربردهای الگوریتمهای ژنتیک 81
فصل سوم 86
3-1- مقدمه 87
3-2- حلّ معمای هشت وزیر 88
3-2-1- جمعیت آغازین 90
3-2-2- تابع برازندگی 94
3-2-3- آمیزش 95
3-2-4- جهش ژنتیکی 96
3-3- الگوریتم ژنتیک و حلّ مسألۀ فروشندۀ دورهگرد 97
3-3-1- حل مسأله TSP به وسیله الگوریتم ژنتیک 99
3-3-2- مقایسه روشهای مختلف الگوریتم و ژنتیک برای TSP 107
3-3-3- نتیجه گیری 108
3-4- حلّ مسأله معمای سودوکو 109
3-4-1- حل مسأله 110
3-4-2- تعیین کروموزم 110
3-4-3- ساختن جمعیت آغازین یا نسل اول 111
3-4-4- ساختن تابع از ارزش 112
3-4-5- ترکیب نمونهها و ساختن جواب جدید 113
3-4-6- ارزشیابی مجموعه جواب 118
3-4-7- ساختن نسل بعد 118
3-5- مرتب سازی به کمک GA 119
3-5-1- صورت مسأله 119
3-5-2- جمعیت آغازین 119
3-5-3- تابع برازندگی 122
3-5-4- انتخاب 123
3-5-5- ترکیب 123
3-5-6- جهش 124
فهرست منابع و مراجع 126
پیوست 127
واژهنامه 143
1-1- مقدمه
امروزه یکی از مهمترین زمینههای تحقیق و پژوهش، توسعۀ روشهای جستجو بر مبنای اصول تکامل طبیعی میباشد. در محاسبات تکاملی به صورت انتزاعی از مفاهیم اساسی تکامل طبیعی در راستای جستجو برای یافتن راه حلّ بهینه برای مسائل مختلف الهام گرفته شده است. در همین راستا مطالبی که در این فصل پیش روی شما پژوهندۀ گرامی قرار خواهد گرفت مفاهیمی دربارۀ علم کامپیوتر و علم ژنتیک مانند: الگوریتم و انواع آن، جستجو، هیوریستیک، تاریخچه الگوریتم ژنتیک و علم ژنتیک، ژن، کروموزوم، ارث بری و... می باشد، و یا به بیانی خلاصهتر میتوان گفت: در این فصل به بیان مقدّمات خواهیم پرداخت.
انشاءالله مطالعۀ این فصل مفهومی ساده و روشن از موضوعِ این نوشتار را برای شما خوانندۀ محترم به تصویر خواهد کشید و شما را در درک آسان و سریع فصول بعدی یاری خواهد رساند.
1-2- به دنبال تکامل...
بسیاری از دانشمندان و اندیشمندان، میل به تکامل را مهترین عامل پیشرفت دستگاه آفرینش و انسان میدانند. از این دیدگاه هر پدیدهای را که بنگرید، یک مسأله جستجوست. انسان همواره میکوشد تا به تکامل برسد، از این رو میاندیشد، میپژوهد، میکاود، میسازد، مینگارد و همواره میکوشد تا باقی بماند. حتی میتوان گفت که میل به زادن فرزند، گامی در برآوردن این نیاز و البته دیگر جانداران است. میتوان این تلاش در راه رسیدن به تکامل را یک مسألۀ جستجو تعبیر کرد.
کوشش یک مؤسسه اقتصادی یا تولیدی –که تابعی برای تبدیل دادهها به ستادهاست- برای کمینه کردن هزینهها و بیشینه کردن سود، یک مسألۀ جستجو است. تلاش یک سپاه در حال جنگ، برای وارد کرد بیشترین خسارات بر دشمن با از دست دادن کمترین نیرو و جنگافزار، یا کوشش یک دانشآموز برای دست یافتن به بالاترین نمره، سعی یک موسیقیدان یا نگارگر برای خلق زیباترین اثر هنری، تلاش یک کاندیدا برای به دست آوردن بیشترین رأی، طراحی یک نجّار برای ساختن راحتترین صندلی، تلاش و نقشه چینی ورزشکاران و مربّیان برای یافتن راههای پیروزی بر حریف و... همگی جستجویی در فضای یک مسأله برای یافتن نقاط یا ناحیه بهینگی (بیشینه یا کمینه) هستند و همین امر موجب پیشرفت تمدن و آفرینش شده است.
در دانش کامپیوتر و فناوری اطلاعات هم «جستجو» یکی از مهمترین مسائل است. تنها کافیست که حجم اطلاعات قرار گرفته بر حافظههای گوناگون و اینترنت را در نظر بگیریم تا جایگاه ویژه آن را دریابیم.
تاکنون روشهای بسیاری توسط طراحان الگوریتمها برای انجام جستجو بر دادههای دیجیتالی ارائه شده است. روشهایی به نام جستجوی سریع[1] و جستجوی دودویی[2]، از سادهترین الگوریتمهایی هستند که دانشجویان گرایشهای مهندسی کامپیوتر در نخستین سالهای دوره کارشناسی فرا میگیرند، امّا این الگوریتمها شاید، هنگامی که با حجمی گسترده از دادهها روبرو شوند، کارایی ندارند و حتی الگوریتمهای پیشرفتهتر مانند جستجوی بازپخت شبیهسازی شده[3] و الگوریتم عمیقشوندۀ تکراری[4] نیز در هنگام رویارویی با مسائل ابرفضا[5] از یافتن راهحل یا ناحیههای دلخواه در میمانند. در این میان یک روش جادویی وجود وجود دارد که مسائل بزرگ را به سادگی و به گونهای شگفتانگیز حل میکند و آن «الگوریتم ژنتیک»[6] است. ناگفته پیداست که واژۀ «الگوریتم ژنتیک» از دو واژۀ «الگوریتم» و «ژنتیک» تشکیل شده است که خود مبیّن این مطلب است که این روش از دو علم ریاضی و زیستشناسی برای حل مسائل کمک میگیرد.
الگوریتمژنتیک بر خلاف دیگر روشهای جستجو، که توسط طراحان نگاشته میشوند، در حقیقت به دست دستگاه آفرینش پدید آمده، و پس از شناخت نسبی دانشمندان از این روش به صورت مسألهای ریاضی فرموله شده و وارد دانش مهندسی کامپیوتر و دیگر علوم مرتبط گردیده است. در یکی دو دهه گذشته که این الگوریتم در علوم مهندسی بکار گرفته شده، ناباورانه چنان دستآوردها و نتایج شگفتانگیزی داشته که نگاه بسیاری از دانشپژوهان علوم گوناگون فنیمهندسی را به خود جلب کرده است.[1]
1-3- ایدۀ اصلی استفاده از الگوریتم ژنتیک
در دهه 70 میلادی دانشمندی از دانشگاه میشیگان به نام «جان هلند»[7] ایده استفاده از الگوریتم ژنتیک را در بهینهسازیهای مهندسی مطرح کرد. ایده اساسی این الگوریتم انتقال خصوصیات موروثی توسط ژنهاست. (ژنها قطعاتی از یک کروموزوم هستند که اطلاعات مورد نیاز برای یک مولکول DNA یا یک پلی پپتید را دارند. علاوه بر ژنها، انواع مختلفی از توالیهای مختلف تنظیمی در روی کروموزومها وجود دارد که در همانندسازی، رونویسی و... شرکت دارند.([8]. فرض کنید مجموعه خصوصیات انسان توسط کروموزومهای او به نسل بعدی منتقل میشوند. هر ژن در این کروموزومها نماینده یک خصوصیت است. بعنوان مثال ژن 1 میتواند رنگ چشم باشد، ژن 2 طول قد، ژن 3 رنگ مو و الی آخر. حال اگر این کروموزوم به تمامی، به نسل بعد انتقال یابد، تمامی خصوصیات نسل بعدی شبیه به خصوصیات نسل قبل خواهد بود. بَدیهیست که در عمل چنین اتفاقی رخ نمیدهد. در واقع بصورت همزمان دو اتفاق برای کروموزومها میافتد. اتّفاق اول موتاسیون(جهش)[9] است. موتاسیون به این صورت است که بعضی ژنها بصورت کاملاً تصادفی تغییر میکنند. البته تعداد اینگونه ژنها بسیار کم میباشد اما در هر حال این تغییر تصادفی همانگونه که پیشتر دیدیم بسیار مهم است. مثلاً ژن رنگ چشم میتواند بصورت تصادفی باعث شود تا در نسل بعدی یک نفر دارای چشمان سبز باشد، در حالی که تمامی نسل قبل دارای چشم قهوهای بودهاند. علاوه بر موتاسیون اتفاق دیگری که میافتد و البته این اتفاق به تعداد بسیار بیشتری نسبت به موتاسیون رخ میدهد چسبیدن ابتدای یک کروموزوم به انتهای یک کروموزوم دیگر است.[10] این همان چیزیست که مثلاً باعث میشود تا فرزند تعدادی از خصوصیات پدر و تعدادی از خصوصیات مادر را با هم به ارث ببرد و از شبیه شدن تام فرزند به تنها یکی از والدین جلوگیری میکند. [10]
حال میتوانیم اینگونه بیان کنیم که: الگوریتم ژنتیک ابزاری میباشد که توسط آن ماشین میتواند مکانیزم انتخاب طبیعی را شبیه سازی نماید. این عمل با جستجو در فضای مسأله جهت یافتن جواب برتر و نه الزاماً بهینه صورت میپذیرد.[13] الگوریتم ژنتیک را میتوان یک روش جستجوی کلّی نامید که از قوانین تکامل بیولوژیک طبیعی تقلید می کند.[3] در واقع الگوریتمهای ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیشبینی یا تطبیق الگو استفاده میکنند. الگوریتمهای ژنتیک اغلب گزینه خوبی برای تکنیکهای پیشبینی بر مبنای رگرسیون[11] هستند.[10]
ممکن است هنگام انتقال از فایل ورد به داخل سایت بعضی متون به هم بریزد یا بعضی نمادها و اشکال درج نشود ولی در فایل دانلودی همه چیز مرتب و کامل است
متن کامل را می توانید در ادامه دانلود نمائید
چون فقط تکه هایی از متن برای نمونه در این صفحه درج شده است ولی در فایل دانلودی متن کامل همراه با تمام ضمائم (پیوست ها) با فرمت ورد word که قابل ویرایش و کپی کردن می باشند موجود است
فهرست مطالب
عنوان صفحه
فصل اول : مقدمه
1-1مفهوم گرید..................................................2
1-2طبقه بندی گرید............................................. 4
3-1 ارزیابی گرید............................................... 4
1-4کاربردگرید...................................................5
1-5 تعریف زمانبندی گرید........................................6
1-6 مروری بر تحقیقات گذشته......................................7
1-7 مفهوم اصطلاحات به کار برده شده..............................8
1-8 نمای کلی پایان نامه.........................................9
فصل دوم:زمانبندی کارها در سیستم های توزیع شده
2-1 زمانبندی کلاستر و ویژگیهای آن .............................. 10
2-2 زمانبندی گرید و ویژگیهای آن................................13
3-2 رده بندی الگوریتم های زمانبندی گرید....................... 16
2-3-1 زمانبندی محلی/سراسری................................. 16
2-3-2 زمانبندی ایستا/پویا...................................16
2-3-3 زمانبندی بهینه/نزدیک به بهینه...........................21
2-3-4 زمانبندی توزیع شده/مرکزی..............................22
2-3-5 زمانبندی همکار و مستقل...............................22
2-3-6 زمانبندی زمان کامپایل /اجرا........................ 23
2-4-1 رده بندی الگوریتم های زمانبندی از دیدگاهی دیگری..... 23
2-4-2 اهداف زمانبندی.........................................23
2-4-3 زمانبندی وفقی.......................................24
2-4-4 رده بندی برنامه های کاربردی...........................25
2-4-4-1 کارهای وابسته.....................................25
2-4-4-2 گراف کار..........................................26
2-4-5 وابستگی کارهای تشکیل دهنده برنامه کاربردی........... 26
2-4-6 زمانبندی تحت قیود کیفیت سرویس..........................26
2-4-7 راهکارهای مقابله با پویایی گرید.......................28
2-5 الگوریتم های زمانبندی کارهای مستقل......................32
2 -5-1 الگوریتم MET ...........................................32
2-5-2 الگوریتمMCT..............................................32
2-5-3 الگوریتم Min-min...............................................33
2-5-4 الگوریتم Max-Min ................................................33
2 -5-5 الگوریتم Xsuffrage ..............................................34
2 -5-6- الگوریتم GA . ...........................................35
2-5-7- الگوریتم SA. ...........................................37
فصل سوم:الگوریتم های زمانبندی گراف برنامه
3-1 مشکلات زمانبندی گراف برنامه.................................39
3-2 تکنیکهای مهم زمانبندی گراف برنامه در سیستمهای توزیع شده.....40
3-2-1- روش ابتکاری بر پایه لیست ................................ 40
3-2-2- روش ابتکاری بر پایه تکثیر................................40
3-2-3- روش ابتکاری کلاسترینگ......................................41
3-3- دسته بندی الگوریتمهای زمانبندی گراف برنامه در سیستمهای توزیع شده.....................................................44
3-4- پارامترها و مفاهیم مورد استفاده در الگوریتمهای زمانبندی گراف برنامه.........................................................46
3-5- الگوریتمهای زمانبندی گراف برنامه با فرضیات محدودکننده......50
3-5-1- الگوریتمی با زمان چند جملهای برای گراف های درختی - الگوریتم HU ....................................................50
3-5-2- الگوریتمی برای زمانبندی گراف برنامه با ساختار دلخواه در سیستمی با دو پردازنده..........................................51
3-5-3- الگوریتمی برای زمانبندی گراف بازهای مرتب شده............52
3-6- الگوریتمهای زمانبندی گراف برنامه در محیطهای همگن ..........54
3-6-1- الگوریتم Sarkar................................................54
3-6-2- الگوریتمHLFET................................................55
3-6-3- الگوریتم ETF................................................55
3-6-4- الگوریتم ISH ..............................................55
3-6-5- الگوریتم FLB................................................56
3-6-6- الگوریتم DSC................................................56
3-6-7- الگوریتم CASS-II..............................................58
3-6-8- الگوریتم DCP................................................59
3-6-9- الگوریتم MCP................................................60
3-6-10- الگوریتم MD...............................................61
3-6-11- الگوریتم TDS...............................................61
3-7- الگوریتمهای زمانبندی گراف برنامه در محیطهای ناهمگن...............63
3-7-1- الگوریتم HEFT................................................63
3-7-2- الگوریتم CPOP..................................................63
3-7-3- الگوریتم LMT.................................................64
3-7-4- الگوریتمTANH .................................................65
فصل چهارم :الگوریتم FLB
1-4 ویژگیهای الگوریتم........................................66
4-2 اصطلاحات به کار برده شده.................................66
4-3 الگوریتم................................................67
4-4 پیچیدگی الگوریتم........................................75
4-5 کارایی الگوریتم.........................................77 .
فصل پنجم: شبیه سازی گرید
5-1 ابزار شبیه سازی...................................79
5-1-1- optosim..................................................79
5-1-2 SimGrid ..................................................80
5-1-3- Gridsim ..................................................80
کارهای انجام شده...............................................83 پیشنهادات............................................................83
مراجع .............................................................85
فهرست اشکال
عنوان صفحه
شکل 1-2 ساختار کلاستر ......................................11
شکل 2-2 ساختار زمانبند گرید ...............................14
شکل 2-3-2 رده بندی الگوریتم های ایستا.......................19
شکل 2-4 رده بندی برنامه های کاربردی.........................26
شکل 2-5-6کلاس بندی برنامه های کاربردی .......................37
شکل 3-2-3 گراف نمونه با هزینه محاسباتی و ارتباطی .............43
شکل 3-3 دسته بندی الگوریتم های گراف برنامه..................45
شکل 3-4 گراف کارها .........................................50
شکل 3-5-3 گراف بازه ای مرتب شده با هزینه محاسباتی یکسان .....53
شکل 3-5-3 مقایسه الگوریتم های زمانبندی گراف برنامه در محیطهای
همگن ........................................................54
شکل 4-1 گراف کار...........................................76
شکل 5-2 ساختار Gridsim .....................................
ک پرداخت و دانلود *پایین مطلب*
فرمت فایل:Word (قابل ویرایش و آماده پرینت)
تعداد صفحه:25
فهرست مطالب
الگوریتم
هر برنامه، می بایست دارای یک طرح و یا الگو بوده تا برنامه نویس بر اساس آن عملیات خود را دنبال نماید.از دیدگاه برنامه نویسان ، هر برنامه نیازمند یک الگوریتم است . بعبارت ساده ، الگوریتم ، بیانه ای روشمند بمنظور حل یک مسئله بخصوص است . از منظر برنامه نویسان ،الگوریتم بمنزله یک طرح کلی و یا مجموعه دستورالعمل هائی است که با دنبال نمودن آنان ، برنامه ای تولید می گردد.
الگوریتم های میکرو در مقابل ماکرو
الگوریتم ها دارای ویژگی های متفاوتی می باشند . ما می توانیم در رابطه با الگوریتم استفاده شده به منظور نوشتن یک برنامه مشخص صحبت نمائیم . از این زاویه ، ما صرفا" در رابطه با الگوریتم در سطح ماکرو(macro level) ، صحبت نموده ایم . در چنین مواردی ، الگوریتم ارائه شده ، سعی در بدست آوردن جنبه های عمومی برنامه از طریق یک مرور کلی به برنامه در مقابل درگیر شدن در جزئیات را دارد.ما می توانیم در رابطه با الگوریتم ها ، از سطح "میکرو" صحبت نمائیم . از این زاویه ، به سطوح پایین تر رفته و به عوامل اساسی ونگهدارنده ای که یک جنبه خاص از برنامه را با یکدیگر مرتبط می نماید، صحبت کرد. مثلا" در صورتیکه شما دارای داده هائی هستید که می بایست قبل از استفاده مرتب گردند ،الگوریتم های مرتب سازی متعددی در این زمینه وجود داشته و می توان یکی از آنها را بمنظور تامین اهداف مورد نظر خود انتخاب نمود. انتخاب یک الگوریتم مرتب سازی ، صرفا" باعث حل شدن یکی از جنبه های متفاوت برنامه می گردد . پس از مرتب سازی داده ها ،می بایست از یک الگوریتم میکرو دیگر بمنظور نمایش داده ها ی مرتب شده استفاده گردد .
همانگونه که احتمالا" حدس زده اید ، ما می توانیم تمام الگوریتم های میکرو را بمنظور ایجاد یک الگوریتم ماکرو ، جمع آوری نمائیم . اگر ما با الگوریتم های میکرو ، آغاز نمائیم ، و حرکت خود را بسمت نمایش ماکروی یک برنامه ، پیش ببریم ، کاری را انجام داده ایم که موسوم به طراحی " پایین به بالا" (buttom-up) ، است . اگر ما فعالیت خود را با یک الگوریتم ماکرو آعاز و حرکت خود را بسمت پائین و الگوریتم های میکرو ، ادامه دهیم ، طراحی از نوع " بالا به پایین " (top-down) را انجام داده ایم .
شاید این سوال مطرح گردد که کدام روش بهتر است ؟ اگر شما تمام مقالاتی را که تاکنون در این زمینه نوشته شده اند را دنبال نمائید ، هرگز به یک نتیجه قابل قبول دست نخواهید یافت . هر رویکرد، دارای نکات مثبت و منفی مربوط به خود است . صرفنظر از رویکرد طراحی استفاده شده ، می بایست دارای الگوئی (طرحی) مناسب برای برنامه باشیم .حداقل، نیازمند یک اعلامیه از مسئله برنامه نویسی و یک طرح ( الگو) برای برخورد با مسئله ، خواهیم بود . پس از شناخت مسئله ، می توان نحوه حل مسئله را ترسیم کرد. شناخت عمیق و مناسب نسبت به مسئله ای که قصد حل آن را داریم ، شرط اساسی و ضروری برای طراحی یک برنامه است .
با توجه به اینکه این اعتقاد وجود دارد که شناخت جامع و کلی از مسئله ای که حل آن را داریم ، بخشی ضروری در اولین مرحله برنامه نویسی است ، ما در ادامه از رویکرد "بالا - پایین "، تبعیـت می نمائیم . فراموش نکنیم که رویکرد فوق ، امکان مشاهده مجازی از هر مسئله برنامه نویسی را فراهم خواهد نمود.
مراحل پنج گانه
هر برنامه را صرفنظر از میزان پیچیدگی آن ، می توان به پنج مرحله اساسی تجزیه کرد :
در ادامه به بررسی هریک از مراحل فوق ، خواهیم پرداخت .
مرحله مقداردهی اولیه
مرحله مقداردهی اولیه ، اولین مرحله ای است که می بایست در زمان طراحی یک برنامه در رابطه با آن فکر کرد . مرحله فوق ، شامل تمامی عملیات مورد نیازی است که برنامه می بایست قبل ازبرقراری ارتباط با کاربر ، انجام دهد . در ابتدا ممکن است این موضوع که عملیاتی را قبل از برقراری ارتباط با کاربر می بایست انجام داد ، تا اندازه ای عجیب بنظر رسد ولی احتمالا" برنامه های زیادی را مشاهده نموده اید که در این راستا عملیات مشابهی را انجام می دهند. مثلا" ، در زمان استفاده از برنامه هائی نظیر Word ، Excel و یا برنامه های مشابه دیگر ، با چنین مواردی برخورد نموده ایم . مثلا" با انتخاب گزینه منو File ، می توان لیستی از فایل هائی را که با آنها کار کرده ایم در بخش انتهائی منوفوق ، مشاهده کرد. ( مشاهده آخرین فایل های استفاده شده در یک برنامه خاص ، با استفاده از جادو! میسر نشده است ) . برنامه مورد نظر شاید ، لیست فایل های اخیر را از دیسک خوانده و آنها را به لیست مربوطه در منوی File ، اضافه کرده باشد . با توجه به اینکه لیست فایل های فوق ، می بایست قبل از اینکه برنامه هر چیز دیگر را برای کاربر نمایش دهد ، خوانده و نمایش داده شوند ، می توان انجام عملیات فوق را نمونه ای از مرحله مقداردهی اولیه، در نظر گرفت.
یکی دیگر از عملیات متداول که به این مرحله مرتبط می باشد ، خواندن فایل های Setup است . چنین فایل هائی ممکن است حاوی اطلاعاتی در رابطه با نام مسیرهائی باشند که بانک ها ی اطلاعاتی خاصی و یا فایل های ذخیره شده دیگری را بر روی دیسک را مشخص می نمایند . با توجه به نوع برنامه ای که اجراء می گردد ، فایل های Setup می توانند شامل اطلاعاتی در رابطه با فونت های نمایش ، نام و محل چاپگر ، رنگ های زمینه و رویه ، وضوح تصویر صفحه نمایشگر و اطلاعات مشابهی دیگر باشند . سایر برنامه ها ممکن است مستلزم خواندن اطلاعاتی در رابطه با اتصالات شبکه ، مجوزهای امنیتی و دستیابی به اینترنت ، رمزهای عبور و سایر اطلاعات حساس دیگر باشند . در چنین مواردی فایل های Setup دارای نقشی مهم خواهند بود.
در زمان طراحی یک برنامه ، همواره می بایست در رابطه با اطلاعاتی که یک برنامه قبل آغاز خدمات و عملیات خود به آنها نیازمند است ، اندیشید و برای آنان در مرحله مقداردهی اولیه راهکار مناسب را انتخاب کرد . مرحله مقداردهی اولیه احتمالا" جائی است که می بایست از طریق آن اقدام به ارائه راهکار مناسب در جهت پاسخ به نیازهای فوق ، کرد.
مرحله ورودی
مرحله ورودی ، در حقیقت چیزی است که انتظار دارید باشد! مرحله فوق ، شامل اخذ ( جمع آوری ) هر آنچیزی است که یک برنامه برای انجام فعالیت های خود به آنها نیاز خواهد داشت . دراکثر موارد، اگر استنباط مناسبی از عملیاتی را که یک برنامه قصد انجام آنان را دارد ، حاصل گردد، مشخص نمودن لیستی از ورودی ها ، کاری ساده خواهد بود. مثلا" اگر شما قصد نوشتن یک برنامه وام را دارید ، می دانید که می بایست از کاربر میزان وام درخواستی ، بهره موردنظر و مدت زمان وام ، درخواست گردد.
در حالات دیگر، لازم است در رابطه با نوع ورودی هائی که می بایست از کاربر اخذ گردد، بررسی لازم و مبتنی بر اندیشه را دنبال نمود. مثلا" در صورتیکه قصدنوشتن یک برنامه دفترچه آدرس را دارید ، آیا می خواهید نام فایل حاوی دفترچه تلفن و محل ذخیره فایل مربوطه را در هر مرتبه که برنامه اجراء می گردد ، از کاربر درخواست نمائید ؟ بعبارت دیگر برخی از مراحل ورودی می توانند و شاید می بایست ، توسط مرحله مقدار دهی انجام شوند. ماهیت واقعی میزان اطلاعاتی که می توان آنها را در مرحله مقداردهی خواند ، بستگی به رفتار برنامه دارد. بعنوان یک قانون عمومی می توان به این مورد اشاره داشت که اکثر کاربران تمایل دارند که اطلاعات تکراری در یک فایل Setup و یا مقداردهی اولیه ذخیره گردد (در مقابل اینکه هر مرتبه که برنامه اجراء می گردد ، مجبور به ورود اطلاعات تکرای باشند ) .
فایل های Setup بسیار مناسب بوده و در هرموردی که امکان بخدمت گرفتن آنان منطقی بنظر می آید ، می بایست از آنان استفاده گردد . برخی دیگر از اطلاعات اولیه دارای ماهیت خاص خود بوده و تا زمانیکه کاربر آنها را تایپ ننماید ، شناخته نمی گردند . در مثال وام اشاره شده ، می توان از TextBox های متعددی بمنظور احذ اطلاعات از کاربر و استفاده از آنان در برنامه ، کمک گرفت . با توجه به اینکه کاربر می بایست با این TextBox ها مرتبط تا اطلاعات موردنیاز برنامه را وارد نماید ، روشی را که شما بمنظور ارائه Textbox ,Labels ,Menus و سایر عناصر برنامه ، استفاده می نمائید ، یکی از بخش های مهم یک برنامه یعنی رابط کاربر ( user interface ) را مشخص خواهد کرد . فراموش نکنیم یکی از عوامل موفقیت هر نرم افزار ، بخش رابط کاربر آن است . طراحی مناسب بخش فوق ، امروزه بعنوان تخصصی خاص در طراحی و پیاد ه سازی نرم افزار مطرح و دارای جایگاه خاص خود است .
مرحله پردازش
مرحله پردازش ، شامل انجام عملیات بر روی ورودی (ورودی ها ) ، بمنظور تولید نتایج مورد نظر برای برنامه است . در مثال وام ، برنامه پس از دریافت ورودی های مورد نظر ( میزان وام ، درصد بهره و زمان وام ) آنها را از طریق یک معادله مالی بیکدیگر مرتبط و پس از حل معادله ، نتیجه مورد نظر حاصل خواهد شد( میزان پرداخت ماهانه ) . بعبارت دیگر ، مرحله پردازش قادر به دریافت ورودی ، برخورد با آنها و تولید پاسخ مناسب به مسئله است . توجه داشته باشید که مرحله پردازش همواره باعث نمایش چیزی بر روی نمایشگر نخواهد شد. هدف ، عمل ( عملیات ) برروی داده ( داده ها ) بمنظور تولید یک نتیجه ( نتایج ) است . در این رابطه هیچگونه استثنائی وجود ندارد . در صورتیکه در برنامه ای از قبل می دانیم که مرحله پردازش زمان زیادی طول خواهد کشید ، منطقی است که فیدبک های لازم بمنظور آگاهی کاربر از میزان و درصد انجام پردازش ( پردازش ها ) در اختیار وی گذاشته شود ( در زمانیکه برنامه در حال اجراء است ) . در این رابطه می توان از روش های متعددی استفاده کرد . ( ارائه یک میله پیشرفت ، برآورد زمان تقریبی بمنظور اتمام عملیات ) .
مرحله خروجی
مرحله فوق ، پاسخ ( پاسخ ها ی) مناسب و مورد انتظار را به کاربران مبنی بر حل مسئله مورد نظر ، ارائه می نماید. تعداد زیادی ازبرنامه ها ، پاسخ نهائی ( نتیجه ) خود را از طریق یک Textbox ، نمایش و در اختیار کاربر قرار می دهند . ، مثلا" اگر برنامه ای نوشته شده است که قصد محاسبه و نمایش میزان پرداخت ماهیانه یک وام دریافتی را داشته باشد ، می توان نتیجه بدست آمده (پرداخت ماهانه) را از طریق یک textbox ، ارائه تا پاسخی مناسب در ارتباط با مرحله خروجی یک برنامه، داده شده باشد . سایر برنامه ها ممکن است دارای وضعیتی بمراتب پیچیده تر باشند .مثلا" می توان برنامه ای را در نظر گرفت که نام ، آدرس ، شماره تلفن و سایر اقلام اطلاعاتی را از بانک اطلاعاتی خوانده و در ادامه آنها را بر روی صفحه نمایشگر ، نشان دهد. برنامه هائی اینچنین ، نیازمند شکل مناسبتری از نمایش خروجی بوده و نمی توان با استفاده از چند textbox به خواسته خود دست یافت ( ارائه یک خروجی مطلوب و انعطاف پذیر) در اینگونه موارد می بایست از راهکارهای مناسبتری استفاده گردد . مثلا" می توان از جداول خاصی بمنظور نمایش اطلاعات مورد نظر استفاده کرد .( استفاده از grid و یا List box که برنامه در صورت ضرورت آنان را تکمیل نماید ) . نکته مهمی که می بایست در رابطه با مرحله خروجی رعایت گردد ، آگاهی از این موضوع است که با توجه به نمایش نتایج خروجی برای کاربر، بخش فوق را می توان جزئی از بخش رابط کاربر یک نرم افزار در نظر گرفت . در زمان ورود اطلاعات ( مرحله ورودی ) از عناصر متفاوتی بمنظور اخذ اطلاعات توسط کاربر در بخش رابط استفاده می گردد ، در مرحله خروجی ، بخش رابط کاربر با کاربر بگونه ای دیگر مرتبط خواهد شد ( ارتباطی بمراتب غیر فعالتر نسبت به مرحله ورود اطلاعات ) .
مرحله پاکسازی ( Cleanup )
مرحله پاکسازی ، بمنظور خاتمه بخشیدن مودبانه یک برنامه، پس از تکمیل عملیات مربوطه است. می توان این مرحله را بعنوان مکمل مرحله مقداردهی اولیه در نظر گرفت .با اینکه تعداد زیادی از برنامه های ساده قادرند بسادگی و بدون انجام عملیات تکمیلی توسط برنامه نویس ، خاتمه یابند ولی برنامه های پیچیده زیادی نیازمند برخی کمک ها در این زمینه می باشند. مثلا" اگر برنامه ای یک فایل Setup را بمنظور مقداردهی برخی از متغیرها در زمان مرحله مقداردهی اولیه ، خوانده باشد ، مرحله پاکسازی می تواند شامل بهنگام سازی آندسته از متغیرهای موجود در فایل Setup باشد که نشاندهنده آخرین اطلاعات کاربر است . مرحله پاکسازی ، اغلب شامل بستن فایل ها ( فایل های Setup و بانک اطلاعاتی) است . برخی برنامه ها میزان استفاده از برنامه توسط کاربران را ثبت و اطلاعات مربوطه را در مکانهائی که Log file نامیده می شوند ، ذخیره می نمایند( ثبت مشخصات افرادیکه برنامه را اجراء نموده بهمراه سایر اطلاعات مرتبط نظیر تاریخ و زمان آغاز و توقف برنامه ، در خیلی از برنامه ها به امری ضروری تبدیل شده است ) .
یکی دیگر از انواع فایل های Log به فایل های ثبت خطاء برمی گردد( error log file ) . هدف این نوع از فایل ها ، ثبت اطلاعاتی در رابطه با هر نوع خطائی است که ممکن است در مدت زمان اجرای یک برنامه ، محقق گردد. برنامه نویسان با استفاده از محتویات این نوع فایل ها ، قادر به اشکال زدائی برنامه خواهند بود .
عملیات واقعی و مورد نظری که می بایست در مرحله پاکسازی ، انجام گردد ، به نیازهای یک برنامه بستگی خواهد داشت . معمولا" اگر در برخی برنامه ها عملیات خاصی را در مرحله مقدار دهی اولیه انجام می هیم ، می بایست برخی از عملیات متناظر با آنان را در مرحله پاکسازی انجام داد . باز نمودن و بستن فایل های مورد نیاز در یک برنامه ، نمونه ای متداول از دو مرحله فوق می باشد .
آیا هر برنامه شامل پنج مرحله گفته شده است؟
در پاسخ به سوال فوق می بایست با صراحت پاسخ منفی داده شود. در این راستا ، برنامه های متعددی وجود دارد که مثلا" به مراحل مقداردهی اولیه و یا پاکسازی ، نیاز نخواهند داشت . مراحل مقداردهی اولیه و پاکسازی در مرحله طراحی برنامه های پیچیده مورد توجه جدی قرار خواهند گرفت. بموازات افزایش تجربه در نوشتن برنامه ، شناخت مناسبی در این رابطه بوجود می آید( کدام برنامه به تمام مراحل پنج گانه نیاز و کدامیک نیاز ندارند).طراحان می بایست همواره یک مسئله برنامه نویسی را با فرض وجود پنج مرحله یاد شده ،دنبال نمائید . قطعا" حذف یک مرحله در زمان طراحی بمراتب ساده تر از نادیده گرفتن ! اولیه آن خواهد بود.
پالایش یک طرفه ( SidewaysRefinement )
همانگونه که قبلا" اشاره گردید ، ما علاقه مند به طراحی بالا به پایین می باشیم .( الگوریتم ماکرو بعنوان یک نقطه شروع در فرآیند طراحی برنامه) . پس از انتخاب رویکرد فوق ، می بایست شناخت مناسبی نسبت به مسئله ای که قصد حل آن وجود دارد ، ایجاد گردد. تا رسیدن به سطح میکرو( ارائه الگوریتم های میکرو) بمنظور حل مسئله مورد نظر راه زیادی را در پیش خواهیم داشت. بموازات حرکت از سطح مرور کلی برنامه به خصوصیات و ویژگی های یک برنامه ، می بایست دانش خود را نسبت به جرئیات مربوطه افزایش داد .
از پنج مرحله گفته شده ، می توان بمنظور نقطه شروع دید ماکرو خود در زمان فرآیند طراحی استفاده کرد. درادامه ، می توان هر یک از مراحل را بدقت بررسی تا جزئیات بیشتری در رابطه با مرحله مورد نظر ، مشخص گردد ( استخراج جزئیات لازم در رابطه با تحقق هر مرحله ) . فرآیند فوق ، " پالایش یک طرفه " ، نامیده می شود . در ادامه ، بمنظور شناخت مناسب فرآیند پالایش یک طرفه ، به بررسی یک نمونه می پردازیم .
فرض کنید ، کاربری دارای یک فایل بانک اطلاعاتی است که در آن تمام قرار ملاقات های وی ، ذخیره شده اند . قرار ملاقات ها در بانک اطلاعاتی با نظم و ترتیب خاص (تاریخ قرار ملاقات ) ذخیره شده اند . کاربر ، می خواهد قادر به مشاهده قرار ملاقات های خود بر اساس حروف الفبائی و بر اساس نام خانوادگی اشخاص مورد نظری که قصد ملاقات با وی را دارند ، باشد. چگونه می توان از پالایش یک طرفه ، بمنظور طراحی یک را ه حل استفاده کرد؟
پالایش یک طرفه مرحله مقدار دهی اولیه
می دانیم که کاربر دارای یک بانک اطلاعاتی شامل قرار ملاقات ها ، می باشد. ما همچنین می دانیم که کاربر می خواهد لیستی از قرار ملاقات های خود را بصورت مرتب شده و بر اساس نام خانوادگی مشاهده نماید . موارد فوق ، دید ماکروی ما از الگوریتم است . بنابراین ، در مرحله مقداردهی اولیه چه عملیاتی می بایست انجام داد ؟ واضح است که ما نیازمند باز نمودن بانک اطلاعاتی قرار ملاقات ها می باشیم . ما همچنین نیازمند یک فرم ( مثلا" یک فرم مبتنی بر VB.NET و یا فرم وب ) بمنظور نمایش نتایج پس از مرتب سازی قرار ملاقات ها ، خواهیم بود. ( فرض می شود از مکان بانک اطلاعاتی بر روی شبکه آگاهی داریم ، و می توان نام و رمز عبور کاربر را از بانک اطلاعاتی مربوطه بمحض آغاز اجرای برنامه توسط کاربر ، مشخص کرد) . با استفاده از اطلاعات فوق، اولین "پالایش یک طرفه " ، بصورت زیر خواهد بود :
همانگونه که در شکل فوق ، مشاهده می گردد بموازات حرکت از سمت چپ بسمت راست ، جزئیات مربوطه افزایش خواهد یافت . شکل فوق ، پالایش یک طرفه ، لیستی از برنامه های جانبی و توابع مورد نیاز بمنظور انجام فعالیت های مربوطه در مرحله مقداردهی اولیه را نشان می دهد . هر روتین کوچک، مسئول انجام عملیاتی خاص خواهد بود .
شبه کد ( PseudoCode )
عملیات پالایش را می توان در رابطه با هر مرحله با استفاده از "شبه - کد " ، دنبال کرد. شبه کد ،الگوریتمی برای بیان عملیاتی است که می بایست توسط یک روتین محقق گردد . در این راستا از یک گرامر مشابه انگلیسی ، استفاده می گردد . مثلا" شبه کد ، روتین IsValidUser بصورت زیر خواهد بود:
شبه کد روتین IsvalidUser
Is ValidUser()
If CurrentUserName Not in ValidUserList
Display Invalid User Error Message
Terminate Program
Else
Return ValidUserIDNumber
End
شبه کد ، عملیاتی را که یک روتین می بایست انجام دهد ، بدون اتکاء به گرامر یک زبان برنامه نویسی خاص ، تشریح می نماید. شبه کد ، زبانی مبتنی بر گرامری خاص نبوده و الگوریتمی از عملیات مورد نظر که می بایست توسط یک روتین انجام شود را مشخص می نماید. مزیت شبه کد، شباهت زیاد آن به زبان انگلیسی است و می توان آن را با افرادیکه برنامه نویس نبوده و بنوعی در فاز طراحی صاحبنظر می باشند ، به اشتراک تا صحت استنباطات حاصل شده تائید و یا اصلاح گردد.( در فاز طراحی می بایست یک ارتباط مستمر با کاربران صاحبنظر برقرارگردد، ما قرار است مسئله آنان را حل نمائیم نه مسئله خود را و یا نمی خواهیم مسئله ای دیگر را بر حجم مسائل آنان اضافه نمائیم!) بدین ترتیب ، امکان تشخیص خطاء و اعمال تعییرات لازم در خصوص برخورد با خطاهای احتمالی در ابتدا فراهم می گردد ( یکی از اصول مهندسی نرم افزار در این رابطه به این موضوع اشاره می نماید که به هر میزان که زمان کشف یک خطاء در چرخه حیات یک برنامه سریعتر باشد ، هزینه برخورد با خطاء کاهش خواهد یافت ) .
پس از آگاهی از اهداف ارائه شده در شبه کد ، می توان بسادگی اقدام به ترجمه شبه کد مربوطه به کدهای برنامه نویسی با استفاده از زبان مورد نظر نمود. فراموش نکنیم که طراحی خوب ، همواره پیاده سازی ساده تر برنامه ها را بدنبال خواهد شد.
الگوریتمی عمومی برای یافتن "Site label "هائیکه احتمال شبکه را حداکثر کنند به نام "Belief Propagation" (BP) نامیده میشوند و مهیا ساز یک ابزار مؤثر برای حل مسائل استنتاجی از طریق گسترش احتمالات مرزی از طریق شبکه عصبی است. در این جا سه تابع اساسی احتمال وجود دارد:
احتمال گره
احتمال مرزی
احتمالات مشروط
ایدة اصلی Belief Propagation عبارت است از:
احتمال Lable های پایه در یک حالت پایه در شبکه عصبی که از طریق محاسبة احتمال نهائی (جمع زدن) بر روی احتمال برای گره های پایه، داده شده فقط برای احتمالات "Site Label" های همسایگی Markov ، Ni که در شکل زیرنشان داده شده است (مثلاً node ها را میتوان به عنوان مدارهای نانومقیاس input/output در نظر گرفت)
میتوان نود ها را در شبکه طبقهبندی کرد به گونهای که هر یک دارای برچسب احتمال معین باشند و نیز آنهائی که مقادیر آنها از طریق الگوریتم تکثیر، تعیین میشود.
نودهای نوع اول از طریق یک ورودی محاسباتی که مقدار آن مقید به setup مسأله است.
چنین نودهائی به نام «نودهای قابل مشاهد» نامیده میشوند و سایر نودها به نام «نودهای پنهان» نامیده میشوند. ما به احتمالاتی استناد میکنیم که به صورت تقریبی محاسبه میشوند و به عنوان "belief" مینامیم و belief در نود i ام را بصورت b(xi) نشان میدهیم.
در روش MRF، نودهای قابل مشاهده موسوم به yi ، ثابت فرض میشود و xi معرف نودهای پنهان است. همان است. سپس فرض میشود که تعدادی وابستگی آماری بین xi و yi در هر موقعیت i ام وجود دارد و به عنوان «احتمال گره» نامیده میشود. تابع فوق اغلب به عنوان evidence برای xi خوانده میشود.
برای آنکه قادر باشیم استناد کنیم به هر چیزی در حوزة معماری کامپیوتر نانوئی، مجبوریم تعدادی ساختار پایه xi داشته باشیم. ساختار xi فرض شده را رمز می کنیم با این فرض که متغیر xi میبایستی تا جائیکه مقدور است با متغیرهای همسایگی xj ، سازگار باشد که آن را با تابع سازگاری نشان میدهیم که می بایستی فقط موقعیتهای همسایه را به هم میپیوندد. سپس تابع توزیع احتمال گره به ازاء متغیرهای مجهول xi که به صورت زیر است را اعمال می کنیم:
که در آن z یک ثابت نرمال شده است.
این احتمالات محاسباتی، قابلیت تکثیر در گام بعدی محاسبات را برآورد میکند. اثبات شده است که این الگوریتم تکثیر به حداکثر احتمال اختصاص یافته به کل شبکه همگرا خواهد شد و در آن هیچ چرخه ای بیرونی وجود ندارد. این الگوریم افزایشی،« پیچیدگی محاسباتی» در مرتبه تعداد نودهای موجود در شبکه با یک جملة وزن دهنده به نسبت ابعاد همسایگی دارد. در مورد چرخه ها، احتمالات میبایستی به
صورت ترکیبی بر روی حوزه شبکه انجام شود که متضمن راه حلهای مبتنی بر حداکثر احتمال است. یعنی اینکه، میبایستی شبکه به بلوکهای شبکهای loop – free که هر یک به صورت درونی دارای loop هستند، تقسیم شود. به هر حال، نشان داده شده است که الگوریتم تکثیر Belief، به حداکثر حالت احتمال در حضور Loopها، همگرا خواهد شد.
کاربرد های عمومی الگوریتمها به همراه استفاده از ساختمان داده ها:
یکی از کاربردهای مهم الگوریتمها و استفاده از ساختمان داده ها در مرتب سازی دادهها است. مرتب سازی عملی بنیادی در علم کامپیوتر است. (برنامههای زیادی از آن بعنوان یک مرحله میانی استفاده میکنند.) در نتیجه تعداد زیادی از الگوریتمهای مرتب سازی بهبود یافتهاند . اینکه کدام الگوریتم برای یک کاربرد مورد نظر بهتر است به تعداد اقلام اطلاعاتی که بایستی مرتب شوند , میزان مرتب بودن اقلام, محدودیتهای حافظه یا زمان و یا نوع دستگاه ذخیره سازی استفاده شده (حافظه اصلی, دیسکها یا نوارهای مغناطیسی و ...) بستگی دارد.
از جمله مهترین الگوریتمهای مرتب سازی میتوان به موارد زیر اشاره کرد :
مرتب سازی درجی (Insertion sort)
مرتب سازی ادغام (Merge sort)
مرتب سازی انتخابی (Selection sort)
مرتب سازی حبابی (Bubble sort)
مرتب سازی سریع (Quick sort)
مرتب سازی تنها مسئله محاسباتی که در آن الگوریتمها توسعه یافتهاند نمیباشد. کاربردهای عملی الگوریتمها و استفاده از ساختمان داده های مناسب در همه جا وجود دارند و شامل نمونههای زیر میباشند :
اینترنت مردم را در سراسر دنیا قادر میسازد تا به مقادیر زیادی از اطلاعات بطور سریع دستیابی یافته و آنها را بازیابی کنند. بنابراین الگوریتمهای هوشمند به منظور اداره و دستکاری این حجم زیاد از اطلاعات به کار گرفته میشود .یافتن مسیرهای مناسب انتقال داده و استفاده از موتورهای جستجو برای یافتن سریع صفحات .
پروژه ژن انسان با هدف شناسایی 1000000 ژن در DNA انسان , تعیین یک توالی از میلیاردها جفت پایه شیمیایی تشکیل دهنده DNA انسان , ذخیره این اطلاعات در پایگاههای داده و توسعه ابزارهای لازم جهت تحلیل دادههای مربوطه.
تجارت الکترونیکی این امکان را فراهم میکند که کالاها و سرویس یطور الکترونیکی معامله و مبادله شوند. طبیعتاّ این امر نیازمند نگهداری اطلاعات مهمی چون کلمات رمز و صورت حسابهای خصوصی بانک هاست. رمزگشایی و امضاهای دیجیتالی بر اساس الگوریتمهای عددی و نظریه اعداد میباشند.
نقشه جاده ها که در آن فاصله بین هر جفت تقاطع همجوار مشخص شدهاست. تعداد مسیرهای ممکن میتواند بسیار زیاد باشد؛ هدف ما این است که کوتاه ترین مسیر از یک تقاطع به تقاطع دیگر را بیابیم. این عمل همان مسئله یافتن کوتاه ترین مسیر از یک رأس به رأس دیگر در گراف میباشد.
منابع
Introduction to Algorithms (CLRS)-Second Edition - The MIT Press
Babylon dictionary (Persian Computer Encyclopedia) - Computer and IT dictionary for Persian