PDA

View Full Version : الگوریتم ژنتیک



maryam-alikahakii
یک شنبه 07 تیر 1388, 10:02 صبح
من دارم یک برنامه با متلب مینویسم که میخواهد با الگوریتم ژنتیک مقدار بهینه تابع sin2x-sinx را پیدا کنداما در قسمت selection نمیدونم وقتی احتمال هر population را حساب کرد چه جوری از بین اونها انتخاب کند لطفا توضیح دهید

function [fit1,fit2,fit3,fit4]=fitness(pop0,pop1,pop2,pop3)
%
%
%
for i=1:10
y1=sin(2*pop0(i))-sin(pop0(i));
A1=sum(y1);
y2=sin(2*pop1(i))-sin(pop1(i));
A2=sum(y2);
y3=sin(2*pop2(i))-sin(pop2(i));
A3=sum(y3);
y4=sin(2*pop3(i))-sin(pop3(i));
A4=sum(y4);
end%end of for
B=A1+A2+A3+A4;
fit1=A1/B
fit2=A2/B
fit3=A3/B
fit4=A4/B

fit=[fit1,fit2,fit3,fit4];
C=random('unif',0,2,1,4)
for i=1:4
if(C(i)>1.5 && C(i)<=2)
newpop(i)=pop0
end
if(C(i)<=1.5 && C(i)>1)
newpop(i)=pop1
end
if(C(i)<1 && C(i)>=0.5)
newpop(i)=pop2
end
if(C(i)>=0 && C(i)<0.5)
newpop(i)=pop3
end
end

aminfarajian
یک شنبه 07 تیر 1388, 14:47 عصر
با عرض سلام خدمت شما دوست عزیز.
اگه شما قصد داری که از matlab واسه نوشتن برنامت استفاده کنی (و تمرین پیاده سازی مد نظرت نیست) به نظر من بهتره که از ToolBox الگوریتم ژنتیک خود Matlab استفاده کنی. هم امکانات خیلی زیادی در اختیار شما قرار میده هم اینکه تمام کدهاش قبلا بررسی شدن و تقریبا میشه گفت که دیگه bug ندارن.
تنها کاری که شما باید انجام بدی تعیین تابع مورد نظر و تنظیم یک سری پارامترهاست، مثل تعداد جمعیت اولیه، نوع عملگرهای Mutation و Crossover و ... . خیلی ساده و راحت.
اما اگر هدفت از این کار، تمرین پیاده سازی الگوریتم ژنتیکه، بهتره که یه سری به گوگل عزیز بزنی. کلی m. فایل میتونی پیدا کنی که این کار رو کردن و شما میتونی کد اونها رو بخونی و تغییرات مورد نظرت رو اعمال کنی.

اما اگه با این همه مقدمه هنوز هم قصد داری که خودت کد بزنی و همین کد رو تکمیل کنی باید بگم که،
اولا من از روی کد شما متوجه نشدم که منظور شما از انتخاب چیه؟ انتخاب نسل آینده یا انتخاب یک کروموزم برای اعمال عملگر جهش (Mutation) یا انتخاب دو کروموزم برای اعمال عملگر تزویج (یا Crossover)؟
اگه این رو مشخص کنید شاید بهتر بشه بحث رو ادامه داد.
دوما اینکه این جوری که من از کدتون متوجه شدم منظور شما از POPi همون CHROMOSOMEi بوده. درسته؟ اگه اینجوریه بهتره اسمشون رو درست کنید که بعدا خودتون یا کس دیگه ای که میخواد کدتون رو بخونه سردرگم نشه.
در کل فکر میکنم اگه توضیحات کاملتری در مورد کدتون بدید، راحتتر بشه راهنمایی کرد.

امیدوارم که این مواردی که گفتم کمکتون کرده باشه.

موفق باشی و در پناه حضرت حق.

quantomquery
دوشنبه 09 آذر 1388, 16:07 عصر
سلام
به دو روش مسابقه ای و مرتب سازی براتون گذاشتم .
امیدوارم کمکتون کنه :