问题标签 [water-jug-problem]

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 回答
3679 浏览

prolog - Prolog 水壶解决方案

我有 Prolog 中水罐问题的当前解决方案,但我在如何运行程序方面遇到问题。有人能帮助我吗。提前致谢。

错误未定义过程:状态/1,

但是,有以下定义:state/2

0 投票
1 回答
139 浏览

python - 即使未将列表传递给函数,函数也会更改列表中的值

我正在尝试实现一个类似于 IA 广度优先搜索的算法来解决水壶问题,但我遇到了这个问题:

每次我向数组中添加一个新元素时,它都会将数组中的所有元素都更改为它。

换句话说...

“frontier”数组在每个“jug”函数调用之间更改其中的所有元素。

有人可以分享一些关于这段代码的见解吗?

(我更担心实现逻辑,所以没有优化)

编码:

固定代码:

http://codepaste.net/auun4u

0 投票
1 回答
1257 浏览

lisp - 用 LISP 填充的水壶

从一个空的 5 加仑水罐和一个空的 11 加仑水罐开始,我们怎么能在 11 加仑水罐中正好有 3 加仑水,而 5 加仑水罐又是空的呢?

我想在 Lisp 中编写一个函数,计算这个谜题中任何状态的后继状态列表

我的解决方案

如何实现successors功能?

请帮忙 !!!!

0 投票
1 回答
2465 浏览

prolog - Prolog - 广度优先搜索水壶

我正在 Prolog 的状态空间中研究搜索策略,我正在查看以下程序,这是著名的水壶问题,为简单起见,您有 2 个水壶(4 升和 3 升),您可以装满、倒空和将水转移到另一个水壶中,直到第一个是空的或第二个是满的。目标是有 2 升(水罐没有任何测量值)。这个实现应该是广度优先。

我不清楚的是如何理解这是 beadthfirst 而不是 depth first 例如,查看代码。我正在“人工智能的Prolog编程”(I.Bratko)一书中查看BF的实现,这对我来说似乎不同,因为它保留了所有备选候选者(在我的情况下为节点或状态)与他们的路径(如理论上应该)。另一个问题:BF 应该首先找到最短路径,但这是我的程序的响应:

显然这不是最短路径,操作 2 和 4 是不必要的。

其他详细信息:我尝试使用跟踪执行,但似乎不是明确的 BF,因为从“state(0,0)”开始,唯一可直接到达的状态是“state(4,0)”和“state(0, 3)",然后在 BFS 中访问这 3 个节点,但是查看跟踪,它们不是,在 state(4,0) 之后它访问 state(4,3)。现在你能确认我走的是正确的路而且这不是 BFS 吗?但是尝试遵循 Bratko 实现我有一个问题:我应该枚举每个节点及其后继节点,我认为这对于水壶问题是不可行的。有什么提示吗?

0 投票
1 回答
746 浏览

prolog - 深度优先搜索序言

我正在尝试使用部门优先搜索来解决水罐问题(一个 7L,一个 4L,在 7L 水罐中获得 5L)。但是,每当我尝试从我的一个操作中恢复新状态时,总会出现问题。 序言代码

我不知道出了什么问题,这是跟踪后的输出: 在此处输入图像描述

提前感谢您的帮助!

0 投票
0 回答
611 浏览

prolog - 3个水壶的Prolog算法

我试图制作一个程序来解决 3 个任意大小的水壶问题。我写了这么多

使用此代码,我得到了我需要的结果。在不划分第一个水罐容量的情况下,我还有什么其他方法可以解决这个问题,而是将第一个水罐倒在任何其他水罐上,直到我装满它们,然后计算目标女巫是第一个水罐中的必要量?

PS我希望你能理解我蹩脚的英语,今天想不通

0 投票
0 回答
99 浏览

python - AttributeError:“JugPuzzle”对象没有属性“当前”

Jug 类中的溢出方法有效,但是,当我从 JugPuzzle 类中的计算方法调用溢出方法时,它说 JugPuzzle 没有当前属性。我是不是叫错了还是什么?

0 投票
1 回答
811 浏览

list - Swi Prolog - 使用列表实施水壶计划

抱歉,之前在此发布的新手,试图让此列表通过每个操作进行递归,保持其已访问的列表项,然后如果元素不在状态将更改为的列表中,则检查递归。我需要找出为什么这不能按预期工作,它似乎得到了结果 7,0、0,0、0,4 和 7,4,并且检查似乎在该程序的一次运行中显示了相同的 4 个结果,随机吐出其中一个,是动作顺序错误,因为我知道你必须从最困难的条件开始匹配,目标是使用调用solve(state(0,0))填充它。然后你应该在结束调用中得到 5 在水罐中,并打印出显示它使用的路径的列表,然后找到另一个解决方案,因为在 7L 水罐中有 5L 的地方只能有两个。

0 投票
2 回答
195 浏览

prolog - 格式化最小路径

所以我一直在做一些事情来帮助我更好地理解 Prolog。我拿了传统的水壶问题,但增加了一些难度。因此,我的代码运行良好。剩下要做的就是为输出做一些漂亮的格式化。目前,它只显示了我的代码中找到的最小路径来填充水罐。(见下面的例子)

到目前为止,我想了一种方法可以做到这一点,但我不知道如何在 Prolog 中做到这一点。

我的最佳路径的最终列表格式如下:[ [x(a,b),y(c,d),z(e,f)], [], [], ...]

我想达到这种格式(有关更详细的输出,请参见下文):

  • 首先,我打印第一个作为液体的(在我们的例子中,1。否则,列表中的第一个元素是初始模式)。然后,我获取第一个子列表,并与之前的一个进行比较,看看哪个水壶确实转移到另一个并打印出来。然后,继续,直到列表为空。

目前,它显示了这一点:

这是当前水罐配置的正确路径。(我稍后会添加一个处理 n 壶的方法)

这是我希望它显示的方式(在我的代码中,您可以看到我想要的每个索引):

我很想得到这个帮助,因为我正在尝试的一切都是一团糟。

谢谢男孩/女孩<3

0 投票
1 回答
620 浏览

prolog - 7 升和 5 升水罐到 4 升水罐拼图,深度优先搜索

我想使用任何类型的深度优先搜索来解决 SWI-Prolog 中的 7 升和 5 升到 4 升的难题

我不知道我该如何开始..

最后我想在一个罐子里装 4 升