在“人工智能Prolog编程”中实现的极小极大算法 – min_to_move/1 和 max_to_move/1 是什么?

首先我想说,即使没有Prolog经验,AI大神们也可能回答这个问题。

优秀的《人工智能Prolog编程》一书中有一个非常简洁巧妙的极小极大算法实现:

minimax( Pos, BestSucc, Val)  :-  moves( Pos, PosList), !,               % Pos 的合法移动产生 PosList  best( PosList, BestSucc, Val)   ;   staticval( Pos, Val).                 % Pos 没有后继节点:静态评估 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 比 Pos1 更好  min_to_move( Pos0),                                    % MIN 在 Pos0 中移动  Val0 > Val1, !                                         % MAX 更喜欢更大的值  ;  max_to_move( Pos0),                                    % MAX 在 Pos0 中移动  Val0 < Val1, !.                                % MIN 更喜欢更小的值 betterof( Pos0, Val0, Pos1, Val1, Pos1, Val1).           % 否则 Pos1 比 Pos0 更好

然而,作者并没有过多地描述它,我想知道 min_to_move/1max_to_move/1 是什么。

谁能为我解释一下这些吗?

提前感谢!


回答:

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注