【问题标题】:CLIPS system halted and not continuing to executeCLIPS 系统停止并且不继续执行
【发布时间】:2021-02-05 14:07:48
【问题描述】:

我正在按照 APG 文档集成 CLIPS 专家系统,感谢伟大的文档,我成功地将 CLIPS 集成到我的 C++ 项目中,我的应用程序连续运行并使用 EnvAssert 方法将 Facts 提供给 CLIPS 系统并调用 EnvRun,一切正常没问题,直到我收到此错误。

[PRNTUTIL7] Attempt to divide by zero in / function.

[DRIVE1] This error occurred in the join network
   Problem resides in associated join
      Of pattern #1 in rule RULE-1

[PRCCODE4] Execution halted during the actions of defrule RULE-2.

一旦我收到此错误,进一步的 Assert 正在工作,但 Run 似乎不起作用,但我确信有明确的匹配规则可用,但在下一次 Run 时仍然没有触发任何规则。

我理解错误并且我可以修复它,但我无法理解行为。所以我在 CLIPS 控制台中对其进行了测试,当报告错误时,连续运行似乎按我预期的那样工作,但在我的应用程序的情况下,我想知道潜在的差异。

参考应用程序的伪代码:

<code to create and initialize CLIPS environment>
EnvReset()
While(true)
{
   <my code to get facts>
   EnvAsset(Fact)
   EnvRun(-1)
   <my code to receive the generated result facts>
}

注意:我不会在每次 RUN 之前调用 RESET。

【问题讨论】:

  • 尝试下载最新版本的源代码:sourceforge.net/p/clipsrules/code/HEAD/tree/branches/63x。嵌入式使用存在错误标志未重置的错误。
  • 感谢@GaryRiley 将立即尝试并更新。
  • @GaryRiley 我尝试使用 63x 进行测试,但结果相同,附上我使用的测试代码。仅供参考,我从您共享的链接下载了快照,并将 CORE 文件夹中的 C 文件复制到 windows\Source\CLIPS 并编译了 CLIPS_MVS_2019 并使用该库进行测试。
  • 重置错误标志的代码在EnvRun函数的运行位置。您可以在此处下载修复程序:sourceforge.net/p/clipsrules/code/HEAD/tree/branches/63x/core/…
  • @GaryRiley 修复工作有效,但一个小问题是议程没有正确更新错误后的连续运行。我尝试使用 EnvAgenda(ClipsEnv, "STDOUT", NULL) 打印议程,对于第一次运行,它会正确打印议程,但不能连续运行。

标签: c++ clips expert-system


【解决方案1】:

用于重置 API 调用的错误标志的修复已签入 sourceforge 上的 subversion 存储库:https://sourceforge.net/p/clipsrules/code/HEAD/tree/branches/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多