当前位置:  开发笔记 > 编程语言 > 正文

Minimax在"人工智能的Prolog编程"中实现 - min_to_move/1和max_to_move/1是什么?

如何解决《Minimax在"人工智能的Prolog编程"中实现-min_to_move/1和max_to_move/1是什么?》经验,为你挑选了1个好方法。

首先让我说这个问题可以由没有Prolog经验的AI向导来回答.

优秀的人工智能Prolog编程书有一个非常简洁和聪明的极小极大实现:

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/1max_to_move/1是.

任何人都可以向我解释这些吗?

提前致谢!



1> mat..:

显然,当且仅当"最小化"玩家要在位置Pos移动时,min_to_move(Pos)才为真.相反,对于max_to_move/1.就个人而言,我发现这里的编码风格并不是很好.例如,有几次,if-then-else(( - >)/ 2和(;)/ 2)似乎更适合表达意图.谓词名称也可以更具描述性(考虑例如"positions_best/2"来描述位置列表和最佳选择之间的关系,而不仅仅是"最佳/ 3")并且更具可读性(例如"是什么")更好"除了更难阅读而不是例如"better_of"?).

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有