使用Python函数与Clips专家系统

使用PyClips时,我试图构建一些Clips规则,这些规则可以动态地从Python解释器中检索数据。为此,我按照手册中所述,注册了一个外部函数。

下面的代码是一个问题的示例。我这样做是因为我有一个包含大量数据的应用程序,这些数据以SQL数据库的形式存在,我希望使用Clips进行推理。然而,如果我可以直接将Clips“插入”到Python的命名空间中,我就不想浪费时间将所有这些数据转换成Clips的断言。

然而,当我尝试创建规则时,我得到了一个错误。我做错了什么?

import clips#user = True#def py_getvar(k):#    return globals().get(k)def py_getvar(k):    return True if globals.get(k) else clips.Symbol('FALSE')clips.RegisterPythonFunction(py_getvar)print clips.Eval("(python-call py_getvar user)") # Outputs "nil"# If globals().get('user') is not None: assert somethingclips.BuildRule("user-rule", "(neq (python-call py_getvar user) nil)", "(assert (user-present))", "the user rule")#clips.BuildRule("user-rule", "(python-call py_getvar user)", "(assert (user-present))", "the user rule")clips.Run()clips.PrintFacts()

回答:

我在PyClips支持小组中获得了一些帮助。解决方案是确保你的Python函数返回一个clips.Symbol对象,并在规则的左侧使用(test …)来评估函数。使用Reset()似乎也是必要的,以激活某些规则。

import clipsclips.Reset()user = Truedef py_getvar(k):    return (clips.Symbol('TRUE') if globals().get(k) else clips.Symbol('FALSE'))clips.RegisterPythonFunction(py_getvar)# if globals().get('user') is not None: assert somethingclips.BuildRule("user-rule", "(test (eq (python-call py_getvar user) TRUE))",                '(assert (user-present))',                "the user rule")clips.Run()clips.PrintFacts()

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注