问题标签 [expert-system]

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 回答
1414 浏览

drools - 自动更新事实的专家/规则引擎?

原子可能不是正确的词。在对元胞自动机或神经网络进行建模时,通常您有两个系统状态副本。一个是当前状态,一个是您正在更新的下一步的状态。这确保了一致性,即在运行所有规则以确定下一步时,整个系统的状态保持不变。例如,如果您为一个细胞/神经元运行规则以确定下一步的状态,然后为下一个细胞运行规则,它是邻居,您希望将当前状态用作这些规则的输入相邻小区的状态,而不是其更新状态。

这可能看起来效率低下,因为每个步骤都需要您在更新它们之前将所有当前步骤状态复制到下一步状态,但是重要的是要准确模拟系统,就好像所有细胞/神经元实际上是同时处理,因此规则/触发函数的所有输入都是当前状态。

在为专家系统设计规则时困扰我的是一个规则如何运行,更新一些应该触发其他规则运行的事实,并且您可能有 100 条规则排队等待运行以响应,但显着性被用作脆弱确保真正重要的那些首先运行的方法。随着这些规则的运行,系统会发生更多变化。事实的状态一直在变化,因此当您处理第 100 条规则时,系统的状态自从它真正响应第一个事实变化时被添加到队列以来已经发生了显着变化。它可能已经发生了如此巨大的变化,以至于规则没有机会在它真正应该有的时候对系统的原始状态做出反应。通常作为一种解决方法,您需要仔细调整其显着性,但随后将其他规则移到列表中,您就会遇到鸡或蛋的问题。其他解决方法包括添加“处理标志”事实,作为锁定机制来抑制某些规则,直到其他规则处理。这些都感觉像是 hack,并导致规则包含超出核心域模型的标准。

如果您构建了一个精确建模问题的非常复杂的系统,您真的希望将事实的更改暂存到一个单独的“更新”队列中,该队列在规则队列为空之前不会影响当前的事实。因此,假设您进行了一项事实更改,该更改填充了规则队列以运行 100 条规则。所有这些规则都会运行,但它们都不会更新当前事实列表中的事实,它们所做的任何更改都会排队到更改列表中,这样可以确保在当前批处理正在处理时没有其他规则被激活。处理完所有规则后,事实更改将立即应用于当前事实列表,然后触发更多规则被激活。冲洗重复。所以它变得很像神经网络或元胞自动机的处理方式。 运行所有规则后,针对不变的当前状态运行所有规则,队列更改,将更改应用于当前状态。

这种操作模式是专家系统学术界存在的概念吗?我想知道它是否有一个术语。

Drools 是否有能力以允许所有规则运行而不影响当前事实的方式运行,并且将事实更改单独排队,直到所有规则都运行?如果是这样,怎么做? 我不希望您为我编写代码,而只是一些它所调用的关键字或 API 中的关键字,一些帮助我搜索的起点。

是否有任何其他专家/规则引擎具有此功能?

请注意,在这种情况下,运行的订单规则不再重要,因为所有排队运行的规则都只会看到当前状态。因此,随着规则队列的运行和清除,任何规则都看不到其他规则所做的任何更改,因为它们都是针对当前事实集运行的。 因此,顺序变得无关紧要,管理规则执行顺序的复杂性消失了。 在所有规则从队列中清除之前,所有事实更改都处于挂起状态并且不会应用于当前状态。然后立即应用所有这些更改,从而导致相关规则再次排队。所以我的目标不是更好地控制规则运行的顺序,而是通过使用模拟同时规则执行的引擎来完全避免规则执行顺序的问题。

0 投票
1 回答
864 浏览

artificial-intelligence - CLIPS 在 RHS 中搜索事实匹配条件

一段时间以来,我一直在努力解决这个问题,但没有找到关于如何完成我将要说明的内容的参考。假设我有一个单元格网格,每个单元格对应于以下模板:

现在我的网格中的单元格类型是用(assert (cell (x <x_coord>) (y <y_coord>) (type <some_type>))语句随机生成的,我想定义以下规则,它检查 3x3 范围内的所有单元格,以中心单元格为中心,并根据检查的单元格类型采取行动:

我将如何在 CLIPS 规则的 RHS 上查找特定标准(在本例中为单元格坐标)的事实?我知道如何在 LHS 上进行模式匹配,但我很想知道是否也可以在 RHS 上这样做。提前致谢。

0 投票
2 回答
100 浏览

python - 你如何在 Mongodb 中进行连接我知道如何在 SQL 中进行

如何在 mongodb 中加入 2 个集合?

我有一个参考FK_ID领域。collection2collection1

在我以前做的 SQL 中

这行得通吗?

或围绕这些线的东西?谢谢

0 投票
2 回答
1099 浏览

artificial-intelligence - 遗传算法与专家系统

我对应该为新软件使用哪个系统有些疑问。
还没有编写代码,我只是分解了所有需求,然后才开始编码。
这将在一家为其他公司提供现场和远程服务的计算机公司中实施。
这些是我的变量:

  • 技术人员数量
  • 客户所在地
  • 问题类型
  • 已为技术人员安排的服务
  • 技术人员对情况的专业知识
  • 客户优先

也许有些遗漏了,但这些是最重要的。
这项工作是手动完成的,并且有人,我们有时看不到最佳路线。
假设一位客户打电话询问打印机问题。
首先,检查哪些技术了解打印机。
那么,技术是否可用?离客户远吗?可以远程完成(软件问题)吗?
可以由离客户位置较近的另一位技术人员来完成吗?
该客户是否比应采用相同技术的其他客户具有更高的优先级?
技术人员的日程安排是否已满?如果是,请传递给另一位打印机/硬件技术人员。

我知道我的英语并不完美(不是我的自然语言),但我会尝试提供更多细节或根据需要更正文本。

所以,我的问题是,你会采取什么样的方法?遗传算法似乎很适合这种工作,我也有一些 GAF 和 WatchMaker(Java GA 框架)的经验。然而,当阅读上面的文字时,专家系统似乎也是合适的。
有人做过这样的事吗?!
我已经搜索过这种软件,但找不到类似的东西。
另一种方法会比这两个问题更好吗?!
此外,我正在建立一个包含所有技术能力和专业知识的表格,其中包含简单的规则,例如每个专业知识的 1 到 5 条。这也是一个决定因素。
谢谢。

0 投票
0 回答
1984 浏览

java - 如何将基于 prolog 的专家系统连接到 Java

我正在构建一个重大决策专家系统,它类似于动物检测专家系统,所以逻辑很简单。实际上在序言中,在“咨询”之后我可以输入“?-去”。开始做题,但是在我搭建好java接口之后,我唯一能做的查询是“consult”,这表明程序加载成功,但是接下来的步骤是无限运行。我无法输入“开始”。继续该程序。我的意思是,在我构建了 java 接口之后,我不能再与程序交互了。序言代码是:

java代码是:

0 投票
1 回答
1299 浏览

java - Prolog 连接到 Java

我有一个类似于动物识别模具的专家系统。这个程序可以在prolog中独立运行,现在我想用netbeans为它构建一个基于java的GUI。我知道如何进行第一个查询以查阅文件:

但是我该怎么做第二个查询:“-?去。” (通过在prolog中输入“go.”,程序可以运行并询问用户问题,用户回答应该是(Y/N.)以继续以下问题)

专家系统源代码:

0 投票
1 回答
2497 浏览

c++ - 用于外汇自动交易的 MT4/5、Multicharts 或 Interactive Brokers API?

我一直对外汇算法交易非常感兴趣,但我不知道从哪里开始。

我更喜欢使用 C++,所以我正在研究 Interactive Brokers C++ API,但我不确定将自己锁定到 Interactive Brokers 是否是个好主意。

使用 Multicharts 或 MT4/MT4 并通过学习和使用他们的编程语言会更好,还是我应该坚持使用 C++/Interactive Brokers?各有什么缺点?

任何建议将不胜感激。

0 投票
0 回答
680 浏览

java - CLIPS 和 JAVA 的问题

我正在 CLIPS 中创建一个专家系统,用户将通过 Java 中的 GUI 使用系统接口。显然,我使用库 CLIPSJNI。

我的专家系统涉及计划水肺潜水(我正在为学术目的而创作,我喜欢 SCUBA,等等……)。

首先,我依赖于 AutoDemo 示例(https://sourceforge.net/p/clipsrules/code/HEAD/tree/clipsjni/examples/

现在,我的项目还处于开始阶段,但已经有一个错误。

您可以尝试我的项目并注意错误:如果我做出选择并按 NEXT(“Successivo”,我是意大利人),然后返回某个屏幕(使用“Precedente”)并将我的选择更改为另一个...系统不显示正确的下一屏!我相信问题出在 scuba.clp 的“GUI INTERACTION RULES”中(但我不是 100% 确定)。

编辑:我在这里上传了我的项目: https ://github.com/gioce90/SCUBA_Diving_ExpertSystem 请看那个。我已经解决了很多,但我还有其他问题...请看 SmartPlan.Java 和 scuba.clp

0 投票
1 回答
398 浏览

java - 从android应用程序与网页通信的接口

我正在尝试为 android 实现一个“Doctor Finder”应用程序,该应用程序将具有像 webMD 这样的症状检查工具。由于 webMD 没有任何 API,我必须创建自己的专家系统(这需要很多时间),或者需要找到类似于 webMD 的提供公共 API 的东西。我从美国国家医学图书馆找到了NIL API,我怀疑它在我的场景中是否有用。

现在的实际问题是,是否可以使用来自 android 的界面使用 webMD 的在线症状检查器。我不想在我的应用程序中显示 HTML 页面,而是通过它发送和接收信息?如果没有,是否有任何 API 可用于此目的?

0 投票
2 回答
709 浏览

vb.net - 将 vb6 代码转换为 vb.net

我想将此 VB6 代码转换为 VB.NET 代码,但我是 VB.NET 的新手。

顺便说一句,那是专家系统代码,