问题标签 [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.
prolog - Prolog过河
所以我被分配了一个任务来尝试在 Prolog 中解决这个问题,尽管老师只介绍了基础知识,这基本上是 Prolog 中唯一的项目。我觉得我想多了,而且他对第一次 Prolog 程序的期望太高了。
下面列出了问题,我应该如何解决这个问题?
编写一个 Prolog 程序来解决下面的单词问题。作为解决方案的一部分,它应该打印所有的交叉点,首先列出桨手。
汤姆、杰克、比尔和吉姆不得不使用只能容纳两个人的独木舟过河。
在河的左岸到右岸的三个渡口中,独木舟都有两个人,从右到左岸的两个渡口中,独木舟的每个人都有一个人。当其他人在独木舟中时,汤姆无法划桨。
当除比尔以外的其他人在独木舟中时,杰克无法划桨。每个人至少划过一个路口。
这是我到目前为止所拥有的,虽然它“有效”,但它并不能确保每个人都至少划一次。
artificial-intelligence - PDDL - 山羊、狼和卷心菜
我被要求为著名的“山羊、狼和卷心菜”场景写一个解决方案。场景如下:
农夫想把这三个人都运过河。但是,如果:
- 山羊和白菜一个人呆着,山羊会吃白菜
- 如果狼和山羊一个人呆着,狼会吃掉山羊!
因此,该问题的一种解决方案如下:
- 把山羊带过河,然后把它扔到另一边
- 过河回来
- 拿起卷心菜或狼,把它带到另一边
- 放下狼,捡起山羊,然后回到另一边
- 放下山羊,拿起卷心菜,然后回到另一边
- 拿起山羊,瞧!这三个都被运输了。
但是,我无法将其投影到 PDDL 中。我已经给出了问题定义:
最后,我们只得到了 1 个谓词,并被告知这可以通过 4 个动作来完成。move_empty,move_goat,move_wolf,move_cabbage。
谓词是:
(配置?狼?山羊?卷心菜?船)(有效?狼?山羊?卷心菜?船)
我试图从 move_empty 开始:
我不希望得到答案,只希望得到关于如何解决这个问题的帮助和建议,因为我能找到的关于 PDDL 的信息并不多。
clips - 使用 Jess 解决过河难题
起初我解决了一个无限循环的问题,我通过向我的 CONSTRAIN 模块添加规则来解决这个问题。我已经考虑了所有的限制,但似乎所有的事实都因为某种原因被删除了......到目前为止这是我的代码:
这是我的输出:
prolog - Prolog中的桥梁手电筒拼图
在我陈述这一点之前,我从逻辑上理解了这个问题的解决方案,只是很难对其进行编码。一家四口试图在夜间过桥。一个人过桥需要手电筒,只能两个人同时过桥,以两人中较慢的速度移动。父亲在 1 分钟内过桥,母亲在 2 分钟内过桥,孩子在 5 分钟内过桥,奶奶在 10 分钟内过桥。我正在尝试编写一个 Prolog 程序来处理此类问题,但适用于以任何速度移动的任何规模的家庭。总穿越时间必须小于最大指定时间。我们以事实形式获得了这些家庭family(Name,[X1/T1,X2/T2...etc])
。我们被要求定义一个谓词MoveFamily(FamilyName, MAxTime, Moves, Time)
wherefamilyName
和Max time
是绑定变量,moves 绑定到将每个人从一侧穿越到另一侧所采取的移动,time 绑定到它所花费的总时间。这是我到目前为止所拥有的:
当我运行这个事实时family(two, [fred/1, george/2])
。我得到:
有谁知道为什么这不起作用?
编辑:一次穿过两个时,它们以较慢成员的速度移动
编辑2:家庭“二”是family(two, [fred/1, george/2])
。
edit3:查询的所需输出moveFamily(two,20,Moves,Time)
应该是
编辑4:我把家庭事实放在代码块中,我是个傻瓜,应该意识到这就是你的意思哈哈
prolog - 在 Prolog 中生成可能的组合
我正在尝试使用 Prolog 解决“传教士和食人族”问题,在该问题中,您在岛屿的一侧输入了传教士和食人族的数量,并且他们必须乘坐一艘指定的船穿越到另一侧最大容量,约束为:
在岛的两侧和船上,食人者的人数不能超过传教士。
船上必须至少有一个人。
我试图用以下代码来实现这一点:
上面所有变量的键:
我认为我非常接近,主要(唯一?)问题在于该state
功能,因为我不明白您应该如何生成可能的动作/实际进行动作。有人可以请教。
我正在尝试使用上述功能专门解决它,因为它是过去的试卷问题。
编辑:
为了阐明state/7
谓词的目的,它用于查找并输出通过求解过程发生的所有状态的列表。例如。
如果你打电话state(2,2,1,0,0,1,[])
(上面说左边岛上有一艘容量为 2 的船,左边岛上有两个传教士和一个食人族,右边岛上有零传教士和零个食人族),然后打印出结果L 最终可能会给出:
prolog - Prolog中解决农民山羊狼和白菜问题的优化
我正在为Prolog中的经典“狼、山羊和卷心菜”问题寻找更好的算法,计算效率更高。下面的算法基于 BFS 搜索可能的情况。
问题:_
“从前,一个农夫去市场买了一头狼、一只山羊和一棵卷心菜。在回家的路上,农夫来到河边租了一条船。但乘船过河,农夫只能携带他自己和他购买的一件物品:狼、山羊或卷心菜。
如果无人看管,狼会吃山羊,或者山羊会吃白菜。
农民面临的挑战是将自己和他的购买物带到河的远处,让每件购买的东西都完好无损。他是怎么做到的呢?”
这个问题的当前解决方案是这个:
prolog - 在 GNU Prolog 中编译失败
在 GNU Prolog 中加载 .pl 文件时出现编译错误
农夫-狼-山羊-白菜问题
append - 如何将多个项目附加到嵌套列表?您如何成功地处理过河问题的变体?
我正在尝试解决这个类似于狼、山羊和卷心菜问题的谜语,并尝试以图形格式表示它(节点和边表示所有潜在路径)。
这就是问题:
2 个马戏团家庭有一个行为,其中一个家庭,由母亲、父亲和女儿组成,位于空中飞人的左侧,而另一个家庭,有两个兄弟和一个姐妹,位于空中飞人的右侧。空中飞人。每个人都从各自的秋千上吊起来,两个家庭之间有一个空荡荡的秋千,如下所示:
母亲,父亲,女儿,空,妹妹,弟弟,哥哥
一个人只能从他们的秋千摆动到一个空荡荡的秋千上,该空荡荡的秋千要么与他们当前的秋千相邻,要么被来自任一家庭的单个人与他们的位置隔开。诀窍的目的是让两个家庭交换双方。任何家庭成员都不得在任何阶段向后摆动。将导致成功执行该技巧的动作顺序是什么?
我将左侧的族标记为“A”族,将右侧的族标记为“B”,将空族标记为“É”,并从第一个位置开始,尝试绘制所有可能存在的排列。
现在我试着只做第一个可能的移动(移动到相邻的空荡荡),但我似乎遇到了一些技术问题,我不知道为什么会这样。
我正在尝试在每个步骤中列出可能的步骤。
这就是我所拥有的。
我正在尝试将新项目附加到新列表中,但它会更改项目。可能是因为 append 在 if 语句中两次并且只是更改了附加的项目吗?有没有更有效的方法来做到这一点?感谢任何帮助将不胜感激:)