- نویسنده : پروژه فارسی
- بازدید : 127 مشاهده
رضایت کاربران از دانلود فایل
پیشنهاد
3445
تعداد دانلود
3230
رضایت مندی
92%
توضیحات کامل در مورد فایل
دانلود نمونه سورس کد vb.net در موضوع الگوریتم هستهای
امروز در این پست برای شما کاربران عزیز وبسایت فایل سحرآمیز یک نمونه سورس کد vb.net در موضوع الگوریتم هستهای آماده دانلود قرار داده ایم.
نمونه تصویر در زمان اجرا نرم افزار
در مورد الگوریتم هستهای بیشتر بدانید
مقدمه: این اولین نسل از الگوریتم های بسیار جدید است. ما یک پدیده معروف در فیزیک هسته ای به نام شکافت هسته ای را روی مسئله بهینه سازی طرح می کنیم. تعاریف اصلی: شکافت هسته ای: هنگامی که یک نوترون به هسته اتم ایزوتوپ های اورانیوم 235 برخورد می کند، باعث می شود آن هسته به دو قطعه تقسیم شود که هر یک از آنها هسته ای با حدود نیمی از پروتون ها و نوترون های هسته اصلی است. در فرآیند شکافتن، مقدار زیادی انرژی گرمایی و همچنین پرتوهای گاما و دو یا چند نوترون آزاد می شود. تحت شرایط خاص، نوترونهای فراری به هستههای اورانیوم اطراف برخورد میکنند و در نتیجه شکافت بیشتری به هستههای اورانیوم اطراف میدهند، که سپس نوترونهای بیشتری منتشر میکنند که هستههای بیشتری را میشکافند. این سری از شکافت های به سرعت در حال افزایش در یک واکنش زنجیره ای به اوج خود می رسد که در آن تقریباً تمام مواد شکافت پذیر مصرف می شود. شکافت نوترون و پروتون: نوترون: ذره بنیادی در هسته اتم که بار الکتریکی ندارد، آن را به صورت {نام، مقدار} نشان خواهیم داد، در مثال پیشنهادی ما: نام یک حرف الفبایی خواهد بود و مقدار به زیر اشاره دارد. وزن بین نوترون فعلی و نوترون بعدی. پروتون: ذره بنیادی با بار الکتریکی مثبت، در مثال پیشنهادی خود، آن را به صورت یک {name, value} نشان میدهیم: نام همیشه [PROTON] خواهد بود و مقدار حذف میشود زیرا در اینجا اثر الکتریکی را نادیده میگیریم. دلیل استفاده از پروتون ها بعدا ذکر خواهد شد. هسته: گروه سازمان یافته ای از نوترون ها و پروتون ها (زیرا در مثال ما نظم مهم است). فشردگی: ساختار درونی هسته را توصیف می کند، در اینجا به عنوان تعداد کل نوترون های درون هسته تعریف می شود. افزونگی: ساختار درونی هسته را نیز توصیف می کند و به عنوان بزرگترین فرکانس در بین تمام نوترون های درون هسته تعریف می شود. البته کمتر از یک نمیتونه باشه پتانسیل: قدرت نهفته هسته، توانایی آن را در بهترین راه حل (در صورت حداکثر یا حداقل شدن) توصیف می کند. برای هر هسته با مجموع وزن تمام نوترون ها در هسته اجرا می شود. ما به دنبال هسته بهینه با کمترین پتانسیل (برای مثال مشکل کمینه سازی) خواهیم بود که شرایط فشردگی و افزونگی را برآورده کند. بحرانی بودن: حالت بحرانی (کل واکنش) با احتمال اینکه یک نوترون آزاد شده در شکافت باعث شکافت بعدی شود تعیین می شود. اگر به طور متوسط ??کمتر از یک نوترون باعث شکافت دیگری شود، سرعت شکافت با گذشت زمان کاهش می یابد و در نهایت به کاهش می یابد. صفر به این وضعیت زیر بحرانی می گویند. هنگامی که بیش از یک نوترون باعث شکافت بعدی شود، سرعت شکافت و توان افزایش می یابد و وضعیت فوق بحرانی نامیده می شود. عامل گرما هسته ای: هرچه انفجار قوی تر باشد، انرژی حرارتی بیشتری تولید می شود، هنگامی که نوترون های بیشتری پس از هر شکافت واحد آزاد می شود، گرمای بیشتری (انفجار بزرگتر) ایجاد می شود (این امر بحرانی بودن واکنش را افزایش می دهد)، در اینجا با میانگین تعداد آزاد شده مشخص می شود. نوترون ها عامل فروپاشی اتمی: پس از تقسیم هسته اتمی ناپایدار به هسته ای پایدارتر تجزیه می شود که ذرات بتا و پرتوهای گاما ساطع می کند. در واپاشی بتای منفی (با نماد ?--واپاشی) یک هسته ناپایدار یک الکترون پرانرژی و یک پادنوترینو ساطع می کند و یک نوترون در هسته به پروتون تبدیل می شود که در هسته محصول باقی می ماند. در اینجا ما از اثرات الکترون و ضد نوترینو غفلت کردیم تا همه چیز را ساده نگه داریم. ما بدترین نوترون هسته را برای آن واپاشی انتخاب خواهیم کرد. مبانی این الگوریتم کمک خواهد کرد: نمودار ساختار داده ها و پیاده سازی: ما سعی خواهیم کرد ساده ترین راه را برای پیاده سازی مفاهیم خود در نظر بگیریم. در غیر این صورت محاسبات بسیار پیچیده خواهد شد. ??کلاس Simulation_Problem: مشکل توسط یک آرایه دوبعدی شبیه سازی شده است که هزینه های سفر از حالت X1 به حالت X2 را نشان می دهد. ایالات به صورت حروف الفبای {A نامگذاری می شوند. . Z} این کلاس هر بار که برنامه را برای ایجاد یک ماتریس تصادفی جدید از اعداد واقعی بارگذاری می کنید، ایجاد می شود. برای بدست آوردن هزینه [X1 - X2] به ردیف X1 و ستون X2 در ماتریس نگاه خواهیم کرد. ??کلاس نوترون: (نام به عنوان رشته، مقدار به عنوان دو برابر) این برای نوترون ها و پروتون ها استفاده می شود، اما زمانی که برای پروتون ها استفاده می شود، نام آن "PROTON" خواهد بود، زمانی که برای نوترون ها استفاده می شود، نام یک نام خواهد بود. حرف الفبایی ??رده هسته: -Sub Random_Fill_Nucleus(): برای پر کردن آن با نوترون ها و پروتون های تصادفی پس از هر واکنش. -Function Potentiality(): برای بدست آوردن مجموع وزن های هسته می خواهیم آن را به حداقل برسانیم تا به کمترین هزینه ممکن برسیم و این همان کاری است که واکنش انجام خواهد داد. -Function Redundancy(): حداکثر تکرار را در هسته جستجو می کند، این یک اصطلاح خشن است که بسیاری از حل ها به دلیل آن حذف می شوند، همانطور که بعدا خواهیم دید، نمی تواند کمتر از یک باشد. -Function Compactness(): تعداد نوترون هایی که در هسته به دست آورده ایم، این یک شرط مهم در حل بهینه خواهد بود، جایی که ما با حداقل مقدار آن متعهد هستیم، هیچ پاسخ مشخصی برای این مسئله وجود ندارد، بنابراین ما حل خواهیم کرد. aboآستانه خاصی از فشردگی دارد و تعیین بهترین پاسخ خود را به کاربر نهایی واگذار می کند. -Sub Emit_Beta(): به دنبال نوترون با بدترین مقدار در هسته می گردد و آن را به پروتون تبدیل می کند. Class Serial_Reaction: -Sub initialize(): برای تمام مقدار مواد: یک هسته تصادفی بدون افزونگی ایجاد کنید (اضافه = 1) و وزن تمام هسته های تصادفی را محاسبه کنید. ما همچنین مجموعهای از نوترونهای فعال داریم و آن را با یک نوترون آزاد شده اولیه که توسط کاربر تعیین میشود (که تعدادی نوترون تصادفی است) پر میکنیم، مطمئن باشید که این بر تشدید واکنش هستهای تاثیر خواهد گذاشت. اگر قبلاً هیچ مقداری را برای بهترین حل تعیین نکرده بودیم، هر هسته ای را به آن اختصاص دهید. (این فقط قبل از اولین واکنش اتفاق می افتد). -Sub Release(): مجموعهای از واکنشها را به ماده اعمال میکند و با این مراحل نشان داده میشود: ضریب توقف را بررسی کنید تا ببینید آیا باید به طور اجباری برای هر هسته در ماده توقف کنیم: -یک نوترون تصادفی از مجموعه نوترونهای فعال را دریافت کنید. . -تولید یک عدد صحیح تصادفی مناسب برای تعیین محل ضربه - قرار دادن نوترون فعال در داخل هسته برای اجرای ضربه - اگر هسته ضربه آستانه افزونگی و فشردگی را برآورده کند، قربانی نخواهد شد. اما برای ادامه واکنش به عنوان "آماده نیست" علامت گذاری می شود و به لیست نامزدها اضافه می شود. -اگر هسته ضربهای آستانهها را برآورده نکند، دچار شکافت هستهای میشود: + هسته را به دو قسمت مساوی تقسیم کنید. + در هر قسمت به دنبال نوترون با بهترین مقدار (کمترین مقدار) باشید. + بهترین نوترون های یافت شده را با توجه به عامل گرما هسته ای به لیست نوترون های فعال اضافه کنید + سپس هر دو بخش با توجه به عامل واپاشی اتمی دچار واپاشی اتمی می شوند. + هستههای رادیواکتیو را پس از فروپاشی اتمی پردازش کنید (زیادگی نامعتبر را حذف کنید و مقادیر هر دو بخش را مجدداً محاسبه کنید زیرا ساختار هسته تغییر کرده است) و بعد از آن به لیست نامزدها نیز اضافه کنید. لیست نامزدهای جدید را بررسی کنید: اگر هسته ای با هزینه کلی بهتر (پتانسیل کمتر) پیدا کنیم، این بهترین راه حل جدید ما است. برای آماده شدن برای واکنش جدید، Sub initialize() را فراخوانی کنید. استفاده از برنامه: [لطفاً قبل از اجرای برنامه، کل مقاله را بخوانید] در واقع برنامه بیشتر کار را برای شما انجام می دهد، در هر شروع یک مشکل جدید ایجاد می کند، فقط می خواهید پارامترهای مناسب را برای الگوریتم تنظیم کنید. از مقدار انبوه مواد یا فاکتور تجزیه اتمی بزرگ استفاده نکنید (ما به آن خواهیم رسید) مقدار زیاد مواد یا اندازه هسته عظیم باعث از کار افتادن رایانه شما می شود. (من از core2dou با رایانه رم 4 گیگابایتی برای پارامترهای پیشفرض استفاده میکنم) ضریب توقف تعداد واکنشها را تعیین میکند، و چون از حروف A..Z به عنوان حالتهای ممکن استفاده کردیم، فشردگی نمیتواند از 26 تجاوز کند (رابط از بیشتر پارامترهای حساس محافظت میکند). برای شروع، Start را فشار دهید، اگر زمان زیادی طول کشید، توقف را فشار دهید و پارامترها را تغییر دهید تا تاثیر آنها را مطالعه کنید. (شاید لازم باشد مشکل جدیدی را در کد پیاده سازی کنید تا جلوه را به خوبی مطالعه کنید) در عنوان بالای فرم تعداد حل های منحصر به فرد را مشاهده خواهید کرد (حل های تکراری از این حذف می شوند) و حل های بهینه در کادر متن چاپ می شوند. در وسط فرم نقاط مورد علاقه: ما دریافتیم که اندازه هسته بهینه برای بسیاری از نمونه ها را می توان با این معادله تخمین زد: اندازه هسته = ضریب فشردگی * 2 + ضریب افزونگی بنابراین به طور خودکار توسط برنامه تنظیم می شود. اگر کد را عمیق مطالعه کنید متوجه خواهید شد که وضعیت هر واکنش در شروع فوق بحرانی خواهد بود. و بعد از زمان تبدیل به زیر بحرانی می شود. این خوب است زیرا ما از ارزش کامل فشردگی مطمئن نیستیم و این روش به دلیل شکافتن، محدوده خوبی از فشردگی به ما می دهد. گاهی اوقات اگر پارامترها را تغییر دهید می بینید که بعد از مدتی حالت واکنش زیر بحرانی می شود و سپس تمام مواد شکافت پذیر مصرف می شود بنابراین واکنش سریال ادامه پیدا نمی کند، باید سعی کنید از گذر از این حالت خودداری کنید. در اینجا ما sub To-String() را برای نمایش فقط نوترون ها پیاده سازی کردیم، در واقع اگر کل هسته را نمایش دهید (گاهی اوقات) پروتون ها را در آن خواهید دید، در پیاده سازی ما این پروتون ها را دور زدیم زیرا فرض کردیم که وقوع یا ترتیب آنها تاثیری ندارد. محاسبه وزن در دنیای واقعی، نوترون های آزاد شده پس از تقسیم دو یا بیشتر خواهد بود، بنابراین برای حفظ حالت فوق بحرانی و اجتناب از قرار گرفتن در وضعیت "مواد شکافت پذیر مصرف می شود" یک عدد مناسب (البته بزرگتر از یک) را به عنوان یک عامل گرما هسته ای انتخاب کنید. به دلیل ماهیت مکانیسم فروپاشی اتمی، فشردگی عمیقاً تحت تاثیر عامل فروپاشی اتمی قرار می گیرد، بنابراین باید عدد نسبتاً کمی (اما بزرگتر از صفر) را انتخاب کنید. هسته ها در ابتدا پتانسیل بزرگی خواهند داشت که در آن واکنش فوق بحرانی خواهد بود و به دلیل شکافتن (که فشردگی و در نتیجه هزینه کل نوترون ها را کاهش می دهد) هسته ها پتانسیل کمی خواهند داشت که در آن واکنش به زیر بحرانی تبدیل می شود و این همان چیزی است که ما می خواهیم زیرا فعال است. نوترون ها به هسته های با پتانسیل کوچک برخورد می کنند تا حل های بهینه بیشتری تولید کنند. افunction Redundancy_Killer() برای کاهش افزونگی به حداقل سطح (1) بسیار مهم است تا بتوانیم هسته های تصادفی قابل مقایسه جدیدی تولید کنیم. در این مثال هسته ها با 10 درصد پروتون اولیه سازی شدند. کاربرد دنیای واقعی (مثال): یک شرکت هواپیمایی می خواهد یک برنامه کاری برای سازماندهی پروازهای خود در بسیاری از کشورها، بازدید از حداقل X فرودگاه با کمترین میزان سوخت، و با شرایطی مانند: نباید از همان فرودگاه بیش از (N) بازدید کند. بار) 3 یا 4 برابر ..چون مسافر زیاد نخواهد بود و بنابراین درآمد اقتصادی بهینه نخواهد بود. این یک الگوریتم هستهای است که در آن: نوترون: هسته فرودگاه: برنامه کاری فشردگی است: X افزونگی: N پتانسیل: هزینه کل سفر در فرودگاه ها (در هر هسته) عوامل دیگر تجربی هستند و توسط کاربر برای رسیدن به بهترین پاسخ تنظیم می شوند. الگوریتمهای هستهای در مقابل ژنتیک (چرا هستهای بهتر است؟): الگوریتمهای ژنتیک (برخلاف اینجا) مستقیماً یک ژن بد را از حل نامزد حذف نمیکنند. به جای آن به نسل های زیادی (جهش و متقاطع) نیاز دارد. در الگوریتمهای ژنتیک، طول ژنوم بر خلاف الگوریتمهای هستهای ثابت است که میتوان از آن برای حل مسائلی که طول حل ناشناخته است استفاده کرد. الگوریتم های ژنتیک حل فرعی «ناشناخته» یا «بن بست» را شناسایی نمی کنند در حالی که در اینجا (پروتون) شناسایی شده است. الگوریتم های هسته ای به دلیل واپاشی اتمی بسیار سریعتر از الگوریتم های ژنتیک همگرا می شوند. الگوریتم ژنتیک با شرایط سختی مانند حداکثر تکرار مجاز ژن های خاص در کروموزوم سر و کار ندارد، و اگر سعی کنید این را پیاده سازی کنید، بعداً متوجه خواهید شد که این شرایط باعث همگرایی الگوریتم ژنتیک می شود (بسیار کندتر). الگوریتمهای ژنتیک بسیار تحتتاثیر نسل گذشته هستند که میتواند بد باشد، اما الگوریتمهای هستهای بهطور تصادفی پس از هر واکنش شروع میشوند، بنابراین شانس بیشتری برای یافتن راهحل بهتر کشفنشده جدید (به عنوان یک نژاد کاملاً جدید در GA) پس از واکنش گذشته وجود دارد. الگوریتمهای ژنتیک در مورد جهشهای کور (مطالعهنشده) صحبت میکنند و از هیچ تابعی برای یافتن «بهترین جهش» استفاده نمیکنند، برخلاف الگوریتمهای هستهای که از «نوترونهای بهترین وزن» برای انجام شکافت هستهای استفاده میکنند.
ویژگی های اصلی :
- سرعت و کارای بالا در زمان اجرا
- قابلیت تنظیم (عامل فروپاشی اتم - عامل گرا هسته ای - مقدار مواد - اندازه هسته ای - عامل متوقف - آستانه فشردگی - افزونگی ترشولد - نوترون های آزاد شده اولیه)
- نمایش جدول اطلاعات
- و ...
برای شما کاربران عزیز پیشنهاد دانلود داده می شود.