问题标签 [river-crossing-puzzle]

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 投票
2 回答
3504 浏览

java - Java 中的 Farmer、Wolf、Goat 和 Cabbage 广度优先和深度优先搜索

所以,我开始了这个问题,我必须带着卷心菜、狼和山羊过河,而不是将卷心菜和山羊或狼和山羊单独放在同一侧。

我开始对如何处理这个问题感到非常困惑。基本上我正在考虑添加一堆会导致正确结果的顶点,并且只需让程序演示广度优先和深度优先搜索,而无需复杂的顶点生成过程。我是否正确地考虑了这一点,还是有更好的方法?

到目前为止,这是我的主要方法的代码。

0 投票
1 回答
693 浏览

prolog - 为什么 Prolog 没有找到“狐狸、鹅和豆袋拼图”的解决方案,而是显示“真实”?

我想用 Prolog 作为练习来解决“狐狸、鹅和豆袋难题”。

所以我写了

问题

我想solve(X).我会得到一系列有效的步骤。但相反,我得到

为什么我没有得到从开始到目标的步骤列表?

代码解释

valid检查一个 4 元组,其中第一个元素是“Man”的位置,第二个是“Goose”的位置,第三个是“Beans”的位置,如果没有人被吃掉。

step(Situation1, Description, Situation2)从一个有效的情境迈向另一个有效的情境。

reachable(Start, SituationList, Steps, Goal)检查是否Goal可以从情境中到达情境Goal,而每个情境SituationList都只被访问一次,并且Steps描述了按顺序采取了哪些步骤。

0 投票
1 回答
1963 浏览

prolog - 农民山羊狼卷心菜拼图的 Prolog 专家系统

我的任务是在 Prolog 中创建一个通用专家系统,您可以将不同的知识库插入到该系统中,因此它必须是通用的。我必须为专家系统提供的知识库是农夫山羊狼和卷心菜拼图。我在设计知识库和通用推理引擎时遇到了很大的困难。

经过几天的搜索,我找到了一堆专家系统的例子,用于鸟类层次结构和其他一些零碎的东西,但它们似乎并不能帮助我了解如何将这个项目组合在一起。

我只是想知道是否有人有一些关于如何在 Prolog 中设计专家系统的好例子或材料,或者哪里有好地方?

感谢您的帮助,非常感谢。

PS。我不想购买材料,因为这是我上学的最后一个月,而且在这门课程结束后我不太可能做很多 Prolog 编程。

谢谢并恭祝安康,

D

编辑

这是我的知识库。

这是我试图改进我的知识库的专家系统。

谢谢,

D

0 投票
1 回答
568 浏览

algorithm - 开发运输难题的算法

一位同事要求我为以下难题开发一种算法。

有一座桥,一次只能停两辆卡车。桥的一端,有很重的花岗岩块需要运到桥的另一端。共有5辆卡车。每辆卡车最多可以装载 5 个花岗岩块。加载和卸载单个块需要 10 分钟。无论重量如何,一辆卡车过桥都需要 1 小时。桥的每一端只有一个人负责装卸卡车,因此一辆卡车需要等待,而另一辆正在装卸。

我们的目标是在 12 小时内运送尽可能多的区块。在这个时间范围内我们可以传输的区块总数是多少?拥有超过 5 辆卡车会有帮助吗?

您将如何解决这个问题并开发算法?

0 投票
1 回答
274 浏览

prolog - Prolog 的写入功能问题

下面的代码应该输出:

但我收到以下错误,我似乎无法修复它。如果有人能引导我朝着正确的方向前进,我将不胜感激。

代码:(部分)

如果有人有兴趣,此代码的提示是:

描述:一个农民带着他的山羊、狼和卷心菜来到一条他们想渡过的河边。有一条船,但只能坐两个人,只有农夫会划船。如果山羊和卷心菜同时上船,卷心菜就会被吃掉。同样,如果没有农夫,狼和山羊在一起,山羊就会被吃掉。设计一系列的河流过境点,以便所有相关人员安全过河。

0 投票
1 回答
2865 浏览

prolog - 经典农、狼、羊、白菜生产体系建设

我正在尝试学习 FWGC 人工智能问题的生产系统。更多详细信息https://www.cs.unm.edu/~luger/ai-final2/CH4_Depth-.%20Breadth-,%20and%20Best-first%20Search .pdf

我在理解图表的构建方式方面遇到了问题。我了解这个数字以及如何根据位置表示状态。

在此处输入图像描述

这个图是如何构建的?有人可以解释吗?

在此处输入图像描述

0 投票
1 回答
151 浏览

recursion - Prolog“超出本地堆栈”

我正在开发一个程序来解决臭名昭著的谜题“农民、狐狸、鹅和谷物”的更复杂版本,它有八个组成部分而不是四个。我已经确定了解决方案;另外,我只写出了完成问题的必要状态,如下所示:

等等

我现在的目标是让这个程序遵循这些状态,从一个到下一个链接,直到达到最终目标[e,e,e,e,e,e,e,e]. 为了做到这一点,我定义了谓词:

我的查询是solution([w,w,w,w,w,w,w,w],[e,e,e,e,e,e,e,e]).但是,这显然会导致无限递归。我错过了什么?

0 投票
2 回答
202 浏览

prolog - 最小移动次数

在此页面http://cseweb.ucsd.edu/classes/fa09/cse130/misc/prolog/goat_etc.html 中演示了如何解决流行的狼、山羊和卷心菜难题。

但是为了使用这个程序找到一个实际的解决方案,有必要指定所需的确切移动次数,如下所示:

是否有一种标准方法可以找到最小移动解决方案而无需在上述程序中指定移动次数?

0 投票
1 回答
404 浏览

prolog - 农夫的谜题——递归规则和累加器打破了我的方法

几个小时前我开始学习 Prolog,我一直在尝试为 Farmer problem 实现求解器。我知道网上有很多例子,但出于学习的目的,我想了解为什么我的代码不起作用,方法是否有效,以及推理此类问题的正确方法是什么.

请参阅下面的代码。我所做的是:

  • 定义指示状态是否有效的规则(从农民的角度来看是安全的:))
  • 定义指示转换是否有效和安全的规则
  • 定义代表有效行程的规则

到目前为止,我取得的成就是:

  1. 如果我通过提供潜在的解决方案来测试行程规则,它行为是正确的
  2. 如果我质疑行程规则,只有将问题缩短为三个步骤,它才会找到解决方案,例如trip( state(s,s,s,s), State(s,n,s,s), R)

我想我找到了问题,如果我错了,请纠正我:如果解决方案需要超过 3 个步骤,则最后一个行程规则至少计算两次,并且在第一次递归执行后,PreviousStates累加器不为空。什么时候统一?探索的答案,not(member(Next,PreviousStates))然后失败,因为Next状态包含的变量将匹配PreviousStates列表头部中已有的内容。

所以,我的问题是:

  1. 我的结论正确吗?如果不是,那么真正的问题是什么?
  2. 如果我在前一点是正确的,我该如何解决这个问题?也许我错了,但我采取的方法对我来说似乎很合乎逻辑。我哪里失败了?我必须完全改变解决问题的方法吗?

在此先感谢您的帮助!

0 投票
4 回答
1298 浏览

prolog - 用 clpfd 过桥拼图

我试图用 clpfd 解决“逃离 Zurg”的问题。https://web.engr.oregonstate.edu/~erwig/papers/Zurg_JFP04.pdf 玩具从左侧开始,向右移动。这就是我所拥有的:

查询?-solve(M,T)?-solve(Moves,T), labeling([min(T)],[T]).我得到一个解决方案,但没有一个 =< 60。(我也看不到一个..)我将如何使用 clpfd 执行此操作?还是最好使用链接中的方法?

仅供参考:我还发现了这个http://www.metalevel.at/zurg/zurg.html 它有一个 DCG 解决方案。其中内置了约束 Time=<60,它没有找到最低时间。