gpt4 book ai didi

algorithm - Prolog 中的 Tron lightcycles AI

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:21 26 4
gpt4 key购买 nike

我在将 AI 写入游戏(如 tron lightcycles)时遇到了问题。我使用 ncurses 在 C 上编写所有图形和 Action 。现在我需要在序言中写下机器人的人工智能。我正在使用 swi 序言。

我保存当前游戏区域(所有矩阵)、当前人类位置和当前机器人位置(如矩阵单元格 i、j)。它们像谓词一样保存在 c 的 .pl 文件中。

我的游戏场是一个矩阵,其中包含 1 和 0(1 - 已访问,0 - 未访问)。像这样:

human_current_position(0,1).
bot_current_position(1,2).
matrix([[1,1,0,0],
[1,1,1,0],
[0,0,0,0],
[0,0,0,0]]).

然后我需要像这样分析这个矩阵:

analyze(matrix).

因此 prolog 中的分析函数将返回一些方向(左、下、上或右)保存到文件中并我的 C 程序读取此文件并移动机器人。

所以我有一个问题 - 我如何在 Prolog 中分析这个矩阵。我读了一些关于最小-最大算法的东西,但我无法在 Prolog 中实现这一点。任何人都可以帮助或指导如何使最小最大算法工作我的矩阵和 Prolog 中的当前位置?

最佳答案

我不确定 min-max 是否会为 tron 带来好的结果。因为在网格上有通常有很多交换 Action ,会扩大搜索空间。也许为了小字段和/或小的搜索深度。但是你可以尝试使用否定作为失败对于 min-max,您可以免费获得 alfa-beta 剪枝(我猜是这样)。

在没有不确定性的游戏中,最小-最大算法计算对手的最小增益,假设对手在另一方面试图最大化他的增益。让 i 覆盖玩家的 Action ,j 覆盖对手的 Action 。这导致递归公式如下:

Worst-Opponents-Gain = min_i (max_j ( Worst-Opponents-Gain_i_j) )

由于我们处理的是零和博弈,对手的 yield 就是我们的胜利。这样我们就有了 Opponents-Gain = - Win。我们可以将最小-最大搜索重新表述为最大搜索。每个玩家都是最大化者。

Best-Win = max_i ( - Best-Win_i).

当您的获胜值在 {-1, 0, 1} 范围内时,您可以使用否定作为失败。只需实现以下谓词为您的游戏建模:

% move(+Board,+Player,-Board)  
% init(+Board)
% win(+Board,+Player)
% oposite(+Player,-Player)
% tie(+Board,+Player)

以上谓词将在参数中完全模拟游戏,因此游戏状态将存储在局部变量中。然后通过以下谓词“分析”游戏:

% best(+Board,+Player,-Board)  
best(X,P,Y) :-
move(X,P,Y),
(win(Y,P) -> true;
oposite(P,Q),
\+ tie(Y,Q),
\+ best(Y,Q,_)).

您可能想要添加额外的参数来限制搜索深度,或者返回此举的象征性代表。

再见

P.S.:你找到一个井字游戏的例子here .

关于algorithm - Prolog 中的 Tron lightcycles AI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7389614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com