我正在開發一個推理機,這意味着基本上我有一定數量的「事實」,它們基本上是某個時刻世界的表示。加上事實(通常只有兩個,起始狀態和目標狀態),我有很多規則(對於某些問題,字面上可能是幾百)。推理機的目標是,給定一個開始狀態和一組規則,找到可接受的目標狀態之一的最短路徑。這可以通過幾種算法完成,如DFS,BFS或A *。本方案的基本結構是:模式匹配中的變量替換?
fact factname attribute1 = "value"; attribute2 = [ 1, 2, 3]; attribute3 = 4; attribute4 = 7; ... endFact rule ruleOne equalsto(attribute, "value") or greaterthan(attribute, 5) > remove(attribute); endRule rule ruleTwo isprimeinteger(attribute) > add(attribute, 1) endRule
在規則中,LHS(前面的部分>)匹配以下事實factname
其等於「值」每屬性。在這種情況下,它只有一個,但可能有很多。 這意味着我必須解決變量(通常爲同一事實多次),規則的LHS可能會有多個條件和/或適當的優先級解析。
問題是:有什麼辦法可以有效地解決這種變量?我現在所做的是迭代事實中的每個屬性,基本上我生成一個相當大的n-ary樹,它甚至是不平衡的,而且這非常慢,尤其是考慮到上述條件。
我很想指針文件爲這種模式,您使用的是O(N)的算法匹配
你能解釋一下你的問題更精確一點嗎?我很難理解它。你如何得到某個州可以達到的州?你對變量有什麼意義? (我只能看到'屬性',這似乎是一個非常特殊的變量,還有其他嗎?)我無法檢測到任何模式匹配(或統一),也無法看到標籤專家系統的相關性'和'C++'。最後,如果您想要最短路徑,DFS似乎不是一個好選擇。 – mweerden 2009-06-12 00:39:45