برنامه‌های طراحی شده خواهد بود. اصولاً اطلاعات برای استفاده در برنامه‌های متلب باید در قالب mat. ذخیره شده باشد. اطلاعات خروجی نیز با این قالب نمایش داده می‌شود. برنامه‌های مذکور به نام‌های CreateDataOfCrop (پیوست شماره‌ی 1) و benefit (پیوست شماره‌ی 2) می‌باشد. برنامه‌ی اولی تمامی اطلاعات فایل main.xls را خوانده و در نهایت خروجی آن به صورت فایل main.mat خواهد بود. برنامه‌ی benefit میزان سود خالص هر محصول را از اطلاعات فایل main.mat محاسبه می‌کند. بدین صورت که ابتدا از فایل اخیر میزان درآمد (income) و هزینه (cost) هر هکتار از محصول را محاسبه و از کسر هزینه از درآمد، سود (benefit) را به دست آورده و در فایلی به نام benefit.mat ذخیره می‌کند که از این فایل در زیر برنامه‌ای که برای تابع هدف نوشته شده استفاده می‌شود.
3-2-6- تابع هدف
شکل کلی تابع هدف برای آبیاری کامل به صورت زیر می‌باشد.
MAX : [(2986366*A1) + (19152978*A2) + (12021940*A3) + (1603790*A4) + (101830244*A5) + (32644112*A6) + (17747926*A7) + (16160386*A8) + (33915096*A9) + (205309964*A10)]
i : نوع محصول
Ai : سطح زیر کشت محصول i
مقدار سود برای هر محصول در طول برنامه ثابت است و از کسر هزینه‌ها از درآمد به دست می‌آید. این مقادیر قبلاً استخراج و در فایلی به نام benefit.mat ذخیره می‌گردد و برای تعیین مقدار تابع هدف هر الگوی کشت (Benefit Function) از آن استفاده می‌شود. برای تعیین این مقدار برنامه‌ای به نام croppingpattern (پیوست شماره‌ی 3) نوشته شده و وظیفه‌ی آن محاسبه سود حاصل از هر پاسخ ارایه شده (کشور)، توسط الگوریتم می‌باشد و به این صورت عمل می‌کند که سطح زیر کشت هر محصول را در سود خالص حاصل از کاشت آن محصول ضرب کرده و مجموع سود حاصل از کاشت تمامی محصولات آن الگوی کشت را با هم جمع می‌کند تا سود حاصل از آن الگوی کشت به دست ‌آید.
3-2-7- محدودیت‌ها و نحوه‌ی اعمال آن
محدودیت‌های پیش‌رو شامل زمین، آب، کود، ماشین آلات و نیروی انسانی است و رعایت آن در الگوریتم به دو صورت قابل انجام است. یک راه حل این که هنگام ایجاد کشور‌های اولیه و همچنین پس از اعمال سیاست جذب و انقلاب این محدودیت‌ها اعمال و پاسخ‌ها تعدیل شود. راه دیگر این است که اجازه داده شود الگوریتم کار خود را به سرانجام برساند و پس از ایجاد پاسخ‌های نهایی، روی آن‌ها اعمال محدودیت شده و پاسخ بهینه استخراج گردد. بررسی‌ها نشان داد که اعمال محدودیت‌ها پس از ایجاد کشورها و ایجاد سیاست‌های جذب و انقلاب باعث تأثیر مثبت در جواب نهایی می‌شود.
3-2-8- برنامه‌های تعیین الگوی کشت به روش الگوریتم رقابت استعماری
برنامه‌ی اصلی الگوریتم رقابت استعماری برای تعیین الگوی کشت، ica_cp نام دارد (پیوست شماره‌ی 4) و می‌توان آن را به پنج بخش تقسیم کرد که در زیر به توضیح مفصل هر کدام از آن‌ها پرداخته می‌شود. هر کدام از این بخش‌ها به وسیله‌ی یک خط افقی از هم جدا شده و نام آن‌ها نیز در ابتدای آن بخش ذکر می‌گردد.
3-2-8-1- Problem Definition
در این بخش به تعریف مسئله‌ی مورد بحث پرداخته می‌شود. تابع هدف، تعداد متغیر‌های پاسخ نهایی، حد بالا و حد پایین هر پاسخ در این قسمت آورده می‌شود. نام این کاراکترها در جدول شماره‌ی 3-13 آمده است.
جدول 3-13 : پارامتر‌های مربوط به تعریف مسئله در الگوریتم رقابت استعماری
ردیف
علامت اختصاری
نام انگلیسی
نام فارسی
1
BenefitFunction
Benefit Function
تابع هدف
2
nVar
Number of Decision Variables
تعداد متغیر‌ها
3
VarSize
Decision Variables Matrix Size
اندازه‌ی ماتریس متغیر‌ها
4
VarMin
Lower Bound of Variables
حداقل مقدار هر یک از متغیر‌ها
5
VarMax
Upper Bound of Variables
حد اکثر مقدار هر یک از متغیرها
3-2-8-2- ICA Parameters
در این قسمت پارامتر‌های اصلی الگوریتم مقداردهی و تعریف می‌شود. این پارامترها شامل تعداد تکرار حلقه‌ی اصلی، تعداد جمعیت، تعداد امپراطوری‌ها، شایستگی تصاحب مستعمرات یا به عبارتی فشار انتخاب، ضریب جذب مستعمرات به سوی استعمارگر، احتمال ایجاد انقلاب، درصد تأثیر انقلاب در متغیر‌های یک کشور و میزان تأثیر قدرت مستعمرات در قدرت کل امپراطوری می‌باشد. نام اختصاری آن‌ها در جدول شماره‌ی 3-14 آمده است.
جدول 3-14 : ضرایب و پارامتر‌های اصلی در الگوریتم رقابت استعماری
ردیف
علامت اختصاری
نام انگلیسی
نام فارسی
1
MaxIt
Maximum Number of Iterations
حداکثر مقدار تکرار حلقه اصلی الگوریتم
2
nPop
Population Size
تعداد کشور‌ها
3
nEmp
Number of Empires/Imperialists
تعداد امپریالیست‌ها
4
Alpha
Selection Pressure
فشار انتخاب
5
Beta
Assimilation Coefficient
ضریب جذب
6
pRevolution
Revolution Probability
احتمال ایجاد انقلاب
7
Mu
Revolution Rate
نرخ انقلاب
8
Zeta
Colonies Mean Benefit Coefficient
ضریب تأثیر مستعمرات در قدرت امپراطوری
در انتهای این بخش زیر برنامه‌ی ShareSettings (پیوست شماره‌ی 5) اجرا می‌گردد. در این برنامه پارامتر‌هایی که در زیر برنامه‌ها نیاز است به اشتراک گذاشته شده و به صورت گلوبال تعریف می‌شود تا نیازی به تعریف آن‌ها در هر برنامه نباشد در عوض در ابتدای هر برنامه پارامتر‌ها فراخوانی می‌شود. این پارامتر‌ها که در جداول شماره‌ی 3-13 و 3-14 آورده شده در برنامه‌ی ShareSettings در دو مجموعه‌ی جداگانه به نام‌های Problemsetting و Icasetting قرار می‌گیرد و با گلوبال قرار دادن این مجموعه‌ها، متغیر‌های زیرمجموعه‌ی آن‌ها در تمام زیر برنامه‌ها قابل فراخوانی است. برای مثال پارامتر MaxIt در ابتدای برنامه‌ی اصلی مقداردهی می‌شود سپس برنامه‌ی ShareSettings اجرا می‌شود. در برنامه‌ اخیر هر پارامتر به شکل زیر تعریف شده است.
Global ICASetting
ICASettings.MaxIt=MaxIt;
با این کار تمام پارامتر‌هایی که در این برنامه تعریف شده به صورت گلوبال درآمده و در ابتدای هر برنامه به صورت زیر فراخوانده می‌شود.
Global ICASetting
MaxIt=ICASettings.MaxIt;
3-2-8-3- Initialization
در این قسمت ابتدا برنامه‌ی CreateInitialEmpire (پیوست شماره‌ی 6) اجرا و پس از آن ماتریس BestBenefit ایجاد می‌گردد تا پاسخ‌های بهینه در هر بار تکرار الگوریتم در آن ذخیره شود. عملیاتی که در خلال اجرای برنامه‌ی CreateInitialEmpire انجام می‌گردد به این شرح است.
ابتدا جمعیت اولیه به تعداد nPop از الگو‌های کشت (کشور) ایجاد و در یک ساختار (structure) به نام country(k).Position ذخیره می‌گردد. با توجه به این که ممکن است منابع موجود برای الگوی‌های کشت ایجاد شده در جمعیت اولیه کافی نباشد در سطرهای 30 تا 47 برنامه، منابع مصرفی بررسی و سطح زیر کشت محصولات تا میزانی که منابع موجود برای آن‌ها کافی باشد کاهش می‌یابد. سپس مقدار تابع هدف برای هرکدام توسط برنامه‌ی croppingpattern تعیین و در ساختار country(k).Cost قرار داده می‌شود. حال این الگو‌های کشت به ترتیب نزولی مرتب و قوی‌ترین افراد جمعیت به تعداد nEmp به عنوان امپریالیست انتخاب می‌گردند و با استفاده از برنامه‌ی رولت ویل27 (پیوست شماره‌ی 7) شایستگی امپریالیست‌ها برای تصاحب مستعمرات تعیین و کشورهای مستعمره بین آن‌ها توزیع می‌شود. در پایان این برنامه نیز به وسیله‌ی زیر برنامه‌ی UpdateTotalBenefit قدرت کل امپراطوری تعیین می‌گردد. قدرت کل امپراطوری برابر است با قدرت استعمارگر به اضافه‌ی zeta برابر میانگین قدرت مستعمرات.
3-2-8-4- ICA Main Loop
این بخش حلقه‌ی اصلی الگوریتم را تشکیل می‌دهد که زیر برنامه‌های اصلی در داخل آن قرار دارد و به تعداد پارامترMaxIt تکرار می‌شود. این برنامه‌ها به ترتیب اجرا در ادامه توضیح داده می‌شود.
الف: AssimilateColonies(emp)
در این برنامه (پیوست شماره‌ی 8) سیاست جذب بر روی مستعمرات اعمال می‌شود. از خط 3 تا 10 پارامتر‌هایی که برای اجرای برنامه نیاز است و به صورت گلوبال تعریف شده فراخوانی می‌شود و در خطوط 12 تا انتهای برنامه سیاست جذب اجرا می‌گردد بدین صورت که به وسیله‌ی دستور rand(VarSize) به تعداد VarSize عدد تصادفی ایجاد می‌گردد و حاصل در beta ضرب می‌شود سپس مقدار به دست آمد در اختلاف موقعیت استعمارگر و مستعمره ضرب و با موقعیت مستعمره جمع و موقعیت جدید آن را تعیین می‌کند. این کار باعث نزدیک‌تر شدن مستعمره به استعمارگر می‌شود. این عمل بر روی تمام مستعمرات طی دو حلقه‌ی ایجاد شده در برنامه صورت می‌پذیرد. با توجه به این که ممکن است منابع موجود برای الگوی های کشتی که بر روی آن‌ها سیاست جذب اعمال شده کافی نباشد در سطرهای 25 تا 42 برنامه، منابع مصرفی بررسی و سطح زیر کشت محصولات این الگوهای کشت تا میزانی که منابع موجود برای آن‌ها کافی باشد کاهش می‌یابد.
ب: DoRevolution(emp)
از دیگر زیر برنامه‌های اصلی الگوریتم اجرای سیاست انقلاب است (پیوست شماره‌ی 9). در خطوط 3 تا 15 این برنامه پارامتر‌های مورد نیاز برنامه فراخوانده می‌شود. سپس در خطوط 19 تا انتهای برنامه طی دو حلقه‌ی ایجاد شده بر روی امپراطوری‌ها و مستعمرات این سیاست اعمال می‌گردد. نحوه‌ی اقدام بدین صورت است که با استفاده از دستور randn(VarSize) یک سری عدد تصادفی28 نرمال ایجاد و در sigma (درصدی از اختلاف VarMin و VarMax) ضرب و حاصل با موقعیت اولیه‌ی امپریالیست یا مستعمره جمع می‌گردد تا موقعیت جدید به دست آید. این کار برای تک‌تک استعمارگران و مستعمرات اعمال می‌شود با این تفاوت که در مورد استعمارگران ابتدا مقدار تابع هدف برای موقعیت جدید بررسی می‌شود و در صورتی که اجرای این سیاست باعث بهبود مقدار تابع هدف شده باشد موقعیت جدید مورد قبول واقع می‌گردد در غیر این صورت استعمارگر بدون تغییر خواهد ماند ولی در خصوص مستعمرات، هرگونه انقلاب ولو اینکه باعث تضعیف موقعیت آن‌ها شود مورد قبول خواهد بود. در اجرای این سیاست ممکن است الگوی های کشت طوری تغییر نماید که منابع موجود برای آن‌ها کافی نباشد لذا در سطرهای 32 تا 47 و 66 تا 84 برنامه، منابع مصرفی برای الگوهایی که این سیاست در مورد آن‌ها اعمال شده بررسی و سطح زیر کشت محصولات این الگوها تا میزانی که منابع موجود برای آن‌ها کافی باشد کاهش می‌یابد.
ج:IntraEmpireCompetition
این برنامه برای رقابت درونی بین مستعمرات و استعمارگر طراحی شده است (پیوست شماره‌ی 10). این کار با ایجاد یک حلقه‌ی for و دو حلقه‌ی if صورت می‌پذیرد. حلقه‌ی for برای این است که عملیات بر روی تمام امپراطوری‌ها انجام شود. در اولین حلقه‌ی if نیز مستعمرات یک امپراطوری بر اساس مقدار تابع هدف به صورت نزولی مرتب می‌گردد سپس در حلقه‌ی دوم if مقدار تابع هدف مستعمره‌ای که بیشترین مقدار را دارد با مقدار تابع هدف استعمارگر مقایسه و در صورت بیشتر بودن جای مستعمره و استعمارگر عوض می‌شود.
د:InterEmpireCompetition
این برنامه برای اجرایی کردن سیاست رقابت بین امپراطوری‌ها صورت می‌گیرد (پیوست شماره‌ی 11). خط 3 تا 5 این برنامه شامل یک شرط if می‌باشد و بررسی می‌کند که اگر فقط یک امپراطوری وجود داشت این زیر برنامه اجرا نشود. در خط 7 و 8 نیز پارامتر مورد نیاز فراخوانده می‌شود. در خطوط 10 تا 13 نیز TotalCost (قدرت کل امپراطوری) در یک ماتریس جمع و ضعیف‌ترین امپراطوری تعیین می‌گردد. در خطوط 15 تا 25 احتمال تصاحب ضعیف‌ترین کشور از ضعیف‌ترین امپراطوری توسط سایر امپراطوری‌ها تعیین می‌گردد.
طی دو حلقه‌ی if

مطلب مرتبط :   منبع مقاله دربارهسلسله مراتب، پژوهشگران

Comments (0):

Write a comment: