نحوه مقدار دهی اولیه کشورها در الگوریتم رقابت استعماری(پرسش و پاسخ مطرح شده)
۱- اول کار مقدار دهی اولیه (Intialization) کشورها با چه مقداری انجام میشوند؟ تولید رندم در چه بازه ایی است؟
۲- زاویهٔ theta موقع محاسبهٔ x به چه صورتی تاثیر میگذارد؟
۳- آیا مقدار x که با توزیع یکنواخت (uniform) محاسبه میشود، به شکل زیر در متلب محاسبه میشود؟
(beta*d*rand)
۴- اگر قرار باشد به امپراتوریای در اول کار مثلاً ۵ مستعمره تعلق بگیرد و ما مثلاً ۱۷ تا مستعمره داشته باشیم، کدام ۵ تا مستعمره به آن تعلق میگیرند؟
..........
پاسخ سوالات فوق:
1) همانگونه که در متن اموزشی بیان شده، تولید x با توزیع یکنواخت در بازه بین صفر و بتا ضربدر d انجام می گیرد. که در ان d فاصله میان مستعمره و امپریالیست است. بتا را نیز معمولاً حدود 2 در نظر می گیریم. وجود ضریب بتا بزرگتر از یک باعث ميشود تا کشور مستعمره در حين حرکت به سمت کشور استعمارگر، از جهتهاي مختلف به آن نزديک شود.
2) در الگوريتم معرفي شده، با افزودن يک زاويه تصادفي به مسير جذب مستعمرات، انحرافی در مسیر حرکت انجام ميگيرد. بدين منظور، در حرکت مستعمرات به سمت استعمارگر، کمي زاويه تصادفي نيز به جهت حرکت مستعمره، اضافه ميکنيم. بدين منظور اينبار به جاي حرکت به اندازه x، به سمت کشور استعمارگر و در جهت بردار واصل مستعمره به استعمارگر، به همان ميزان، ولي با انحراف theta در مسير، به حرکت خود ادامه ميدهيم. theta را به صورت تصادفي و با توزيع يکنواخت در نظر ميگيريم (اما هر توزيع دلخواه و مناسب ديگر نيز ميتواند استفاده شود). در حالت دو بعدی پیاده سازی این مورد بسیار ساده است. کافی است از ماتریس دوران دو بعدی استفاده کنیم. یعنی بردار کنونی را داریم. بردار موقعیت جدید از ضرب ماتریس دوران به ادهزه theta در ماتریس موقعیت قبلی ایجاد می گردد.
در حالتهای با بعد بزرگتر، این نوع نگاه ممکن است در پیاده سازی (کد نویسی برنامه) کمی پیچیدگی ایجاد کند. به همین منظور می توانیم مولفه های تک تک ابعاد را در اعداد تصادفی متفاوت ضرب کرده و بردار نهایی را نرمالیزه (هم اندازه با بردار اولیه) کنیم. اگر کدهای نوشته شده را ببینید، به همین صورت عمل شده است.
3) بله دقیقاً همین طور هست. باز هم توصیه می شود کد ها را ببینید.
4) این مستعمرات کاملاً تصادفی انتخاب می شوند و هیچ اولویتی بین آنها نیست. تابع randperm در متلب می تواند در انتخاب مستعمرات به ما کمک کند. این تابع جایگشت تصادفی n عدد را به ما می دهد. راهنمای متلب را برای همین موضوع ببینید.
منبع : نحوه مقدار دهی اولیه کشورها در الگوریتم رقابت استعماری