![]() |
فيلم آموزشي كدهاي الگوريتم بهينه سازي فاخته
با سلام با توجه به تماسها و درخواست هاي مكرر شما عزيزان اقدام به تهيه فيلم توضيحات براي كدهاي الگوريتم بهينه سازي فاخته نموديم. تلاش شده است تا جاي ممكن جزئيات كدنويسي الگوريتم COA در اين فيلمها توضيح داده شود تا ابهامات و سوالات مختلف شما عزيزان در مورد قسمت هاي مختلف اين كدها برطرف شود. فيلم آماده شده در 2 فايل ضبط شده است كه در مجموع 75 دقيقه مي باشد. هر فايل بصورت جداگانه فشرده شده و به چند قسمت 10 مگابايتي تقسيم شده است تا دانلود آنها راحتتر باشد. براي بازكردن و مشاهده ي هركدام از فيلمهاي شماره 1 و 2، لازم است شما تمام قسمتهاي آن فيلم را دانلود كرده و در فولدري كنار هم قرار دهيد. سپس كافيست فقط يكي از قسمت هاي دانلود شده از هر فيلم را كليك راست كرده و با برنامه WinRAR آنرا از حالت فشرده خارج كنيد. فيلم مورد نظر براحتي باز شده و قابل مشاهده مي باشد. براي هر دو فيلم همين روال را جهت مشاهده فيلم انجام دهيد. لينك دانلود فايلها بصورت يكپارچه: ------------------------------------------------------------------------------ فيلم 1: https://telegram.me/cuckoo_optimization_algorithm حجم فايل: 40 مگابايت فيلم 2: https://telegram.me/cuckoo_optimization_algorithm حجم فايل: 42 مگابايت ----------------------------------------------------------------------------- لينك هاي كمكي: فيلم 1: https://telegram.me/cuckoo_optimization_algorithm حجم فايل: 40 مگابايت فيلم 2: https://telegram.me/cuckoo_optimization_algorithm حجم فايل: 42 مگابايت ------------------------------------------------------------------------------ با توجه به ناپايداري و قطع و وصل هاي مكرر ديتابيس اين سايت، تصميم بر آن شد تا يك كانال تلگرامي، مخصوص الگوريتم COA را براي مواقع ضروري آماده به كار نگه داريم. تا مطالب جديد و بروز را هميشه در جيب خود به همراه داشته باشيد. مطالب اين سايت و كانال تلگرام همزمان آپديت خواهند شد و انتخاب مراجعه به هر مسير ارتباطي با شما عزيزان خواهد بود. آدرس كانال بصورت زير ميباشد. در صورت تمايل ميتوانيد اين كانال را Add كنيد. آدرس كانال: با سپاس رامين رجبيون |
سلام آقای رجبیون در الگوریتم شما با چه مکانیزمی به بحث exploration پرداخته میشود ؟ متشکرم
|
ببينيد در الگوريتم بهينه سازي فاخته پارامتر مشخصي براي exploration يا exploitation نداريم كه بگيم مثلا كار فلان پارامتر فقط exploration هست. پارامترهايي كه در اينجا تعريف ميشن بصورت ضمني كار مي كنن. يعني هر كدوم چندين كار رو بصورت همزمان انجام ميدن و همين مساله باعث ايجاد سرعت و دقت بالاي كار الگوريتم COA ميشه.
براي مثال تخم گذاري هم كار exploration داره هم به ما كمك ميكنه محيط رو بصورت local جستجو كنيم و هم باعث ميشه بتونيم از local optimum ها فرار كنيم. چون جمعيت جديد تخم ها به نحو خاصي، در اطراف فاخته مادر قرار ميگيره ميتونه همه اينكارها رو انجام بده. يا خود بحث مهاجرت ميتونه جستجو و همگرايي رو همزمان به عهده بگيره. براي مشاهده برتري خاص اين عملگر ها و نحوه تعريف اونها اين پست رو از سايت اصلي مشاهده كنيد. . . . |
سلام جناب مهندس رجبیون
با تشکر از این همه زحمتی که در رابطه با الگوریتم فاخته کشیدید من از کدهای شما در بهینه سازی یک شبکه برق جهت کاهش تلفات استفاده کردم و در تابع کاست فانکشن اون یکه پخش بار شبکه برق قرار دادم بعبارتی خروجی برنامه فاخته به تابع کاست فانکشن رفته و پس از پخش بار شبکه ، خروجی کاست فاکنشن به برنامه بهینه سازی میرود واین پروسه اینقدر ادامه پیدا میکنه که تلفات شبکه به کمترین میزان برسه مشکلی که بنده در این فرایند دارم اینه که خروجی برنامه بهینه سازی که دو سطری هستش cuckooPop{cuckooNumber}.profitValues = -feval(powerDGFunction,[cuckooPop{cuckooNumber}.center ; cuckooPop{cuckooNumber}.newPosition4Egg]) مربوط به موقعیت تخمها و فاختها میباشد و موجب دو سطری شدن خروجی میگردد در حالیکه وردی کاست فانکشن برنامه پخش بار باید یک سطری باشد در صورت امکان لطف بفرمایید و ایمیلتون رو اعلام کنید که کدها رو براتون ارسال کنم و به بنده حقیر هم مثل سایرین کمک بفرمایید با تشکر از لطف شما |
نقل قول:
با سلام ببينيد شما در تابع هزينه اي كه براي coa مينويسيد بايد جوري كدنويسي كنيد كه برنامه تون قادر باشه يك ماتريس جمعيتي از فاخته ها رو دريافت كنه و به ازاي هر سطر اون ماتريس جمعيتي يك كاست حساب كرده و برگست بده. يعني اگر ماتريس ورودي شما n سطر داشته باشه، خروجي تايع هزينه شما هم، برداري با n سطر خواهد بود. |
سلام به همگی
لینک ها خرابن لطفا اصلاح کنید با تشکر |
الگوریتم فاخته
با عرض سلام وخسته نباشید مشکل من در کدهای اصلی الگوریتم فاخته است اگه میشه فایلشو
واسه دانلود بزارین خیلی گیرشم خیلی متشکرم (کدهای اصلی) |
نقل قول:
فايل هاي برنامه در سايت مرجع الگوريتم بهينه سازي فاخته قرار داده شده. ميتونيد از اونجا دانلود كنيد. |
با سلام
در کدهای برنامه شما ابتدا برای هر فاخته یک شعاع تخم گذاری تعیین می کنید. بعد در درون این شعاع به تعداد تخم هایی که هر فاخته قرار است بگذارد تعدادی شعاع کوچکتر تعیین می کنید که تخم ها را در شعاع بزرگتر به صورت پراکنده بگذارد. و برای این که در همه آن فضا تخم گذاری پخش شود به جای این که تصادفی تخم گذاری انجام شود برنامه را وادار می کنید که تخم ها را به طور یکسان پخش کند. سوال من از همین جا آغاز می شود. چرا برای این کار این همه پیچیده و از طریق زاویه و سینوس و کسینوس کار کرده اید؟ فرض کنید مسئله من 10 تا پارامتر دارد. خوب هر پارامتر مثلا پارامتر اول در یک بازه می تواند مقدار بگیرد. وقتی که تخم گذاری انجام می شود یا یک عدد به مقدار قبلی اضافه می شود و یا یک عدد از آن کم می شود که مقدار آن پارامتر برای تخم جدید مشخص شود. خوب این اضافه و کم شدن یک عدد به یکی از پارامتر ها یک کار دو بعدی نیست. لازم نبود که بیاییدبازه 0 تا 2*pi را به تعداد تخم ها به میزان مساوی تقسیم کنید و بقیه ماجرا را انجام دهید. چرا کار زیر را انجام ندادید: 1- ابتدا مثل کد های شما با دستورات زیر برای هر فاخته یک شعاع در نظر می گیریم: for cuckooNumber = 1:numCuckooS cuckooPop{cuckooNumber}.eggLayingRadius = cuckooPop{cuckooNumber}.numberOfEggs/summ * ( radiusCoeff * (varHi-varLo) );i end ببخشید که بهم میریزد 2- در مرحله دوم ما به جای کار شما برای تعیین شعاع های کچکتر از روش زیر استفاده می کنیم: for cuckooNumber = 1:numCuckooS cuckooPop{cuckooNumber}.eggLayingRadiuses = linspace( - cuckooPop{cuckooNumber}.eggLayingRadius , cuckooPop{cuckooNumber}.eggLayingRadius , cuckooPop{cuckooNumber}.numberOfEggs);i end در این مرحله من به جای روش شما امده ام بازه منفی R تا مثبت R را به تعداد تخم ها به قسمت مساوی تقسیم کرده ام. همین شعاع ها را به عنوان شعاع تخم گذاری در نظر می گیریم. 3- for cuckooNumber = 1:numCuckooS params = cuckooPop{cuckooNumber}.center; % get center values tmpRadiuses = cuckooPop{cuckooNumber}.eggLayingRadiuses;i numRadiuses = numel(tmpRadiuses);i newParams = [];i for cnt = 1:numRadiuses newParams = [newParams; params + tmpRadiuses(cnt)];i end % check for variable limits newParams(newParams>varHi) = varHi;i newParams(newParams<varLo) = varLo;i cuckooPop{cuckooNumber}.newPosition4Egg = newParams;i end |
سوال بعدی من در باره این دستور است:
currentMaxProfit = -feval(costFunction,currentBestCuckoo);i مقداز مورد نیاز شما قبلاً حساب نشده که برنامه مجبور نباشد یک بار دیگر بهترین فاخته را به تابع هزینه بفرستد؟ این خودش خیلی وقت گیر است. مخصوصا در برنامه من که در تابع هزینه خودش یک بهینه سازی دیگری انجام می شود. هر چه کمتر تابع هزینه فراخوانی شود بهتر است. دو جای دیگر هم فراخوانی شده در انتهای حلقه که اگر مقادیرشان موجود است بشود حفظشان کرد و دوباره هزینه اش محاسبه نشود بهتر است. |
زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۱۱:۲۱ بعد از ظهر ميباشد. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.