私は推論エンジンを開発しています。これは、基本的に、基本的には特定の瞬間の世界の表現である「事実」があることを意味します。事実(通常は2つだけで、開始状態と目標状態)と一緒に、私は多くのルールを持っています(文字通り特定の問題では数百になるかもしれません)。推論エンジンの目的は、開始状態と一連のルールが与えられれば、受け入れ可能な目標状態の1つに最短経路を見つけることです。これは、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
ですべての属性と一致します。この場合は1つだけですが、多くの場合があります。 これは変数を解決する必要があることを意味します(同じ事実のためにしばしば複数回)。規則のLHSには複数の条件が入れられているか、適切な優先度解析が行われている可能性があります。
問題はこの種の変数を解決する方法がありますか?私が今やっていることは、事実のすべての属性を繰り返し処理することです。基本的には、かなり大きなn-aryツリーを生成しています。これは不均衡でもあります。
は、私は簡単なハッシュテーブルはOになるところ、あなたはO(N)アルゴリズムを使用している
問題を少し正確に説明できますか?私はそれを理解するのに苦労します。どの州からどのように到達できる状態になるのですか?変数についてはどういう意味ですか? (私は「属性」を見ることができますが、これは非常に特殊な変数です。他にもありますか?)パターンマッチング(または統一)を検出できず、タグのエキスパートシステム'と' C++ '。最後に、DFSは、最短パスを望むなら、大きな選択肢ではないようです。 – mweerden