问题标签 [wumpus-world]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1236 浏览

logic - Wumpus 世界模型中的混乱?

Wumpus 世界是知识表示、推理和规划的一个例子——代理人必须探索一个由一系列相互连接的房间组成的洞穴。在山洞里的一个房间里,有一只乌普斯,如果它进入那个房间就会杀死特工。有些房间有坑,如果特工也进入其中任何一个房间,它就会死。特工有一支箭可以杀死Wumpus。目标是找到隐藏在洞穴某处的黄金,并在不被杀死的情况下返回起点。

http://www.cis.temple.edu/~giorgio/cis587/readings/wumpus.shtml

正好有一个 Wumpus。因此W1,1 ∨ W1,2 ∨ ... W4,3 ∨ W4,4

一种说最多有一个 wumpus 的方法是,对于任何 2 个方格,其中一个必须是无 wumpus 的。使用n 个正方形,我们得到n(n-1)/2 个句子,例如 ¬W1,1 ∨ ¬W1,2 。对于一个 4*4 的世界,我们从总共 155 个包含 64 个不同符号的句子开始。


我无法理解我们如何得到n(n-1)/2 个句子。还有——我们怎么知道在一个 4*4 的世界中我们总共有 155 个句子?有人可以向我解释这个概念吗?谢谢。

0 投票
2 回答
403 浏览

list - Prolog 中的进程列表

我在 Prolog 中使用列表时遇到问题。我正在实现一个 Wumpus World 示例,并且需要在每次用户移动期间移动 wumpus。wumpus 的移动是在列表中预定义的,我不知道如何弹出列表的头部来设置 wumpus 的位置。Wumpus 列表将是:[left,right,up,down,...,right]。这是我到目前为止所拥有的,这显然是错误的。

我的代码并不需要确切的代码,只需要一个列表示例以及如何从列表中设置方向/值以及如何删除列表中弹出的头部将是理想的。

0 投票
1 回答
359 浏览

haskell - Comonads 是否适合为 Wumpus 世界建模?

我试图找到一些comonad的实际应用,我想我会尝试看看我是否可以将经典的Wumpus世界表示为comonad。

我想用这段代码让 Wumpus 在世界上左右移动,清理脏瓷砖,避免坑。似乎唯一有用的comonad函数是提取(获取当前图块),并且无法使用移动和清洁图块来使用扩展或复制。

我不确定comonads 是否合适,但我看过一个演讲(Dominic Orchard: A Notation for Comonads),其中comonads 用于在二维矩阵中对光标进行建模。

如果comonad 是代表Wumpus 世界的好方法,您能否说明我的代码哪里出错了?如果错了,你能建议一个简单的comonads应用吗?

谢谢!

0 投票
1 回答
580 浏览

list - 如何在 GNU Prolog 中设置和打印网格

我正在阅读这些序言教程,我觉得我对他们使用的一些概念有了很好的掌握,但我在尝试实现类似网格的系统时遇到了问题。

我知道我可以用一个列表来设置它,但到目前为止,我对如何实现它还一无所知,是否有资源或某种类型的源代码可以指导我如何在 prolog 中创建网格系统?

我想从头开始制作的网格系统是 4x4,它应该打印出来是这样的

(4,1) (4,2) (4,3) (4,4)

(3,1) (3,2) (3,3) (3,4)

(2,1) (2,2) (2,3) (2,4)

(1,1) (1,2) (1,3) (1,4)

对于评论

我在网格中需要这个的原因是因为我开始为我正在创建的 wumpus 世界构建一个迷宫般的结构,我认为这是我应该如何处理这个问题,但我在创建一种类型的列表时遇到了问题以满足我想要的这种结构。

这是我可以将一个正方形(网格的一部分)(例如(3,2))指定为我希望我的代理遍历此网格的任何正方形中的坑或 wumpus 或黄金的地方。

如果这是处理此问题的错误方法,我将不胜感激为什么不是,并希望获得一些关于我需要集中精力的反馈。

如果这是错误的,我将不胜感激任何反馈。

0 投票
0 回答
219 浏览

algorithm - 如何在序言中移动到安全的相邻方格?

我正在尝试编写一个 Prolog 应用程序,如果弓箭手将移动到相邻的正方形,该正方形在4 x 4 网格上是安全的。

例如弓箭手在方柱1行4,如果没有记录为M的怪物,他可以向上或向右移动。因此,如果第 2 列第 4 行怪物 (M)弓箭手 (A)不能移动到那里,但如果第 1 列第 3 行空的 (E),他可以移动到这里。弓箭手可以检查相邻方格是否安全,但不能比这更远。

这是我到目前为止得到的:

我正在努力让弓箭手检查相邻的方格是否安全,如果是,则进入该方格。

如何才能做到这一点?

0 投票
0 回答
112 浏览

algorithm - 如何通过检查相邻的方块而不是在序言中手动输入它们来让人们移动?

我正在尝试编写一个 Prolog 应用程序,如果弓箭手将移动到相邻的正方形中,该正方形在4 x 4系统中的网格上是安全的,这应该由弓箭手自己完成,例如,如果弓箭手上方的正方形安全的他会搬进去,如果不安全,他会检查右边的广场,如果安全,他就会搬进去。

弓箭手从 4,1 牢房开始,目前弓箭手上方和右侧有一个微风广场。每个方格都有微风金色闪光,所以弓箭手在方格4,1 微风在 3,1 和 4,2 中。到目前为止,我已经让用户输入了他们想要去的坐标,例如,如果我输入safe_square(4,1,3,1).弓箭手将从4,1移动到3,1,因为单元格是安全的。

但这不是一个好方法,因为弓箭手自己应该检查所有相邻的选项,然后自己选择要进入的单元格。我所做的命令是弓箭手首先safe_square()检查金子,然后检查闪光,然后是空的,最后是安全的。这是它应该做的,但是因为用户自己必须输入他们想去的地方,所以代码是无关紧要的。

这是我目前的做法:

如果没有用户输入,我怎么能做到这一点?

我试过了,但没有用:

我也试过这个:

0 投票
3 回答
1196 浏览

prolog - How to read data from file into Prolog

I am using SWI-Prolog to create a Wumpus World project. I am supposed to read the locations of the gold, pits, and the Wumpus from a .txt file that looks like this:

Where the words identify the object, the first number identifies the x position of the object, and the second number identifies the y position of the object. I know how to open a file and read from it, I just don't know how to tell my program that GOLD 3 2 means that the gold needs to be located at (3, 2).

0 投票
0 回答
235 浏览

prolog - 序言后继状态公理错误:超出本地堆栈

我正在尝试为在 4x4 网格中移动(北、南、西、东)的代理制定一个后继状态公理。网格在 1,1 和 2,2 处有两个障碍物,agent 的初始位置是 3,3。特工应该在没有碰到任何障碍物的情况下到达位置 1,2 的传送门。这是代码:

当我运行 escape(S) 时,它给出了以下错误: Out of local stack

0 投票
0 回答
250 浏览

python - 最多一个 wumpus:Wumpus AI 项目

我无法将“&”与列表操作数一起使用。任何帮助,将不胜感激!

0 投票
1 回答
374 浏览

prolog - Prolog Wumpus 如何在未知迷宫中找到路径

prolog如何在未知迷宫中找到路径?我有初始位置,没有。行和列,但没有结束位置,我不能将行*列作为结束,因为我必须递归移动才能找到 Wumpus、坑、墙和迷宫中的空白空间。