和许多程序员一样,我在大学里学过Prolog,但只是很少.我知道Prolog和Datalog密切相关,但Datalog更简单吗?另外,我相信我读到Datalog不依赖于逻辑子句的排序,但我不确定为什么这是优点.据说CLIPS完全不同,但对我来说理解太微妙了.有人可以提供其他语言的一般语言亮点吗?
我有10个观察环境的传感器.如果正常则传感器为1,否则传感器为0.我需要创建一个功能,如果至少有3个传感器在0上,则会向终端打印出警告信息,并且消息警告只显示一次.我需要在剪辑中做.
谢谢.
(deffacts listaSenzor
(sensor L1 0)
(sensor L2 0)
(sensor L3 1)
(sensor L4 1)
(sensor L5 1)
(sensor L6 1)
(sensor L7 0)
(sensor L8 1)
(sensor L9 0)
)
(defrule rr
(sensor ?a 0 )
(sensor ?b 0 )
(sensor ?c 0 )
=>
printout t ?a ?b ?c "==>WARNING" crlf)
)
Run Code Online (Sandbox Code Playgroud) 我制作了一个模糊的模板,代表学生在某个领域的知识.问题是,在声明学生John
的low
,他也将被宣布为med
是因为低的学生也30和40之间的MED值.
我怎么能宣布学生是low
,而不是med
?
请注意,我知道我可以做类似的事情(student (name John) (knowledge (20 0) (21 1) (22 0)))
,但如果我想使用模糊值声明他怎么办?
(deftemplate fz-knowledge
0 100
( (low (20 1) (40 0))
(med (30 0) (50 1) (70 0))
(high (60 0) (80 1))
))
(deftemplate student
(slot name)
(slot knowledge (type FUZZY-VALUE fz-knowledge))
)
(deffacts students
(student (name John) (knowledge low) )
)
Run Code Online (Sandbox Code Playgroud) 我正在试验PyClips,我想将其与 Python 紧密集成,以便当激活规则时,它会调用 python 函数。
\n\n这是我到目前为止所拥有的:
\n\nimport clips\n\ndef addf(a, b):\n return a + b\n\nclips.RegisterPythonFunction(addf)\n\nclips.Build("""\n(defrule duck\n (animal-is duck)\n =>\n (assert (sound-is quack))\n (printout t "it\xe2\x80\x99s a duck" crlf))\n (python-call addf 40 2 )\n""")\n
Run Code Online (Sandbox Code Playgroud)\n\n然而,当我断言“动物是鸭子”这一事实时,我的 python 函数没有被调用:
\n\n>>> clips.Assert("(animal-is duck)")\n<Fact \'f-0\': fact object at 0x7fe4cb323720>\n>>> clips.Run()\n0\n
Run Code Online (Sandbox Code Playgroud)\n\n我究竟做错了什么?
\n我正在开发一个相当复杂的规则引擎。因此,我决定借助任何 GNU 规则引擎并将其与我的应用程序集成。我发现CLIPS是一个很好的规则引擎。
现在,我的应用程序是用 C++ 编写的,我想要一个示例方式(Hello world 类型的程序),从中我可以学习如何将 .clp 规则引擎集成到我的 C++ 应用程序中。
问题
更新1:
您正在开发什么样的应用程序?
简而言之,我正在开发一个基于过滤器匹配的计数器。用户可以递增(NetworkID = XYZ,增量计数 = 7),(NetworkID = MNO,增量计数 = 934)...等。现在您收到 NetworkID = X * 的查询,然后我需要提供来自 XAA 的所有计数。 ..XZZ。它是在跨不同节点(分布式环境)的多进程、多线程中更新的。
为什么里面有专家系统规则,什么样的规则?
现在,我的平台/应用程序使用 C++(用户在其中进行递增/递减/查询)。现在我想使用规则引擎来帮助我完成这些工作。用 C/C++ 代码编写逻辑似乎会消耗更多所需的资源。
PS:与递增/递减/查询相关的关键代码均在优化的c代码中。一些包装器采用 C++ 代码。因此,我正在检查规则引擎来为我执行此操作,可以从我的平台/应用程序(在 C/C++ 代码中)调用它。
我是计算机科学的新手。我的项目需要使用基于 CLIPS 规则的引擎,它在 RHEL 盒子中运行。查看剪辑的下载链接(http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/),没有可用的 Linux 软件包。我想知道这是否意味着我需要从源文件中构建它才能在 RHEL 中使用它?
提前致谢。
我正在使用CLIPS(http://clipsrules.sourceforge.net/)进行大学项目,但我不能直接从文件中运行程序,在这种情况下我不想使用提示插入FACTS和RULES.
现在我正在这样做.
我一直在研究规则引擎,这些规则引擎更适合在嵌入式系统上运行。系统将从传感器收集信息,并根据该信息进行特定的C / C ++调用。一个例子是:
IF RainSensor.value > RainSensor.threshold
THEN call( GarageWindow::close())
Run Code Online (Sandbox Code Playgroud)
作为GarageWindow的C ++类,位于链接到规则引擎库的二进制文件中。
我不能对上述嵌入式系统的功能做出任何假设。要求是:
我需要根据其功能(在以后定义)中给出其他选择,这些假设是:
1)嵌入式系统不支持任何内容(不支持JVM,不支持python等):
CLIPS作为C库或clipsmm作为C ++库。两者均可用于商业应用(clipsmm的GPL)。
优点:开源。很好的测试/记录。可移植,可在低内存占用情况下运行。可以从其RHS部分调用C或C ++函数。规则引擎很可能需要与C或C ++软件进行交互。
缺点:它不是线程安全的。它仅支持正向链接。
2)系统支持python:
PyClips:
到CLIPS的Python接口。功能保持与以前的情况相同。仅当需要在RHS部分中进行python调用时,使用此选项才有好处。我错过任何优点/缺点吗?
3)系统支持JVM:
杰西:
优点:与Java对象的良好集成。类似于CLIPS的脚本语言。向前和向后链接。自动侦听Java对象以修改插槽。
缺点:许可。只能在编译时定义新类。
流口水:
优点:开源。记录下来。Java集成。向前和向后链接。
缺点:它更适合在网络上工作(这是我的印象)。
在嵌入式环境中,Drools vs Jess有什么优势?
两者都只能在编译时添加新类。CLIPS可以在运行时。另一方面,如果更新剪辑实例的C ++代码很旧,则直接在CLIPS中创建的任何新类都不会与调用C ++代码中的任何其他类匹配。因此,重新编译Java选项的弊端并非如此。
还有其他我完全缺少的适用于嵌入式系统的引擎吗?
有没有简单的方法可以将Prolog / ASP代码转换为CLIPS?
像这样的东西,但是使用CLIPS而不是Prover9:https : //github.com/potassco/anthem/tree/master/examples
I'm trying to write a CLIPS program which use the Iterative Deepening algorithm to solve a planning problem. For this same reason I would like to keep a low branching factor.
In the following code ?s
is the variable which represent the level of the tree; I would like to use a single rule to make different checks. This is what I tried to do:
(defrule EXPAND::action
(declare (salience ?*load*))
(or
(and ?f1_a <- (status ?s transport ?c1&:(> ?c1 0) …
Run Code Online (Sandbox Code Playgroud)