问题标签 [sicstus-prolog]
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 - 用累积值表示设置时间
调度问题有很多族。我正在研究一个问题,我有一系列工作/任务,从一个家庭过渡到另一个家庭需要重新配置机器(设置时间)。
我正在使用cumulatives[2/3]
来解决这个问题,但我不确定如何表达设置时间。
在这个小例子中,我有 10 个任务属于 3 个不同的家庭。任何任务都可以在任何机器上运行,但是从一个系列中的一个任务切换到另一个系列中的另一个任务需要添加设置时间。
一个有效的时间表(但不是最佳的)可能是:
与使用一起表达这一点的最佳方式是cumulatives[2/3]
什么?通过使每个任务的持续时间成为域变量并为其添加额外的约束?
python - 使用 Python 对 Sicstus 的操作系统系统调用无限期挂起
我正在尝试编写一个校对应用程序,该应用程序从网站上的用户接收证明并将其发送到 Prolog 脚本以检查其有效性。
我正在使用 Django、Python 2.7 和 Sicstus。在我的服务器“view.py”文件中,我调用了一个 python 脚本“checkProof.py”,将用户提交的证明的原始文本形式传递给它。在该文件中,我具有以下功能:
proofChecker.pl 接收修改版本的证明 (pFile),对其进行分析并将反馈输出到反馈文件 (fFile) 中。Python 脚本循环直到生成反馈文件,并将其返回给服务器的其余部分。
我第一次调用这个函数时,一切正常,我得到了预期的输出。我第二次调用这个函数时,程序无限期地挂在“p.communicate()”处。
这意味着,目前,在服务器重新启动之间只能使用应用程序检查一个证明。服务器应该能够在重启之间检查不定数量的证明。
有谁知道为什么会这样?如有必要,我很乐意提供其他信息。
更新
根据下面给出的建议,我尝试了三种不同的调用来确定问题所在。第一个是我正在尝试做的事情——在我真正的校对代码上调用 Sicstus。第二个是调用一个非常简单的 Prolog 脚本来编写硬编码的输出。第三个是一个简单的 Python 脚本,它做同样的事情:
在所有三种情况下,应用程序都会继续挂起第二次尝试调用。这意味着问题不在于调用 Sicstus,而在于我通常调用程序的方式。这有点让人放心,但我仍然不确定我做错了什么。
eclipse - 如何避免 SICStus SPIDER 中的元参数警告?
这可能与comp.lang.prolog-discussion 有关。
在使用带有 SICStus SPIDER 的 Eclipse 时,我收到了几个这样的警告:
这是一个代码示例:
如何摆脱 SPIDER 警告?我对简单地抑制警告并不感兴趣。我正在使用最新版本的 SPIDER IDE (0.0.51) 和 SICStus Prolog 4.2.3。
prolog - 标签中的初步猜测
鉴于这个小例子:
如果我们假设postConstraints
设置了一些复杂的约束。Y 从postConstraints
标签返回并用作成本函数。
我们假设我们对 设置的约束没有(或很少)知识postConstraints
。但我们知道最优解(或一个好的解)将是 X 包含或多或少均匀分布的可能域。即值 1 将出现大约 8 (200/25) 次,2 将出现大约 8 次,依此类推。
但是我们不知道每个值会出现在什么位置。
如果我们从使用默认标签开始,X 将首先被分配只有 1,这是一个解决方案,但不是一个好的解决方案(高 Y)。通过长时间运行搜索,将找到最佳解决方案,这是在可能的域上或多或少均匀分布。
这意味着搜索需要很长时间才能从第一个可能的解决方案到最佳(或更好)的解决方案。
我认为如果可以在标记之前对 X 应用初始“猜测”,那么搜索会更快。前任。如果 X 填充了来自域的随机值?在 Sicstus 有没有办法做到这一点?这是你用value(Enum)
的地方labeling
吗?
prolog - 在 Prolog 中向文件添加新事实
我在 Prolog 中遇到了关于向文件“relations.pl”添加新事实的问题。每次我得到事实时,我都会保存它们并使用
唯一的问题是我想插入新的事实并避免存储更多相同的事实(如果有的话)。
有没有办法做到这一点?谢谢,
url - Eclipse RCP ClassCastException BundleURLConnection 到 JarURLConnection
我正在尝试使用 SICStus 的Jasper接口从Java启动 SICStus 服务器,作为使用类和方法的Eclipse RCP 应用程序的一部分:SICStus
startServer()
http://sicstus.sics.se/sicstus/docs/3.12.7/html/sicstus/Jasper.html http://sicstus.sics.se/sicstus/docs/4.0.8/html/jasper/se/sics /jasper/SICStus.html
我尝试通过我知道的常用方法(将其包装为插件项目、导入并添加到构建路径、创建用户库)从 SICStus 安装中包含 jasper.jar。但是,当我实例化 SICStus 类时,我会收到如下所示的堆栈跟踪。源码中的触发线SICSTus.class
如下:
在尝试将classURL
变量转换为JarURLConnection
实例化失败时,因为 eclipse 加载依赖项BundleURLConnection
并且无法进行转换。该类应该从与产品配置关联的 Eclipse 插件项目中加载。问题是:Eclipse 类加载器有什么解决方法吗?有人对如何在 Eclipse 插件中使用这个类有任何建议吗?
提前谢谢你,-约翰
堆栈跟踪:
clpfd - Sicstus 4.2.3 和 4.3.0 之间的 time_out 差异标签
在 Sicstus 4.2.3 中,可以这样做:
如果你在 Sicstus 4.3.0 中做同样的事情,你会得到:
Lr
4.3.0发生了什么?
您如何知道您在 4.3.0 中获得的解决方案是最佳解决方案还是非最佳解决方案?
prolog - 使用带超时的最大化
Sicstus 4.3.0 有一个优雅的新特性来枚举优化问题中的所有解决方案, minimize(:Goal,?X,+Options)
.
在测试新的启发式搜索时,由于搜索空间大,通常无法证明全局最优,这意味着搜索需要很长时间。
但通常(尤其是对于工业问题)找到一个“足够好”的解决方案就足够了。
那么问题来了:
我有一个问题,我很快就找到了一个“足够好”的解决方案,但我无法证明全局最优。所以现在我想使用最大化来查看我的搜索启发式在搜索过程中的表现,而不是等待全局最优。
使用新的 4.3.0 版本,我可以这样做:
然后,我将得到一个列表Ls
,其中包含在跟踪上找到的所有解决方案,以实现全局最优。
但我不想等待全局最优,所以我添加了time_out
这样的:
这应该找到所有解决方案,但不会MaxLabelingTime
在每个回溯之间花费更多时间。但是,如果time_out
从那时起的启动将未被实例化,Es
则这种方式将失败:
我的解决方案/解决方法如下:
这个接缝可以按预期工作,但我不确定这是否是一个好方法?
prolog - 搜索启发式的累积
我通过其他几个问题(使用累积值、用累积值表示设置时间)得到了关于使用的极好的反馈cumulatives
,以及如何帮助搜索达到最佳解决方案。
然而,在这些问题中,我只使用了一个简化的玩具示例。
当我转向更大的问题时,我仍然很难找到最佳解决方案。
简而言之,我有任务要在一组给定的机器上安排,其中以下适用:
- 每个任务的随机持续时间为 1-1000
- 大约 20% 的任务可以消耗全局资源,这意味着不能同时调度使用相同资源的其他任务。
- 大约 20% 的任务无法在所有可用机器上执行。
前任:
在这个小例子中,我们在 5 台机器上安排了 20 个任务。因此,t4、t7、t15 使用资源 r1 不能同时执行,即使它们被调度在不同的机器上。t4、t15、t16、t20 使用 r2 等。t3 只能在 m3 和 m4 上运行,t4 只能在 m2 和 m3 等上运行。
这里给出了一个完整的模型:
到目前为止,我最好的启发式方法是按以下顺序对 MachineId 变量进行排序:首先是使用许多资源的任务,然后是只能在某些机器上执行的任务,然后是其余的。
关于更好的搜索启发式和/或对称性破坏的任何建议可以表现得更好?
prolog - Prolog - 约束 - 点亮/Akari
我正在尝试解决 Light-Up 难题,但在确定约束时遇到了麻烦。
我的主要谓词是:
它们是矩阵的Rows
形式,例如,每个自由正方形的情况:
要处理我使用的每一行:
所以我遍历矩阵的每个元素,然后我收集,从gatherLeft
- 它召唤其他基本集合,Right, Up 和 Down - 我正在处理的正方形的行和列。这个想法是,行和列的每个交叉点 - 如果你愿意,可以是一个十字 - 最多可以有一个灯泡。
但如果我做这样的事情:
或者这个 sum(VarList, #=<, 1)
我的意图是“每个十字架最多可以有一个灯泡”,但我最终选择了每个空间,最后我说“整个板最多可以有一个灯”。最后我得到一个空板。
编辑
对于后代,我想出的解决方案是:
每个方格最多可以有一个灯,所以sum([H], #=<, 1)
.
取一个正方形,它的列和行最多只能有一个灯,所以sum(Row, #=<, 1)
.
一个正方形的邻域必须至少有一个灯,所以sum(VarList, #>=, 1)
.
它现在似乎正在工作。