私は推論エンジンを開発しています。これは、基本的に、特定の瞬間の世界の表現である特定の数の「事実」を持っていることを意味します。事実 (通常は開始状態と目標状態の 2 つだけです) とともに、多くのルールがあります (特定の問題については文字通り数百になる場合もあります)。推論エンジンの目的は、開始状態と一連のルールを指定して、許容可能な目標状態の 1 つへの最短パスを見つけることです。これは、DFS、BFS、A* などのいくつかのアルゴリズムで実行できます。プログラムの基本構造は次のとおりです。
事実名 attribute1 = "値"; attribute2 = [1、2、3]; 属性3 = 4; 属性4 = 7; ... エンドファクト ルールルールワン equalsto(属性、「値」) または より大きい(属性, 5) > 削除 (属性); endRule ルールルール2 isprimeinteger(属性) > add(属性, 1) endRule
ルールでは、LHS (> の前の部分)は、「値」に等しいファクト内のすべての属性に一致します。factname
この場合は 1 つだけですが、複数ある場合もあります。つまり、変数を解決する必要があり (多くの場合、同じ事実に対して複数回)、ルールの LHS には複数の条件が設定されているか、適切な優先度の解析が行われている可能性があります。
問題は、この種の変数を効率的に解決する方法はありますか? 私が今行っていることは、実際のすべての属性を反復処理することであり、基本的に、バランスの取れていない非常に大きな n-ary ツリーを生成しています。これは、特に上記の条件を考えると非常に遅いです。
この種のパターンマッチングの論文へのポインタが欲しい