Hallo,
um eine Schachaufgabe zu lösen(Weiß ist am Zug und muss mattsetzen) verwende ich den Negamax-Algorithmus.
Wenn es z.B ein Matt in 3 ist und die Suchtiefe auch 3 ist, wird der erste Zug(der zum Matt führt) richtig ausgegeben. Bei der selben Aufgabe, aber z.B mit einer Suchtiefe von 4 oder 5 wird ein falscher Zug zurückgegeben.
Woran könnte das liegen?
Danke im vorraus.
um eine Schachaufgabe zu lösen(Weiß ist am Zug und muss mattsetzen) verwende ich den Negamax-Algorithmus.
Java:
private int suchTiefe = 3;
private Zug besterZug;
....
private int negaMax(int spieler, int tiefe) { // Weiß 1 , Schwarz -1
if(tiefe == 0 || überprüfePatt() || überprüfeMatt()) { // Suchtiefe erreciht oder keine Züge mehr
return zugBewerten(spieler);
}
int maxWert = Integer.MIN_VALUE;
ArrayList<Zug> züge = generiereZüge(spieler);
for(Zug z: züge) {
macheZug(z);
int wert = -negaMax(-spieler, tiefe - 1);
macheZugRückgängig(z);
if(wert > maxWert) {
maxWert = wert;
if(tiefe == suchTiefe) {
besterZug = z;
}
}
}
return maxWert;
}
...
negaMax(1, suchTiefe);
System.out.println(besterZug.toString());
Wenn es z.B ein Matt in 3 ist und die Suchtiefe auch 3 ist, wird der erste Zug(der zum Matt führt) richtig ausgegeben. Bei der selben Aufgabe, aber z.B mit einer Suchtiefe von 4 oder 5 wird ein falscher Zug zurückgegeben.
Woran könnte das liegen?
Danke im vorraus.