Реализация Minimax в «Программировании на прологе для искусственного интеллекта» - что такое min_to_move / 1 и max_to_move / 1?

Позвольте мне начать с того, что на этот вопрос, возможно, могут ответить мастера искусственного интеллекта, не имеющие опыта работы с Прологом.

В прекрасной книге Программирование на прологе для искусственного интеллекта есть эта довольно краткая и умная реализация минимакса:

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

Однако автор не стал вдаваться в подробности в ее описании, и я остаюсь в недоумении. что такое min_to_move / 1 и max_to_move / 1 .

Кто-нибудь может мне это объяснить?

Заранее спасибо!

5
задан F. P. 2 November 2011 в 11:22
поделиться