Information Technology Reference
In-Depth Information
double bewerten() {
if (fitness!= -1E99)
return (fitness);
int gruppe;
double y = 0.;
fitness = 0;
for ( int i = 0; i < Testdaten. anzahldaten ; i++)
double wert0 = 0;
int faktor0 = 1;
for ( int z = 0; z < 16; z++) {
wert0 += atom[z] * faktor0;
faktor0 *= 2;
}
wert0 -= 32768;
wert0 /= 32768;
y = wert0;
for ( int j = 1; j < 21; j++) {
double wert = 0;
int faktor = 1;
for ( int z = 0; z < 16; z++) {
wert += atom[j * 16 + z] * faktor;
faktor *= 2;
}
wert -= 32768;
wert /= 32768;
y += wert * Testdaten. testdaten [i][j];
if (y < 0) {
gruppe = 0;
} else {
gruppe = 1;
if (gruppe == Testdaten. testdaten [i][0])
fitness++;
}
fitness = fitness / Testdaten. anzahldaten *
return (fitness);
Es kann der Fall eintreten, dass überhaupt keine Trennung der Gruppen erfolgt, womit
dann mindestens der Anteil der kleineren Gruppe, sehr häufig aber auch der Anteil der
größeren Gruppe erreicht wird. Funktionen, die keinen besseren Wert als diesen Anteil er-
reichen, sind also auf jeden Fall vollkommen unbrauchbar. In diesem Anwendungsszena-
rio gilt die Anforderung, dass mindestens 70 % erreicht werden müssen. Ein Wert von 100
wird nahezu niemals erreicht, da eine lineare Funktion kaum eine beliebig gute Trennung
erreichen wird. Selbst bei einer hochgradig nichtlinearen Realisierung könnten zwei Ele-
mente mit exakt gleichen Merkmalen zu verschiedenen Gruppen zugeordnet werden. Mit
dieser Unschärfe muss man beim Einsatz von genetischen Algorithmen rechnen.
Im Rahmen der Initialisierung und dort im binären Fall werden alle Bits mit gleicher
Wahrscheinlichkeit auf 0 oder 1 und bei der reellen Codierung auf einen Wert zwischen
− 1 und 1 gesetzt.
Search WWH ::




Custom Search