cold.boy70 (15-12-16), designme (29-02-12), fakhravary (01-11-14), kamyab11 (16-06-19), M A H R A D (22-02-12), MARINE (19-02-14), Moein (23-02-12), mohamad70 (20-02-12), Rezasam1 (24-02-12)
الگوريتم ژنتيك (Genetic Algorithm) يك الگوريتم جست و جو براساس الگوي تكامل نسل ها در طبيعت است. ايده ي اين الگورتيم به شكل جدي پس از تحقيقات John Holland از دانشگاه مشيگان مطرح شد. در اين تاپيك به تدريج گام هاي استفاده از اين الگوريتم و كاربرد آن در بهينه سازي به خصوص بهينه سازي چند هدفه (Multi-Objective Optimization) مطرح خواهد شد.
نگاهي به يك مسئله ي بهينه سازي چند هدفه:
در بهينه سازي طراحي يك سيستم اگر مجموعه يX={x1,x2,..xm}
متغير هاي طراحي (Design Variable) باشند آن گاه طراح بايد اين متغير هاي طراحي را به گونه اي تغيير دهد كه مقادير مجموعه ي توابع هدف (Cost Function) اكسترمم شود:
F={f1,f2,...fn}
مثال:
در بهينه سازي طراحي يك تير طراح بايد مساحت سطح مقطع تير و طول تير را به گونه اي تغيير دهد كه اولا" تغيير شكل تير نسبت به بار وارد به تير كمينه باشد و همچنين تير كم ترين جرم را داشته باشد. در اين طراحي متغير هاي طراحي (D.V.) مساحت سطح مقطع و طول تير هستند و توابع هدف (C.F.) مقدار تغيير شكل تير و جرم آن هستند كه طراح سعي دارد مقدار آن ها را كمينه كند.
كاربرد الگوريتم ژنتيك در بهينه سازي:
الگوريتم ژنتيك يك روش جست و جوي مستقيم (Direct Search) در بهينه سازي محسوب مي شود زيرا مستقيما" با مقدار تابع هدف سر و كار دارد و برخلاف روش هاي Gradient Based از تابع هدف مشتق گيري رياضي نمي كند. در GA متغير هاي طراحي به شكل رشته هاي كروموزوم كد مي شوند و اين رشته ها فرآيند هاي تكامل طبيعي نظير توليد مثل (Crossover) و جهش (Mutation) را سپري مي كنند. در هر مرحله رشته هاي معيوب حذف شده (Termination) و رشته هاي برتر باقي مي مانند و ويژگي خود را به نسل بعد منتقل مي كنند. بدين ترتيب هر نسل جديد، برتر از نسل هاي قديمي خواهد بود. اين روند تكامل را بسته به كاربرد مسئله مي توان تا دست يابي به برترين نسل ادامه داد. در نهايت برترين رشته هاي كروموزومي به دست آمده Decode مي شوند تا بهينه ترين متغير هاي طراحي كه همان دغدغه ي طراح بودند، به دست آيند.
آخرین ویرایش توسط ravegoat در تاریخ 25-02-12 انجام شده است علت: اشكال نگارشي
cold.boy70 (15-12-16), designme (29-02-12), fakhravary (01-11-14), kamyab11 (16-06-19), M A H R A D (22-02-12), MARINE (19-02-14), Moein (23-02-12), mohamad70 (20-02-12), Rezasam1 (24-02-12)
تمامي متغير هاي طراحي بايد به صورت يك رشته تعريف شوند. روش GA ايجاب مي كند كه متغير ها مانند يك كروموزوم باشند تا بتوان فرآيند هايي نظير جهش را روي آن ها پياده سازي كرد. عمل تبديل متغير هاي طراحي به رشته را Coding مي گويند. فرضا" اگر متغير طراحي ما طول تير باشد مي توان براي تبديل آن به يك رشته آن مقدار طول را در مبناي عدد 2 بيان كرد. در اين صورت اگر طول تير 3 متر باشد، كروموزوم به شكل زير تعريف مي شود:
1|1|0|0|0|0|0|0
طول يك كروموزوم بستگي به گستردگي فضاي جست و جو ما دارد. در مثال بالا از 8 بيت استفاده شده است. فرض بر اين بوده است كه طول تير فقط در واحد هاي يك متري تغيير مي كند و در نتيجه اين مدل كدينگ مي تواند تيري با طول صحيحي بين 0 تا 255 متر را پوشش دهد. بديهي است كه براي گستره ي طول بزرگ تر بايد تعداد بيت ها را افزايش داد.
متغير هاي طراحي ما همواره مقادير عددي نيستند. مسئله ي فروشنده ي دوره گرد (Traveling Saleman Problem) در نظر بگيريم. در اين مسئله فروشنده بايد فرضا" از هشت جزيره ي A، B تا H به ترتيبي عبور كند كه حداقل فاصله ي ممكن براي سفر به تمام اين جزيره ها را پيموده باشد. در اين مسئله ترتيب پيمايش جزيره ها، متغير طراحي است و مسافت طي شده، تابع هدف خواهد بود كه مقدار آن بايد كمينه شود. براي كد كردن متغير طراحي مي توان اين ايده را به كار بست:
يك كروموزوم 8 بيتي تعريف مي كنيم كه بيت اول آن از سمت چپ، نام اولين جزيره اي است كه فروشنده به آن سفر مي كند. بيت دوم نام دومين جزيره اي خواهد بود كه فروشنده به آن مي رود و الي آخر. پس كروموزوم زير نشان مي دهد:
كه فروشنده سفر خود را از جزيره ي B آغاز كرده است. بعد به جزيره ي A رفته است و طبق همين روند، سفر او در جزيره ي G خاتمه يافته است.
B|A|C|E|H|F|D|G
همان طور كه ملاحظه مي كنيم روش Coding اختياري و به شكلي قراردادي است و ممكن است براي يك مسئله روش هاي مختلفي براي كدينگ وجود داشته باشد اما هر روش كدينگ حتما" (تاكيد مي شود حتما") بايد دو ويژگي زير را داشته باشد:
- روش كد كردن بايد تمام فضاي جست و جو ي متغير هاي طراحي را پوشش دهد. از ديد رياضي كد كردن بايد از فضاي جست و جو به فضاي رشته ها پوشا باشد. اگر روشي حتي اگر يكي از حالت هاي فضاي جست و جو را نتواند پوشش دهد، آن روش كدينگ مناسب نخواهد بود. به عنوان مثال اگر روش كد كردن يكي از مقادير طول تير و يا يكي از حالت هاي سفر فروشنده در مثال هاي فوق را نتواند به شكل يك كروموزوم نشان دهد، نمي توان از آن روش كدينگ استفاده كرد.
- روش كدينگ نبايد دو مقدار و يا دو حالت در فضاي جست و جو را با يك رشته ي يكسان نشان دهد. از ديد رياضي كد كردن بايد از فضاي جست و جو به فضاي رشته ها رفتار تابع را داشته باشد. در مثال فوق اگر روش كد كردن، دو طول مختلف تير را با رشته ي يكساني نمايش دهد، نمي توان از آن روش استفاده كرد.
لازم به ذكر است كه اگر كدينگ براي يك حالت در فضاي جست و جو، دو يا تعداد بيش تري رشته در نظر بگيرد، آن روش همچنان معتبر است. از ديد رياضي روش كدينگ الزما" نبايد يك تابع يك به يك باشد. در مثال فروشنده ي دوره گرد، مسافت طي شده در دو حالت زير با هم برابر اند:
B|A|C|E|H|F|D|G
G|D|F|H|E|C|A|B
به عبارتي يكي حالت مسير رفت و ديگري حالت مسير برگشت را نشان مي دهند.
توجه داشته باشيم كه هرچه روش Coding ساده تر باشد و براي تعريف آن از تعداد كم تري بيت استفاده شود، الگوريتم ژنتيك سريع تر عمل مي كند و عمل Decoding نيز ساده تر خواهد بود.
cold.boy70 (15-12-16), designme (08-03-12), fakhravary (01-11-14), kamyab11 (16-06-19), M A H R A D (13-06-13), MARINE (19-02-14), Moein (23-02-12), Rezasam1 (24-02-12)
جمعيت اوليه: مجموعه اي از كروموزوم ها هستند كه به شكل تصادفي توليد مي شوند و اولين نسل را براي سير تكامل به وجود مي آورند. در اين جمعيت تصادفي، هم احتمال حضور كروموزوم هاي برتر و هم احتمال حضور كروموزوم هاي معيوب وجود دارد.
فرض كنيم كه متغير هاي طراحي ما از جنس عدد هستند. اين اعداد را به مبناي 2 برده و با كروموزوم هايي به طول 8 بيت كد مي كنيم. در نتيجه يك كروموزوم تصادفي ،0 ها و يا 1 هايي را شامل مي شود كه به شكلي تصادفي در كنار هم قرار گرفته اند و يك رشته ي 8 بيتي را توليد مي كنند.
تعداد جمعيت اوليه:
تعداد جمعيت اوليه پارامتري تجربي است و به عوامل زير بستگي دارد:
- طول كروموزوم ها: هر چه طول كروموزوم بيش تر باشد، تعداد جمعيت اوليه بايد افزايش يابد.
- نوع داده در هر بيت كروموزوم : هر چه داده اي كه در يك بيت قرار مي گيرد تنوع بيش تري داشته باشد، تعداد جمعيت اوليه افزايش يابد. رشته اي كه هر بيت آن يكي از حروف الفبا را در خود جاي مي دهد نسبت به حالتي كه هر بيت مي تواند تنها مقدار صفر و يا يك را قبول مي كند، نياز به جمعيت اوليه ي بيش تري دارد.
سورس MATLAB براي توليد 150 رشته ي تصادفي به طول 8 بيت:
حال ماتريس P جمعيت اوليه ي ما را شامل شده است.کد:for i=1:150 for j=1:m a=rand; if a>=0.5 a=1; else a=0; end P(i,j)=a; end end
آخرین ویرایش توسط ravegoat در تاریخ 26-02-12 انجام شده است
fakhravary (01-11-14), MARINE (19-02-14), Moein (26-02-12), Rezasam1 (27-02-12)
رمز گشايي:
پس از توليد جمعيت اوليه بايد آن ها را رمز گشايي (Decode) كرد. رمز گشايي دقيقا" عكس عمل كد كردن است و هر كروموزوم را به عضوي از فضاي جست و جوي متغير هاي طراحي بر مي گرداند.
طبق مثال هاي گذشته، ما طول تير را براي آن كه تبديل به رشته كنيم، آن را به مبناي 2 برده و با يك 8 بيتي نمايش مي داديم. جمعيت اوليه ي ما در اين مثال، 8 بيتي هاي تصادفي خواهند بود كه اگر رمز گشايي شوند، هر كدام مقدار يك طول را بيان مي كنند. مثلا":
1|1|0|1|0|0|0|0
يكي از كرموزوم هاي جمعيت اوليه در مثال طراحي تير باشد. چون به هنگام كد كردن طول، عدد را از مبناي 10 به مبناي 2 برديم، براي رمز گشايي بايد رشته را از مبناي 2 به مبناي 10 برگردانيم:
20 * 1 + 21 * 1 + 22 * 0 + 23 * 1 + 24 * 0 + 25 * 0 + 26 * 0 + 27 * 0 = طول تير
<=
13 = طول تير
تعيين مقدار تابع هدف و برازندگي:
پس از رمز گشايي تمام كروموزوم هاي جمعيت اوليه، مقادير تابع هدف را براي آن ها مي يابيم. اگر به خاطر داشته باشيد، تابع هدف همان تابعي است كه قرار است مقدار آن اكسترمم شود. پس:
Chromosome -Decode-> X -> F(X)
مثال:
فرض كنيد مي خواهيم مقدار مقاومت يك مدار الكتريكي (R) را به گونه اي تعيين كنيم كه بازده ي آن- F(R) -بيشينه شود. رابطه ي بين مقاومت الكتريكي مدار و بازده با استفاده از نظريه ي مدار ها تييعن شده است. جمعيت اوليه ي ما شامل 5 كروموزوم تصادفي است. اين كروموزوم ها را رمز گشايي مي كنيم و به مقادير زير مي رسيم:
Fitness F(R) R 0.1 10 25 0.17 17 50 0.13 13 100 0.2 20 200 0.4 40 500
برازندگي (Fintness) عبارت است از برتري يك گونه نسبت به ساير گونه ها در يك جمعيت كه به شكل زير به دست مي آيد:
Fitnessi=F(Xi)/(F(X1) + F(X2) + ... F(Xi) + ... +F(Xn))
كه n تعداد جمعيت اوليه است.
براي مثال فوق براي R=25 آن گاه F(R)=F(25)=10 ؛ در اين صورت برازندگي اين عضو برابر خواهد شد با:
(40 + 20 + 13 + 17 + 10)/10 = 0.1
به همين شكل برازندگي ساير عضو ها هم تعيين مي شود كه نتيجه ي آن در جدول بالا آورده شده است. برترين گونه R=500 است زيرا بازده ي مدار در اين حالت نسبت به ساير حالت ها بيشينه است و در نتيجه برازندگي اين گونه نيز نسبت به بقيه بيش تر خواهد بود.
fakhravary (01-11-14), M A H R A D (29-02-12), MARINE (19-02-14), Moein (26-02-12), Rezasam1 (27-02-12)
انتخاب (Selection)
عملگري هست كه نحوه ي شركت جمعيت ها براي تشكيل نسل هاي بعد را تعيين مي كند. از ديد بهينه سازي عملگر انتخاب بايد نسلي را تشكيل دهد كه جمعيت آن اطلاعات ارزشنمند تر و بهينه تري را نسبت به نسل قبلي داشته باشد. دو روش متداول در انتخاب عبارت اند از:
- چرخ گردان (Roulette Wheel)
- تورنومنت (Tournament)
روش چرخ گردان (Roulette Wheel)
در اين روش يك دايره يا ديسك داريم كه هر كروموزوم با توجه به برازندگي (Fitness) اي كه دارد بخشي از اين دايره (Circular Sector) را به خود اختصاص مي دهد به گونه اي كه مجموع سكتور هاي هر كروموزوم يك دايره ي كامل را تشكيل مي دهد. يك اشاره گر وجود دارد كه بر محيط اين دايره مماس است. زماني كه اين دايره را حول مركز آن بچرخانيم، دايره مي چرخد و پس از مدتي مي ايستد. در اين حالت اشاره گر به يكي از اين بخش هاي تعيين شده روي دايره اشاره مي كند. چون هر يك از بخش ها (سكتور) بيان گر يك كروموزوم است، اشاره گر در واقع يك كروموزوم را انتخاب مي كند.
شكل زير چرخ گردان مربوط به مثال پست قبل (تعيين مقدار مقاومت الكتريكي مدار) را نشان مي دهد:
خط قرمز رنگ همان اشاره گر است كه كروموزومي با برازندگي 40% را انتخاب كرده است. واضح است كه هر چه يك كرموزوم برتر باشد، احتمال انتخاب آن بيش تر خواهد بود.
حال بياييم سورس MATLAB اين روش را نيز بنويسيم:
در كد بالا آرايه ي fintness شامل مقادير برازندگي كروموزوم ها است. ماتريس pop جمعيت اوليه ي كروموزوم ها و ماتريس selectedpop جمعيت انتخاب شده است.کد:fitness=[0.1,0.17,0.27,0.13,0.2,0.4]; f1=cumsum(fintness); a=rand; for i=1:(size(f1,2)-1) if a>=f1(i) && a<=f1(i+1) selectedpop=pop(i,:); break end end
روش تورنومنت (Tournament)
اين روش به گونه هاي مختلف اجرا مي شود؛ از جمله شكل 2 Plus يا 4 Plus .
در روش 2 Plus از جمعيت اوليه، چهار كروموزوم به شكل تصادفي انتخاب مي شوند. كروموزوم هاي انتخابي اول و دوم از نظر مقدار برازندگي با هم مقايسه مي شوند و كروموزومي كه برتر باشد به مرحله ي بعد مي رود. همين مقايسه روي كروموزوم هاي انتخابي سوم و چهارم صورت مي گيرد تا كرموزوم برتر شناسايي شود. حال دو كروموزوم برتر داريم كه آن دو را نيز از نظر برازندگي با هم مقايسه مي كنيم. كروموزوم برتر كروموزومي خواهد بود كه به نسل بعد خواهد رفت:
1|1|0|0|1|1|0|1
1|1|0|0|1|1|0|1 برتر
1|1|1|0|1|1|0|1
1|1|0|0|1|1|0|1 برترين
0|0|0|0|1|1|1|1
1|1|0|0|0|1|0|0 برتر
1|1|0|0|0|1|0|0
روش 4 Plus هم به شكل مشابه اجرا مي شود با اين تفاوت كه در قدم اول 8 كروموزوم از جمعيت اوليه به شكل تصادفي انتخاب مي شوند.
آخرین ویرایش توسط ravegoat در تاریخ 22-03-12 انجام شده است
designme (08-03-12), fakhravary (01-11-14), M A H R A D (29-02-12), Moein (23-03-12), Rezasam1 (07-03-12)
زادولد (Crossover)
عملي است كه از تركيب دو كروموزوم به عنوان والدين (Parents)؛ دو كروموزوم جديد به عنوان فرزند (Offspring) به وجود مي آورد. فرزندان بخشي از اطلاعات مادر و بخشي از اطلاعات پدر را به ارث مي برند. گونه هاي متداول توليد مثل به شكل زير است:
- One-point Crossover
- Two-point Crossover
- Scattering Crossover
One-point Crossover
در اين روش كرموزوم مادر از يك نقطه ي مشخص به دو بخش تقسيم مي شود. كروموزوم پدر نيز از همان نقطه ي مشخص به دو بخش تقسيم مي شود. حال فرزند اول از اتصال بخش اول كروموزوم مادر و بخش دوم كروموزوم پدر متولد مي شود. فرزند دوم نيز از اتصال بخش اول كرموزوم پدر و بخش دوم كرموزوم مادر به وجود مي آيد. محل برش بايد به شكل تصادفي تعيين شود.
1|1|0|0|1|1|0|1 مادر
0|1|0|1|0|1|0|1 فرزند اول
1|1|0|0|1|1|0|0 فرزند دوم
0|1|0|1|0|1|0|0 پدر
Two-point Crossover
در اين روش كرموزوم مادر از دو نقطه ي مشخص به سه بخش تقسيم مي شود. كروموزوم پدر نيز از همان دو نقطه ي مشخص به سه بخش تقسيم مي شود. حال فرزند اول از اتصال بخش اول كروموزوم مادر ، بخش دوم كروموزوم پدر و بخش سوم كروموزوم مادر متولد مي شود. فرزند دوم نيز از اتصال بخش اول كروموزوم پدر ، بخش دوم كروموزوم مادر و بخش سوم كروموزوم پدر به وجود مي آيد. محل نقاط برش همچنان بايد به شكل تصادفي تعيين شود.
1|1|0|0|1|1|0|1 مادر
1|1|0|1|0|1|0|1 فرزند اول
0|1|0|0|1|1|0|0 فرزند دوم
0|1|0|1|0|1|0|0 پدر
Scattering Crossover
در اين روش ابتدا يك رشته ي باينري متشكل از صفر و يا يك هاي تصادفي به طول كرموزوم هاي جمعيت توليد مي شود. حال اگر بيت اول رشته ي باينري توليد شده يك باشد، بيت اول كروموزوم مادر و بيت اول كروموزوم پدر جاي خود را با يكديگر عوض مي كنند. ولي اگر بيت اول رشته ي باينري صفر باشد، اين جايگزيني صورت نمي گيرد. همين روند براي بيت هاي بعدي نيز تكرار مي شود. در نهايت مادر و پدر با جايگزيني بيت هاي خود طبق الگوي رشته ي باينري، دو فرزند به وجود مي آورند.
مادر:
A|C|D|A|B|Cپدر:
B|A|B|C|D|Aرشته ي باينري توليد شده به شكل تصادفي:
0|1|0|0|1|1فرزند اول:
B|A|D|A|D|Cفرزند دوم:
A|C|B|C|B|A
جهش (Mutation)
عملي است كه يك بيت كروموزوم را به شكل تصادفي انتخاب كرده و مقدار آن را تغيير مي دهد:
0|1|1|0|0|0|1|1
<< جهش0|1|1|0|1|0|1|1
آخرین ویرایش توسط ravegoat در تاریخ 29-02-12 انجام شده است
cold.boy70 (15-12-16), designme (08-03-12), fakhravary (01-11-14), Moein (23-03-12), Rezasam1 (07-03-12)
قبل از آن كه با نحوه ي تشكيل نسل بعد آشنا شويم، سوالي را مطرح مي كنيم:
" چه تعداد از جمعيت اوليه در توليد مثل شركت مي كنند؟ و چه تعداد از اين جمعيت اوليه دچار جهش مي شوند؟ "
براي پاسخ دادن به سوال فوق دو مفهوم را معرفي مي كنيم:
احتمال توليد مثل (Probability of Crossover يا Pc)
كميتي است كه احتمال شركت جمعيت اوليه در توليد مثل را تعيين مي كند. مقدار Pc بين 70% تا 95% است. اين به معني نيست كه فرضا" 70% از جمعيت اوليه در توليد مثل شركت مي كنند بلكه به اين معني است كه 70% احتمال دارد كه جمعيت در توليد مثل شركت كنند. به عبارتي ديگر ممكن است تمام جمعيت در زادولد شركت كنند و از طرفي هم ممكن است هيچ يك از كروموزوم ها در زادولد شركت نكنند.
سورس MATLAB اعمال احتمال توليد مثل در زاد ولد:
N تعداد جمعيت اوليه است.کد:Pc=0.7; for i=1:N/2 a=rand; if a<=Pc %Do Crossover end end
احتمال جهش (Probability of Mutation يا Pm)
كميتي است كه احتمال جهش يافتن جمعيت اوليه را تعيين مي كند. مقدار Pm كوچك تر از 0.1 است. اين به اين معني است كه احتمال اين كه يك كروموزوم جهش يابد، كم تر از 10% است.
سورس MATLAB اعمال احتمال جهش در جهش يافتن:
N تعداد جمعيت اوليه است.کد:Pm=0.1; for i=1:N a=rand; if a<=Pm %Do Mutation end end
نحوه ي انتخاب نسل آينده:
فرض كنيم تعداد جمعيت اوليه برابر N، تعداد جمعيت حاصل از زادولد برابر P و تعداد جمعيت حاصل از جهش برابر Q باشد.
بقاي جمعيت:
اگر تعداد جمعيت اوليه N باشد، تعداد جمعيت نسل بعد نيز بايد N باشد.
براي تشكيل نسل جديد:
- اگر P>N باشد: با روش چرخ گردان، N كروموزوم را از جميعت حاصل از زادولد انتخاب مي كنيم كه اين N كروموزوم نسل بعد را تشكيل مي دهند.
- اگر P=N باشد: جميعت حاصل از زادولد همان جمعيت نسل بعد خواهد بود.
- اگر P<N باشد: جميعت حاصل از زادولد را به نسل بعد انتقال مي دهيم و براي جبران كمبود جمعيت جهت حفظ بقاي آن اين گونه عمل مي كنيم:
- اگر Q>N-P باشد: با روش چرخ گردان،N-P كروموزوم را از جميعت حاصل از جهش انتخاب مي كنيم كه اين كروموزوم ها به علاوه ي كروموزوم هاي زادولد، نسل بعد را تشكيل مي دهند.
- اگر Q=N-P باشد: تمام جميعت حاصل از جهش به علاوه ي كروموزوم هاي زادولد، نسل بعد را تشكيل مي دهند.
- اگر Q<N-P باشد: تمام جميعت حاصل از جهش به علاوه ي كروموزوم هاي زادولد به نسل بعد منتقل مي شوند اما به دليل كمبود جمعيت بقاي آن حفظ نمي شود. لذا با روش چرخ گردان، N-P-Q كروموزوم را از جمعيت اوليه انتخاب مي كنيم تا اين كمبود جمعيت جبران شود و نسل بعد شكل گيرد.
آخرین ویرایش توسط ravegoat در تاریخ 08-03-12 انجام شده است
fakhravary (01-11-14), M A H R A D (13-06-13), Moein (23-03-12), Rezasam1 (07-03-12)
در اين پست يك جمع بندي از GA براي بهينه سازي تك هدفه (تنها با يك تابع هدف) ارايه مي شود.
مراحل:
- ما در ابتدا يك روش كد گذاري براي تبديل متغير هاي طراحي به كروموزوم تعريف كرديم.
- به تعداد مشخص جمعيت اوليه به شكل تصادفي توليد كرديم.
- ميزان برازندگي هر يك از كروموزوم ها را تعيين نموديم.
- سپس عملگر هاي زاد ولد و جهش را پياده سازي كرديم و جمعيتي را براي نسل جديد انتخاب كرديم.
نسل جديد در قدم بعدي مي تواند يك جمعيت اوليه ي ديگر باشد. در نتيجه مراحل 2 تا 4 را دوباره مي توان روي آن اجرا كرد و نسل جديد تري را به وجود آورد. اين روند مي تواند باز هم ادامه يابد كه هر نسل جديد تر كروموزوم هاي برتري نسبت به نسل هاي قبلي دارد. اين كروموزوم هاي برتر اگر رمزگشايي شوند همان جواب بهينه ي مسئله خواهند بود.
ولي اين سوال پيش مي آيد:
جواب:توليد نسل هاي جديد تا چه موقع بايد ادامه پيدا كند؟
تا زماني كه رشد توليد كروموزوم هاي برتر در نسل هاي بعدي متوقف شود. تعداد توليد نسل ها (تعداد تكرار) حداقل بايد 3 برابر تعداد جمعيت اوليه باشد.
بحث الگوريتم ژنتيك براي بهينه سازي تك هدفه در اين جا به پايان رسيد. فلوچارت اين الگوريتم نيز پيوست شده است. در ادامه سعي مي شود سورس كد هاي پياده سازي GA هم قرار داده شود.
به اميد خدا پس از اين مورد، بحث بهينه سازي چند هدفه با الگوريتم ژنتيك (MOGA) را آغاز خواهيم كرد.
برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
designme (08-03-12), fakhravary (01-11-14), M A H R A D (13-06-13), Moein (23-03-12), Rezasam1 (07-03-12)
با سلام!
قبل از هر چيز شروع سال 1391 خورشيدي رو همه ي دوستان عزيزم تبريك مي گمبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید و براي همگي سالي پر از شادي و موفقيت رو آرزو مي كنم.برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
طبق قولي كه داده شده بود، سورس الگوريتم ژنتيك تك هدفه پيوست شد. براي افزايش سرعت برنامه و آشنايي با نظريه ي ماتريس ها در زبان هاي برنامه نويسي پايه، سورس به زبان VB.NET نوشته شده. اگر فرصت شد سورس متلب اون هم پيوست ميشه (كه البته خيلي ساده تر هم است). اين سورس كد براي يافتن مفدار بيشينه ي توابعي به شكل y=f(x) نوشته شده كه براساس اون ميشه حالت هاي پيچيده تر رو هم بررسي كرد.
آرمينبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنیدنكته اي كه وجود داره، توليد نسل هاي ضعيف در برخي از اجر هاي اين برنامه هستش. سعي ميشه نسخه ي بهينه تر اين برنامه در آينده ي نزديك قرار داده بشه. لازم به ذكر است روند تصادفي تر در الگوي هاي تكاملي منجر به نتايج مطلوب تري ميشه. لذا براي اعمال يك روند تصادفي بهتر ميشد از الگوريتم توليد اعداد تصادفي RAN2 استفاده كرد تا شايد نتايج بهتري حاصل بشه.
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
fakhravary (01-11-14), M A H R A D (13-06-13), Moein (23-03-12), Rezasam1 (01-04-12)
تفاوت بنيادي GA در بهينه سازي تك هدفه (Single) و چند هدفه (Multi) در تعيين برازندگي است. در بهينه سازي تك هدفه تنها يك تابع هدف وجود دارد و برازندگي خيلي راحت تعريف مي شود. در حالي كه در بهينه سازي تك چند هدفه، حالتي ممكن است از ديد يك تابع هدف مطلوب باشد ولي از ديد تابع هدف ديگر مطلوب نباشد. لذا بايد روشي ابداع كرد تا بتواند برازندگي جمعيت را نسبت به چند تابع هدف تعيين نمايد. روش متداول جبهه بندي نقاط غير برتر (Non-dominant) است؛ بدين شكل كه نقاط طراحي در جبهه (Front) هاي مختلف دسته بندي مي شوند. سپس گونه هاي برتر در هر جبهه با الگوريتم هايي تعيين مي شوند كه معروف ترين آن ها به شرح زير اند:
- معيار شلوغي (Crowding Distance) در NSGA II
- Epsilon Elimination در MUGA
- مفهوم Dominant Space در SPEA
هر يك از الگورتيم هاي فوق منحي نقاط Pareto را در اختيار ما قرار مي دهند كه يكي از هدف هاي مهم در بهينه سازي چند هدفه است زيرا طراح با بررسي Pareto Front مي تواند در مورد طراحي سيستم تصميم گيري كند. منحني Pareto مي تواند شامل نقطه ي مصالحه ي طراحي (Trade-Off) باشد كه توازني بين تمامي توابع هدف خواهد بود. شكل زير يك Pareto Front مربوط به دو تابع هدف را نشان مي دهد:
دوستاني كه تمايل دارند با جزئيات كامل اين مبحث آشنا شوند مي توانند اين كتاب را كاملا" رايگان دربافت نموده و مطالعه كنند.
fakhravary (01-11-14), M A H R A D (13-06-13), mahdieh1992 (29-01-16), Moein (01-04-12), Rezasam1 (01-04-12)
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks