Optimization Prolog游戏编程板评估

Optimization Prolog游戏编程板评估,optimization,prolog,Optimization,Prolog,我已经在prolog中创建了一个游戏(连续4个)。我的启发式函数要求我知道棋盘上每个可能的4排组合中有多少玩家和对手的筹码。我使用的方法如下(在psuedocish中): 我有一个包含所有可能的四个董事会成员的列表(组合列表)=形式==>[[A,B,C,D]| Rest]。 我有一个第一个玩家所有动作的列表(列表1)=形式==>[[1]、[7]、[14]] 1代表对手的动作(列表2) 步骤1:从ComboList中获取第一个combo,2: 检查所有列表1,查看此组合中有多少,3: 检查所有列表

我已经在prolog中创建了一个游戏(连续4个)。我的启发式函数要求我知道棋盘上每个可能的4排组合中有多少玩家和对手的筹码。我使用的方法如下(在psuedocish中):

我有一个包含所有可能的四个董事会成员的列表(组合列表)=形式==>
[[A,B,C,D]| Rest]
。 我有一个第一个玩家所有动作的列表(列表1)=形式==>
[[1]、[7]、[14]]
1代表对手的动作(列表2)

步骤1:从ComboList中获取第一个combo,2: 检查所有列表1,查看此组合中有多少,3: 检查所有列表2,查看此组合中有多少, 从ComboList移动到下一个combo并重新开始

对于所需的内容,此过程占用了太多的运行时间


请有人提出更好更有效的建议!非常感谢

下面的代码使用member/3,它也必须成为 被称为nth1/3。请看这里:

 http://storage.developerzen.com/fourrow.pro.txt
谓词现在可以在库(列表)中找到,并且 可能是本机支持或快速实现:

 http://www.swi-prolog.org/pldoc/man?predicate=nth1/3
但我想肯定一些事实并依靠论点 索引可能会得到更好的结果。寻找 示例如下:

 http://www.mxro.de/applications/four-in-a-row
希望这有帮助


再见

只是一个评论,与其列出所有可能的组合,还不如定义一行中有
4的含义?这似乎更符合prolog本身,因为您想证明一行中是否有
4
,而不是一行中是否有
4
。我同意,但在这一步中我不是在寻找“4”。这一步是为了让启发式函数评估当前位置——为此,我需要知道每个组合中每个玩家有多少筹码。谢谢,好吧,有点跳过了,现在我很好奇。