【发布时间】:2010-11-02 01:43:29
【问题描述】:
我正在开发一个推理引擎,这意味着基本上我有一定数量的“事实”,这些“事实”基本上代表了某个时刻的世界。连同事实(通常只有两个,起始状态和目标状态),我有很多规则(对于某些问题,实际上可能有数百个)。推理引擎的目标是,给定一个起始状态和一组规则,找到到达可接受目标状态的最短路径。这可以通过多种算法来完成,例如 DFS、BFS 或 A*。该程序的基本结构是:
事实事实名称 属性1 =“价值”; 属性 2 = [ 1, 2, 3]; 属性3 = 4; 属性4 = 7; ... 最终事实 规则规则一 等于(属性,“值”)或 大于(属性,5) > 删除(属性); 结束规则 规则规则二 isprimeinteger(属性) > 添加(属性,1) 结束规则在规则中,LHS(> 之前的部分)匹配事实 factname 中的 every 属性,它等于“值”。在这种情况下,它只有一个,但可能有很多。
这意味着我必须解析变量(通常为同一事实多次解析),并且规则的 LHS 可能有多个条件放入和/或具有适当的优先级解析。
问题是:有没有办法有效地解决这类变量?我现在正在做的是迭代事实中的每个属性,基本上我正在生成一个相当大的 n-ary 树,它甚至是不平衡的,这非常慢,尤其是考虑到上述条件。
我喜欢这种模式匹配的论文指针
【问题讨论】:
-
你能更准确地解释你的问题吗?我很难理解它。您如何获得可以从给定状态到达的状态?你说的变量是什么意思? (我只能看到“属性”,这似乎是一个非常特殊的变量。还有其他的吗?)我无法检测到任何模式匹配(或统一),也无法看到标签“专家系统”的相关性'和'c++'。最后,如果您想要最短路径,DFS 似乎不是一个很好的选择。
标签: c++ variables pattern-matching expert-system