我刚刚参与使用Prolog来处理的不仅仅是最简单的数据形式(事实),而且正在寻找经验丰富的Prologers的一些指导......
如果我想动态管理数据或事实,我有几个主要选择,例如:
如果我将事实作为Prolog中的断言来管理,我也有一个代表这些事实的最佳方式的问题.假设我有一个person名字,姓氏和年龄的人.我可以断言:
person(first_name(_), last_name(_), age(_)).
Run Code Online (Sandbox Code Playgroud)
或隐含假设人的属性是什么:
person(_, _, _). % first name, last name, age
Run Code Online (Sandbox Code Playgroud)
如果我想将一个人与其他人联系起来,我真的需要一个人的钥匙.所以我可能倾向于断言一个人:
person(id(_), ...). % Maintain id as a uniq person key; or done implicitly as above
Run Code Online (Sandbox Code Playgroud)
当然,现在我正在使我的Prolog断言看起来像关系数据库表条目.这让我想知道我是否采取了错误的方法并使事实的表现过于复杂化.
所以,我的问题是:在Prolog中管理中到复杂数据时是否需要考虑一些最佳实践?命名约定是它的一小部分.我读过像Prolog中的assert/retract这样的位是低效的.所以我也想知道如何处理数据组织本身,比如什么时候采用外部SQL数据库而不是Prolog-only表示.
附录
我认为,由于关系数据库使用它们的原因,在关系数据库中使用记录密钥是可取的.这意味着必须保持密钥.对于每种情况,在Prolog中手动(显式)执行此操作似乎很麻烦,那么这通常如何完成?或者我的假设是正确的?
使用Prolog谓词比使用C#对象更自然地表示某些类型的域逻辑.这种域的一个例子是代表家庭关系.
有没有办法将类Prolog的推理引擎嵌入到.NET应用程序中?最好使用推理来驱动我的域,但在我的应用程序的其余部分使用传统的OO.
我有一组带有属性和一系列规则的对象,当应用于对象集时,它们提供了这些对象的子集.为了使这更容易理解,我将提供一个具体的例子.
我的对象是人,每个人都有三个属性:原籍国,性别和年龄组(所有属性都是离散的).我有一堆规则,比如"来自美国的所有男性",它们与这组较大的对象的子集相对应.
我正在寻找现有的Java"推理引擎"或类似的东西,它将能够从规则映射到一部分人,或者建议如何创建我自己的.我已阅读过规则引擎,但该术语似乎专门用于外部化业务规则的专家系统,通常不包括任何高级形式的推理.以下是我必须处理的更复杂场景的一些示例:
我需要规则的结合.因此,当提出"包括所有男性"和"排除10-20岁年龄组中的所有美国人"时,我只对美国以外的男性以及美国境内10岁以外的男性感兴趣 - 20岁年龄组.
规则可能有不同的优先级(明确定义).因此,"排除所有男性"的规则将覆盖"包括所有美国男性"的规则.
规则可能存在冲突.因此,我可以同时拥有"包括所有男性"和"排除所有男性",在这种情况下,优先级必须解决问题.
规则是对称的.所以"包括所有男性"相当于"排除所有女性".
规则(或更确切地说子集)可以具有与它们相关联的元规则(明确定义).必须在应用原始规则的任何情况下应用这些元规则,或者如果通过推理到达子集,则必须应用这些元规则.因此,如果"排除美国"的元规则附加到"包括所有男性"的规则,并且我向引擎提供"排除所有女性"的规则,那么它应该能够推断"排除所有女性"子集相当于"包括所有男性"子集,因此另外应用"排除美国"规则.
我很可能没有项目5,但我确实需要提到的所有其他属性.我的规则和对象都存储在数据库中,并且可以在任何阶段更新,因此我需要在需要时实例化"推理引擎"并在之后销毁它.
工作流程:
我正在查看Mleap,但这仅支持 Scala 语言在没有 Spark 上下文的情况下进行推理。由于我们使用 PySpark,所以坚持使用 Python 语言会很好。
问题:什么是一个好的替代方案,可以让您在训练阶段在 (Py)Spark 中构建管道模型,并让您使用 Python 语言重用此管道模型,而不需要 Spark 上下文?
machine-learning inference-engine pyspark apache-spark-ml data-science
我正在尝试了解在我正在编写的程序的人工智能编程中向后和向前链接的最佳用途。有人能够解释向后和向前链接的最理想用途吗?另外,您能举个例子吗?
在基于规则的专家系统中,知识库包含大量“if(模板)then(动作)”形式的规则。推理引擎选择与输入事实匹配的规则。也就是说,将其条件部分与输入数据匹配的那些规则列入候选名单,并选择其中之一。
现在可以使用具有类似条件语句的普通程序以某种方式达到可能的结果。
我试图找到两者之间差异的“合理而清晰的描述”,以及为什么我们无法实现专家系统规则可以通过正常算法编程实现的功能?
难道只是算法需要完整且众所周知的输入,而专家系统可以接受任何顺序的不完整信息?
谢谢。
logic artificial-intelligence expert-system inference-engine