سلام دوستان.
من تازه با GA یا همون الگوریتم ژنتیک آشنا شدم و دیدم واقعا چیز محشریه.
من یه برنامه ی ساده با استفاده از GA نوشتم که یه رشته ای رو پیدا میکنه. روش من برای انتخاب Roulette Wheel یا همون چرخ گردان هستش ولی من وقتی برنامه رو اجرا میکنم بعد از گذشت حتی 1000000 بار تکامل, هیچ کدوم از رشته ها اصلا به رشته ی هدف نزدیک نشدند.
من یه چنتا کانتر و متغیر به برنامم اضافه کردم و دیدم مقدار تولید مثل یا cross-over در کروموزم های با برازندگی بالاتر با مقدار تولید مثل در برازندگی های پایین مساوی است, و این بدین معنی است که قسمت انتخاب طبیعی یا همون تابع select درست کار نمیکنه.
این اون تابعی ه که من برای انتخاب نوشتم:
int select()
{
int SUM=0,N=0,TSUM=0;
for(int i=0; i<population_size; i++)
SUM=SUM+score[i];
N=random(0,SUM);
for(int i=0; i<population_size; i++)
{
TSUM=TSUM+score[i];
if(TSUM>=N)
return i;
}
return -1;
}
توجه کنید آرایه ی score در اینجا برازندگی رشته ها را در بر دارد.
سورس خود برنامه رو هم میزارم.(سورس به زبان سلیس ++C)
ممنون میشم کمکم کنید.