%% Datei: minimax.folien.pl %% Datum: 31.07.2002 %% %% Minimax-Suche %% ------------- %% Gegeben eine Spielsituation 'Pos', liefert 'minimax(Pos,BestPos,Wert)' %% die bzw. eine beste Nachfolgesituation 'BestPos' zusammen mit der %% Bewertung 'Wert' dieser Position: minimax(Pos,BestPos,Wert) :- moves(Pos,PosList), !, best(PosList,BestPos,Wert) ; statwert(Pos,Wert). %% Aus einer Liste 'PosList' von Spielsituationen liefert %% 'best(PosList,BestPos,BestWert)' die beste Situation 'BestPos' mit %% ihrer Bewertung 'BestWert': best([Pos],Pos,Wert) :- minimax(Pos,_,Wert),!. best([Pos1|PosList],BestPos,BestWert) :- minimax(Pos1,_,Wert1), best(PosList,Pos2,Wert2), bester(Pos1,Wert1,Pos2,Wert2, BestPos,BestWert). %% 'bester(Pos1,Wert1,Pos2,Wert2,BestPos,BestWert)' liefert von den %% beiden Positionen 'Pos1' und 'Pos2' mit den Bewertungen 'Wert1' %% bzw. 'Wert2' die bessere als 'BestPos' mit der entsprechenden %% Bewertung als 'BestWert': bester(Pos1,Wert1,Pos2,Wert2,Pos1,Wert1) :- min_am_zug(Pos1), Wert1 > Wert2, ! ; max_am_zug(Pos1), Wert1 < Wert2, !. bester(Pos1,Wert1,Pos2,Wert2,Pos2,Wert2).