Die Bewertungsfunktion
Dieser Abschnitt erledigt eine Vorarbeit für das nächste Kapitel, die Zugsuche. Um einen Zug auszuwählen, muss die KI eine Stellung einschätzen können. Er muss die für ihn günstigste Stellung finden. Dazu dient die Bewertungsfunktion. Sie ordnet einer Stellung einen Wert zu, anhand dessen der Computer beurteilen kann, ob er besser steht oder nicht.
In die Bewertungsfunktion können verschiedene Aspekte einer Stellung eingehen: Die Bauernstrucktur, die beherrschung des Zentrums, eine positionelle Einschätung, der Materialwert oder Tempo, um nur ein paar zu nennen. Wir werden uns hier mit dem Mateiralwert und einer positionellen Einschätzung begnügen. Den Materialwert einer Stellung berrechnen wir, indem wir den Wert aller Figuren des Comuter zusammenzählen und vom Ergebniss den Wert aller Figuren des menschlichen Spielpartners abziehen. Für die postionelle Bewertung definieren wir ein Datenfeld, indem für jedes Feld ein Wert gespeichert wird. Dieser Wert wird einer darauf stehen Figur dazugezählt.
Die positionellen Werte jedes Feldes speichern wir im Array
posvalues, dass wir im globalen Namensbereich der Klasse Board definieren:
//Variablen der Bewertungsfunktion
float [] posvalues = {
0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.01f, 0.02f, 0.03f, 0.03f, 0.02f, 0.01f, 0.00f, 0.00f, 0.00f, 0.01f, 0.04f, 0.04f, 0.04f, 0.04f, 0.04f, 0.04f, 0.01f, 0.00f, 0.00f, 0.03f, 0.04f, 0.06f, 0.06f, 0.06f, 0.06f, 0.04f, 0.02f, 0.00f, 0.00f, 0.03f, 0.04f, 0.06f, 0.08f, 0.08f, 0.06f, 0.04f, 0.03f, 0.00f, 0.00f, 0.03f, 0.04f, 0.06f, 0.08f, 0.08f, 0.06f, 0.04f, 0.03f, 0.00f, 0.00f, 0.02f, 0.04f, 0.06f, 0.06f, 0.06f, 0.06f, 0.04f, 0.02f, 0.00f, 0.00f, 0.01f, 0.04f, 0.04f, 0.04f, 0.04f, 0.04f, 0.04f, 0.01f, 0.00f, 0.00f, 0.00f, 0.01f, 0.02f, 0.03f, 0.03f, 0.02f, 0.01f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f };Die eigenltiche Bewertungsfunktion
evalutation ()wird so definiert:
//Diese Methode bewertet eine Stellung
public float evaluation ( ) {
float value = 0;
float figur = 0;
for (int i = 21; i < 99; i++) {
if ( board [i] != 0 ) {
//Materialwert
switch (board [i] % 10) {
case 1:
figur = 1.0f;
break;
case 2:
case 3:
figur = 3.0f;
break;
case 4:
figur = 4.5f;
break;
case 5:
figur = 9.0f;
break;
case 6:
figur = 0.0f;
}
//Positioneller Wert
figur += posvalues [i];
if ( board [i] % 100 / 10 == color)
value += figur;
else
value -= figur;
}
if ( i%10 == 8)
i += 2;
}
return value;
}Applet Stufe 7 anzeigen
Quelltexte der Stufe 7