160 likes | 298 Vues
Evo lúciós algoritmus. Evo lúciós algoritmus. Az evolúciós algoritmus Darwin fajfennmaradási elméletén alapszik, és a függvény-minimum meghatározására szolgál. Alapfogalmak: Egyed: egy adat szerkezet, amely a probléma lehetséges megoldását képviseli.
E N D
Evolúciós algoritmus Az evolúciós algoritmus Darwin fajfennmaradási elméletén alapszik, és a függvény-minimum meghatározására szolgál. Alapfogalmak: • Egyed:egy adat szerkezet, amely a probléma lehetségesmegoldását képviseli. • Gén:az egyed része, egy konkrét számadat. • Populáció:egyedek halmaza. • Generació:a populáció egy adott pillanatban, azaz egy adott ciklusban
Az algoritmus BEGIN hozd létre a kezdő populációt határozd meg az egyedek életképességét REPEAT/* új generáció létrehozása */ a kevésbé életképes egyedek elpusztítása FOR egyedek száma * 2/3 DO/* uj egyedek létrehozása */ válassz ki két szülőt a fennmaradt populációból hozd létre az utódot határozd meg az utód életképességét add hozzá az utódokat a populációhoz END FOR UNTIL a populáció teljesítette az adott feltételt END
Fő program • Két féle képpen hívható meg: • A program paramétereit megadjuk, a fő program argumenseiként • A program paramétereit a billentyűszerkezetről viszi be a felhasználó • Működése: • Lefoglalja a memórában a működéséhez szükséges helyet • Létrehozza az evolúció szálat • Megvárja az evolúció befejeződését • Felszabadítja a lefoglalt memóriát
Egyed Az egyedek mint a program egy szála vannak bemutatva. Létrehozásuk során egy paramétert kakpnak, ami alapján meg tudják határozni: • egy mutatót a függvényre, amelynek a minimumját keressük. • a független változót, ami alapján meg tudják határozni a függvény értékét az adott pontban. • saját azonosítójukat, ami segítségével meg tudjuk különböztetni az egyedeket. Az egyed paramétere: struct specimenThreadParameters { int iSpecimenNumber; double dIndependentVariable; double (*pfChosenFunction)(double); };
Az egyed fukciói • void InitializeSpecimenThreadSemaphores(int iNumberOfSpecimenThreads) • void CleanUpSpecimenThreads(int iNumberOfSpecimenThreads) • void StartSpecimenThread(int iThreadToStart) • void WaitForWriteDone(int iNumberOfSpecimenThreads) • void KillSpecimenThreads(int iNumberOfSpecimenThreads) • void KillSpecimenThread(int iThreadToKill)
Evolúció Az evolúció mint a program egy szála van bemutatva. Az evolúció paramétere: struct evolutionThreadParameters { int iNumberOfSpecimens; double (*pfChosenFunction)(double); int iNumberOfIterations; double dInterval[2]; int iNumberOfFuncMinValues; double dToleration; FILE *fLogFile; };
Az evolúció funkciói • void InitializeEvolution(int iNumberOfSpecimenThreads); • void CleanUpEvolution(int iNumberOfThreads); • void StartThreads(double (*pfChosenFunction)(double), double *dInterval, int iNumberOfSpecimenThreads) • void EliminateOneThirdSpecimens(int iNumberOfThreads) • void CreateOneThirdSpecimens(int iNumberOfThreads, double (*pfChosenFunction)(double)) • bool EndOfTheIteration(int iCurrentIteration, int iNumberOfIterations, int iNumberOfFuncMinValues, double dToleration) • void PrintTableHeaders(FILE *fLogFile) • void PrintCurrentValues(int iCurrentIteration, FILE* fLogFile) • void EndReport(int iCurrentIteration, FILE* fLogFile)
Az egyed az adat bázisban Egy egyed az adat bázisban egy struktúrával van modellezve, amely tartalmazza az egyedekről mindazon infomációkat, amlyek szükségessek az evolúció működéséhez: • Független változó • Függvényérték • Azonosító struct stSpecimen { double dIndependentVariable; double dFunctionValue; int iSpecimenID; };
Adat bázis struct stDataBase { double *pdFunctionMinValues; stSpecimen *stSpecimens; static stDataBase* pstDataBase; static stDataBase* GetPointerToDataBase() { if(pstDataBase == NULL) { pstDataBase = (stDataBase*)malloc(sizeof(stDataBase)); } return pstDataBase; } };
Az adat bázis funkciói • void InitializeDataBase(int iNumberOfSpecimenThreads, intiNumberOfFuncMinValues) • void CleanUpDataBase() • void SortByFuncValue(int iNumberOfSpecimenThreads) • void SortByIndependentVariable(int iNumberOfSpecimenThreads) • void RandomSort(int iNumberOfSpecimenThreads) • void GenerateRandomArray(int iNumberOfSpecimenThreads)