2011-11-02 25 views
5

Permítanme comenzar diciendo que esta pregunta puede ser respondida por asistentes de IA sin experiencia Prolog.Implemento Minimax en "Prolog Programming for Artificial Intelligence": ¿qué son min_to_move/1 y max_to_move/1?

La excelente Prolog Programming for Artificial Intelligence libro tiene esta bastante conciso e inteligente aplicación Minimax:

minimax(Pos, BestSucc, Val) :- 
    moves(Pos, PosList), !,    % Legal moves in Pos produce PosList 
    best(PosList, BestSucc, Val) 
    ; 
    staticval(Pos, Val).     % Pos has no successors: evaluate statically 

best([ Pos], Pos, Val) :- 
    minimax(Pos, _, Val), !. 

best([Pos1 | PosList], BestPos, BestVal) :- 
    minimax(Pos1, _, Val1), 
    best(PosList, Pos2, Val2), 
    betterof(Pos1, Val1, Pos2, Val2, BestPos, BestVal). 

betterof(Pos0, Val0, Pos1, Val1, Pos0, Val0) :-  % Pos0 better than Pos1 
    min_to_move(Pos0),         % MIN to move in Pos0 
    Val0 > Val1, !           % MAX prefers the greater value 
    ; 
    max_to_move(Pos0),         % MAX to move in Pos0 
    Val0 < Val1, !.        % MIN prefers the lesser value 

betterof(Pos0, Val0, Pos1, Val1, Pos1, Val1).   % Otherwise Pos1 better than Pos0 

Sin embargo, el autor no fue a la gran longitud en la descripción de ella y yo me quedo a preguntarse qué min_to_move/1 y son max_to_move/1 .

¿Alguien me puede explicar esto?

¡Gracias de antemano!

Respuesta

5

Aparentemente, min_to_move (Pos) es verdadero si y solo si el jugador que "minimiza" debe hacer un movimiento en posición Pos. Por el contrario para max_to_move/1. Personalmente, encuentro que el estilo de codificación aquí no es muy bueno. Por ejemplo, en varias ocasiones, if-then-else ((->)/2 y (;)/2) parece ser una mejor opción para expresar la intención. Los nombres de predicados también podrían ser mucho más descriptivos (considere por ejemplo "positions_best/2" para describir una relación entre una lista de posiciones y una mejor opción, en lugar de solo "best/3") y más legible (lo que es por ejemplo " betterof "además de ser más difícil de leer que, por ejemplo," better_of "?).