説明

RETEネットワーク組織化方法

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、知識ベース即ちエキスパート・コンピュータ・システムにおいて使用される知識ベースを構築するためのシステムおよび方法に関する。特に、本発明は、知識ベース・コンピュータ・システムにおいて使用されるルールのRETEパターン・マッチング・ネットワークを構築するためのシステムおよび方法に関する。
【0002】
【関連技術】コンピュータにおいて動作するエキスパート・システムのための知識ベースは、典型的にはルールからなっている。これらのルールは、一般にIF−THENステートメントの形態で表現される。このルールのIF部分は、パターンを形成する条件(システムにおけるオブジェクトに対するテスト)のコレクションを表わす。
【0003】たくさんのパターンのコレクションとたくさんのオブジェクトのコレクションとのマッチングは、推論エンジンの1つの動作である。推論エンジンは、人工知能およびエキスパート・システムにおける論証構成要素である。推論エンジンは、典型的に3つの構成要素あるいは方法、即ち、(1)オブジェクトのコレクションと与えられたルールとの突合わせ、(2)その条件がオブジェクトに完全にマッチするルールのリストから1つのルールを選択し、(3)選択されたルールの発火(始動)を含む。
【0004】推論エンジンにおける最も時間を費やす段階は、マッチング・プロセスである。例えば、1000のオブジェクトと1000のルールを持つシステムおよび方法であって、各ルールが3つの条件を持つ場合を考えよう。非常に簡単な実現方式においては、各ルールは全てのオブジェクトと比較される。これは、各実行サイクル毎に1兆回以上の突合わせ操作をもたらす。
【0005】RETEのパターン・マッチング・アルゴリズムは、作業の小さな部分(即ち、1兆回より遥かに少ない突合わせ作業)のみでこの事例の結果を達成することができる複雑なアルゴリズムである。RETEパターン・マッチング・アルゴリズムについては、C.L.Forgy著「RETE: A FASTALGORITHM FOR THE MANY PATTERN/MANY OABJECT PATTERN MATCH PROBLEM」(「Artificial Intelligence」、第19巻、17〜37頁、1982年)、およびC.L.Forgy著「MEASUREMENTS ON PRODUCTION SYSTEMS」(Department of ComputerScience,Carnegie−Mellon Univ.,米国ペンシルバニア州ピッツバーグ、1983年)に記載されている。以降RETEのパターン・マッチング・アルゴリズムについては、本発明により解決される問題の理解のため必要な程度にのみ記述する。
【0006】このRETEのパターン・マッチング・アルゴリズムは、突合わせ要素または方法に対する「分割征服」手法を実現する。与えられたルールを構成する条件がテストされる。1つの条件の失敗は、以降の条件のテストを阻止する。突合わせを行うため、RETEのパターン・マッチング・アルゴリズムは、ルールの前提となるものから組み立てられた(まとめられた)増補識別ネットワーク(本文では、RETEネットワークと呼ぶ)を使用する。各オブジェクトが、このオブジェクトのみに関する条件に対して最初にテストされる。次いで、これらのテストを通ったオブジェクトは、多くのオブジェクトを必要とするテストを行うために他のオブジェクトと一緒にされる。全てのテストを通ったオブジェクトのコレクションは、選択および発火(始動)の候補となる。
【0007】このRETEネットワークは、接続された節点のネットワークを含む。これらの節点とは、root(根)節点、alpha(アルファ)節点、beta(ベータ)節点、and(アンド)節点、beta not(ベータ否定)節点、and not(アンド否定)節点、terminal(終端)節点およびgamma(ガンマ)節点を含む。各オブジェクト・タイプ毎に1つのroot節点がある。
【0008】root節点は、テストされるオブジェクトに対するエントリ点を表わす。root節点は、そのオブジェクト・タイプに基づいてネットワークにおける子節点にそのオブジェクトを同報する。
【0009】alpha節点は、要素内(intra−element)テストを表わす。要素内テストは、1つのオブジェクトに対してテストを行う。要素内テストは、オブジェクトの属性がルールにおいて指定される如き定数値を有するかどうかと関連し得る。要素内テストはまた、オブジェクトの属性が述語による定数と関連しているかどうかと関係し得る。要素内テストは、更に、同じオブジェクトの2つの属性が指定された関連の下で一致するかどうかと関連し得る。これらのテストは、ルールの前提において負に定量化される変数について行われる。これらのテストはまた、正に定量化される変数についても行われる。即ち、これらのテストは、変数の不在ならびに変数の存在を検証するため使用され得る。
【0010】beta節点およびbeta not節点は、要素間(inter−element)テストを表わす。要素内テストと異なり、要素間テストは多重データ・オブジェクトの試験属性をテストする。これらのテストは、2つ以上のデータ・オブジェクト間にある関係があるかどうかを判定する。beta節点は、(1)純粋に負に定量化されるか、あるいは(2)純粋に正に定量化されるデータ・オブジェクトのセットをテストするため用いられる。正に定量化された変数と負に定量化された変数の組合わせに関するテストは、混成量化テストと呼ばれる。これらは、beta not節点によりRETEネットワークにおいて実現される。gamma節点は、beta節点の変形である。beta節点と同様に、これらの節点は要素間テストを実行する。しかしながら、beta節点と異なり、これらの節点は、1つのソースからその入力の全てを受取り、beta節点は左側の入力と右側の入力を有するが、gamma節点は左側入力のみを有する。
【0011】全ての要素間テストは、幾つかのデータ・オブジェクトが一緒にされてこれらが1つの点におけるテストに使用できるようにすることを必要とする。beta節点は2つの入力を持つため、これらはオブジェクトの組合わせに役立つ。しかし、時には、全てのオブジェクトは1つの点(おそらくは、例えば、前のbeta節点)において既に使用可能である。もしこの1つの点が要素間テストに対する入力として供し得るならば、2番目の入力は余分である。このため、幾つかの従来のシステムは、この異例な場合を許容するため、gamma節点とbeta節点を区別する。
【0012】and節点は、後続の節点により後でテストするためのオブジェクトの組合わせを生成するように用いられる。これら節点は、一切のテストを行わない。これらは、単にデータ・オブジェクトのマージを容易にする。and not節点は、and節点の変形例である。これらは、正に定量化された変数テストの結果を負に定量化された変数テストの結果と統合する。上記のalpha、betaおよびgammaテストと関連して見ると、and not節点はテスト不在の意味を構成する。
【0013】terminal節点は、与えられたルールに対するRETEネットワークの底部を表わす。各ルールは唯1つのterminal節点を有する。
【0014】同じテストを繰返して行うことを避けるため、RETEネットワークはメモリ節点を使用する。メモリ節点は、ネットワーク内の状態としてのオブジェクトとの突合わせ結果を記憶する。これらの節点は、alphaメモリ節点とbetaメモリ節点と呼ばれる。メモリ節点を構成するため、ネットワーク内の節点間を通過するオブジェクトは「トークン」と呼ばれ、これは1つのタグおよび1つのオブジェクト・リストからなる。タグは、なにかが知識ベースに加えられたことを示す+か、あるいはなにかが知識ベースから取除かれたことを示す−であり得る。トークンと関連するオブジェクトのリストは、システムがルールの前提における連続するオブジェクトに対して突合わせを試みるかあるいは既に突合わせた如きオブジェクトの順列と対応する。
【0015】動作は以下のとおりである。alpha節点の入力に到着するトークンが関連するテストを満足する時は常に、alpha節点の子節点へ送られる。もしこのトークンがテストを満足しなければ、子節点へは送られない。もし1つのオブジェクトが全ての要素内テストを満足する(これはまだ全ての要素間テストを満足しないかも知れないが)ならば、このオブジェクトはルールと「部分的に一致する」と言われる。ルールの前提の条件と部分的に一致するオブジェクトと対応するトークンは、alphaメモリ節点に記憶される。もし同じルールあるいは異なるルールの2つのオブジェクトが部分的に一致する全く同じテストを持つならば、ネットワークはこの2つに対してalphaメモリ節点を共有する。
【0016】トークンがbeta節点の左側入力に分配されると、beta節点は入来トークンを、その右側の親のalpha節点に関連するalphaメモリ節点に記憶された各トークンと比較する。左側のトークンと一致する各右側トークンの場合は、新しいトークンが構成され、子のbetaメモリ節点に記憶される。このトークンは、次に子の節点に送られる。新しいトークンは左側のトークンと同じタグを持ち、オブジェクトのリストは左側および右側のトークンに対するオブジェクトの編集物となる。
【0017】+タグを持つトークンがterminal節点に入る時は常に、それは衝突(conflict)セットに関連ルールの(トークンと対応する)インスタンシエーションを加える。−タグを持つトークンの到着は、衝突セットからの対応ルールのインスタンシエーションの削除をもたらす。
【0018】明らかなように、知識ベースに対して最も後のルールの始動によりなされた変更のみが各サイクル毎に処理されねばならない。これらの変更は、ネットワークを介して「フィルタ」し、関連する場合に、ネットワークに記憶された状態が更新される。これは、RETEのパターン・マッチング・アルゴリズムの重要な属性である。このネットワークの出力は、衝突セットに対する束縛変数の仕様(拘束要因、突合わせたオブジェクト)を含む。
【0019】RETEネットワークは、OPS5(コンピュータ言語)に基づくコンピュータ・システムを用いて初めて実現された。このOPS5システムは、C.L.Forgy著「OPS5 USERS MANUAL」(Departmentof Computer Science,Carnegie−MellonUniv.、1981年)に記載されている。
【0020】OPS5に基づくコンピュータ・システムにおいて、ユーザは、ルールの左側(LHS)即ち前提を論理積形態にフォーマットしなければならない。換言すれば、RETEネットワークは、論理積形態で表現されるルールのみを処理することができる。p1と名付けられた典型的なOPS5ルールは、下記の構文を用いて表現される。即ち、(p p1 (C1 ↑atrr1 <x> ↑attr2 12)
(C2 ↑attr1 15 ↑attr2 <x>)
−(C3 ↑attr1 <x>)
(remove 2))
ルールp1は、そのLHSに3つの条件を有する。これらの条件は、閉じ括弧のセットにより識別される。
【0021】第1の条件(ルールの最初の行)は3つの個々のテストを有する。最初のテストは、オブジェクトがタイプC1であるかどうかに対応する。第2のテストは、タイプC1のオブジェクトが属性↑attr1およびある値<x>を持つかどうかに対応する。どんな値でも変数xと一致し得る。(ある変数による値の指定の示唆については以下において論述する。)第3のテストは、タイプC1のオブジェクトが12に等しい値を持つ属性↑attr2を有するかどうかに対応する。
【0022】第2の条件(ルールの2行目)もまた、3つの個々のテストを有する。最初のテストは、オブジェクトがタイプC2であるかどうかに対応する。第2のテストは、タイプC2のオブジェクトが15に等しい値を持つ属性↑attr1を持つかどうかに対応する。第3のテストは、タイプC2のオブジェクトが値<x>を持つ属性↑attr2を持つかどうかに対応する。
【0023】第3の条件(ルールの3番目の行)は、2つの個々のテストのみを有する。この条件が否定である(−参照)ことに注意を要する。最初のテストは、オブジェクトがタイプC3であるかどうかに対応する。第2のテストは、タイプC3のオブジェクトが属性↑attr1および値<x>を持つかどうかに対応する。
【0024】ルールp1は、コンピュータ・システムおよび方法に第1の条件を満足するオブジェクトが存在し、また第2の条件を満足するオブジェクトが存在し、かつ第3の条件を満足するオブジェクトが存在するならば、始動される。このことが、3つの例示条件間の関係が論理積関係を示すことに注意する必要がある。
【0025】ルール1においては、変数xが各条件に対する1回のテスト、即ち、第1の条件におけるオブジェクト・タイプC1の↑attr1、第2の条件のオブジェクト・タイプC2の↑attr2、および第3の条件におけるオブジェクト・タイプC3の↑attr1において指定されることに注意されたい。変数xの共通指定の結果は、ルールが始動するためには、OPS5言語コンピュータ・システムのアーキテクチャが、オブジェクトC1、C2およびC3と、それらの対応する属性(それぞれ、↑attr1,↑attr2,↑attr1)が同じ値を有することを要求する。OPS5に基づくコンピュータ・システムにおいては、これは異なるオブジェクトの属性が等しいかどうかをテストする唯一の方法である。
【0026】OPS5システムのRETEネットワーク構築アーキテクチャは、ユーザが1つの条件において異なるオブジェクトの属性が同じであるかどうかをテストすることを許さず、ユーザがオブジェクト・タイプが最初に定義される時テストを包含しなければならないことを理解すべきである。以下に述べるように、この制限は著しい短所である。
【0027】また、ユーザがオブジェクト・タイプが最初に定義される時与えられたオブジェクト・タイプについて全ての要素内テストを指定しなければならないことも理解すべきである。以下に述べるように、上記の制限は同様にOPS5RETEネットワーク構築アーキテクチャの著しい短所である。
【0028】OPS5システムは、要素内テスト、即ち単一のオブジェクトに対するテストを求めて、ルールの各条件を逐次調べることによりRETEネットワークを構築する。各条件に対して、ネットワーク・コンパイラは、特定のオブジェクト・タイプの要素内テストを調べるテスト節点を一体に繋ぐ(与えられる条件、従ってオブジェクトに対して幾つかの要素内テストが存在し得る)。OPS5システムは、ユーザがルールを書いた正確な順序で要素内テストの各々についてalpha節点を構築する。
【0029】一旦ネットワーク・コンパイラが要素内テストを終了すると、このコンパイラはルールの各条件を再び調べて、要素間テストについて調べる節点を付加する。OPS5に基づくシステムは、beta節点を最初に構築する。beta節点は、同様にユーザが書いたように正確に同じ順序で構築される。OPS5システムは、次にbeta not節点を構築する。このbeta not節点もまた、ユーザが書いたのと正確に同じ順序で構築される。OPS5システムにおいては、beta節点またはbeta not節点の右側の入力は常にalpha節点から入るが、その左側入力はalpha節点またはbeta節点から入り得る。
【0030】次に、OPS5コンパイラは各ルール毎にterminal節点を付加する。
【0031】明らかなように、OPS5システムは「高制御」アーキテクチャを使用する。用語「高制御」とは、ユーザが結果として得るRETEネットワーク構造に対して完全な制御を有するシステムおよび方法を意味する。高制御システムは、最適のRETEネットワークが構築できるように、ユーザがルールを書く上でOPS5システムの制約に対する高度の馴染みを持つことを許容する。RETEネットワークの最適化が進むほど、マッチング・プロセスが早くなる。このようなユーザは、時に「パワー・ユーザ」と呼ばれる。効率のよいRETEネットワークを構築する際、このような高制御のアーキテクチャに馴染みの少ないユーザは大きな問題に遭遇し易い。
【0032】先に述べたように、OPS5 RETEネットワーク構築アーキテクチャにおける1つの大きな問題は、ルールの前提内のオブジェクトについてのテストの仕様を処理する柔軟性に関する。OPS5システムにおいては、ユーザは、オブジェクト・タイプが最初に定義される時、特定のオブジェクトに関する全てのテスト(要素内テストか、あるいは要素間テストか)を指定しなければならない。OPS5アーキテクチャは、オブジェクトについての全てのテストが1つの条件内に分類されることを必要とする。OPS5アーキテクチャは柔軟性に非常に欠ける。
【0033】上記の制約は、ユーザが1つのオブジェクトについて任意のテスト、あるいは幾つかのオブジェクトについて相互に関連するテストを書くことを妨げる。OPS5アーキテクチャは、ユーザが考えてルールを表現できる方法を決定する。これは、OPS5システムの著しい制約である。
【0034】OPS5アーキテクチャにおける別の問題は、論理和を使用する能力に関する。OPS5システムは論理和(即ち、ORと関連する条件)を認識せず、RETEネットワークは論理積プロセスのみである。換言すれば、RETEネットワークは成功主義である。オブジェクトは与えられたテストにパスするかあるいはパスしない。ある場合にはパスするが、他の場合にはそうでない中間の根拠がない。論理和の使用は、この「中間の」根拠の使用を意味する。従って、RETEネットワークは、本質的に論理和向きと見做すことができない。OPS5においては、ユーザは2つの個々のルールを構築しなければならない。特に、ユーザは論理和の各節に対して1つのルールを作らねばならない。
【0035】OPS5アーキテクチャにおける別の重要な問題は、ユーザが否定ルールを書く能力に関する。OPS5システムは、複雑な否定的前提を認識しない。ユーザは、ルールを肯定的に枠付けしたステートメントで書かざるを得ない。
【0036】OPS5アーキテクチャの別の問題は、RETEに基づくシステムにおけるルールの動作(RHS)部分を実施するために、RHSで参照されたオブジェクトがルールのLHSに拘束されねばならないという要件に関する。OPS5に基づくシステムにおいては、ユーザは、ルールのRHSにおいて操作されるオブジェクトがルールのLHSで参照されることを確実にしなければならない。この要件を満たすことができないと、システムの誤動作をまねく結果となることがある。
【0037】上記のことは標準的なRETEネットワークの処理について述べたが、他の構成およびRETE処理の強化は可能である。例示に過ぎないが、RETEネットワーク処理の修正についてはM.I.Schor等著「Advances InRETE Pattern Matching」(IBM T.J.Watson Research Center,ニューヨーク州ヨークタウン・ハイツ、1986年)に記載されている。
【0038】RETEパターン・マッチング・アルゴリズムに対する別の拡張は「TREATアルゴリズム」である。このTREATアルゴリズムについては、D.P.Miranker著「Treat: A Better Way for AIProduction Systems」(Preceedngs of 6thNational Conference on ArtificialIntelligence、カナダ、WA、シアトル、1987年7月13日〜17日、42〜47頁)に記載されている。同文献に記載の如く、主な相違は、TREATアルゴリズムがネットワークにおける部分的結果をセーブしないことである。これは、RETEアルゴリズムより小さなメモリを使用するという利点を有する。
【0039】
【発明の目的】以下に示すように、本発明は、RETEパターン・マッチング・アルゴリズムの広範囲な拡張に等しく適用し得るものである。
【0040】本発明の一目的は、オブジェクトに対する任意に指定されたテストを有するルールを処理することができるRETEネットワーク構築システムおよび方法を開発することにある。
【0041】本発明の別の目的は、論理和によってオブジェクトに対するテストを関連させるルールを処理できるRETEネットワーク構築システムおよび方法の開発にある。
【0042】本発明の更に別の目的は、否定ルールを処理できるRETEネットワーク構築システムおよび方法の開発にある。
【0043】本発明の更に他の目的は、ルールの前提に指定されない暗黙の条件を有するルールを処理できるRETEネットワーク構築システムおよび方法の開発にある。
【0044】上記および他の目的については、本発明のシステムおよび方法により達成される。
【0045】
【発明の概要】本発明は、従来のRETEネットワーク生成システムおよび方法においてはこれまで得られない利点を提供する。本発明は、RETEネットワーク・システムの要件および利点を維持しながらRETEネットワークを構成する、斬新な試みを用いるコンピュータ・システムおよび方法である。当業者には明らかなように、本発明は、RETEネットワークの種々の増強により統合化が可能であり、本発明の趣旨から逸脱することなく修正可能である。
【0046】本発明は、主としてコンピュータによる人工知能あるいはエキスパート・システム構築ツールの環境において使用されることが予期される。しかし、本発明は、専用の人工知能またはエキスパート・システム・コンピュータ・システムと統合化が可能である。
【0047】一実施例においては、本発明のシステムおよび方法は、オブジェクトに対する任意の指定されたテストを有するルールを処理することができる。ユーザは、オブジェクトの順序を心配することなくルールを書くことができる(このような心配は、従来のRETEネットワーク生成システムおよび方法には存在する)。同時に、本発明のシステムおよび方法は、ユーザがRETEネットワークのトポロジーをかなりの程度制御することを可能にする。
【0048】本発明のシステムおよび方法は、(1)RETEネットワークの全体的なトポロジーを制御するため要素間テスト(例えば、beta、beta not)のユーザにより書かれる如き相対的順序付けを可能にし、(2)前記要素間テストの相対的順序付けを考慮し、(3)オブジェクトの1の属性は複雑なテストにおいて参照されないが、オブジェクトの別の属性に対するテストの順序付けをできる限り考慮し、(4)RETEネットワークのサブセット全体が前記テストの成否の結果として可能化あるいは不能化されるかをその配置が制御するので、前記要素内テストがRETEネットワークの性能を調整することを許容し、および(または)(5)負に定量化されたテストの意味論的意義を保存することにより、上記の特徴を達成する。
【0049】別の実施例においては、本発明のシステムおよび方法は、RETEネットワークが性格において本質的に論理積的である(即ち、条件が一緒に**ANDされることを要求する)故に、(典型的にOR演算子により識別される)論理和形態で表わされるルールを認識し処理することができ、本発明はこのルールをRETEネットワークを構築するように内部的に修正する。これを達成するため、本発明は、OR節を持つルールの前提を使用する。論理の標準的な論理和ルールを用いて、これを論理和正規形に変換する。この操作の結果、一緒にORされる1組の論理積節をもたらすことになる。変換の後、本発明は論理積節について処理して各節毎に個々のルールを形成する。
【0050】別の実施例においては、本発明のシステムおよび方法は、否定ルール(典型的には、NOT演算子により識別される)を認識する。RETEネットワークはルールの任意の否定を取扱うことができないため、本発明のシステムおよび方法は、論理和ルールの場合のように、ルールを内部的に修正してRETEネットワークを構築する。本発明のシステムおよび方法は、否定節に対してこれを肯定節に変換するためド・モルガンの法則を用いることによりこの変換を行う。
【0051】別の実施例においては、本発明のシステムおよび方法は、暗黙条件を取扱う。本発明は、ルールの右側(RHS)における各オブジェクトを検査して、これがルールの左側(LHS)にあることを保証する。もしオブジェクトがRHSに存在するがLHSになければ、これは暗黙条件になる候補である。もし本発明がオブジェクトがLHSの暗黙条件であると判定するならば、このオブジェクトをRETEネットワークに加える。
【0052】本発明の種々の目的、特徴および付随する利点については、本発明の以降の詳細な記述により更によく理解されよう。詳細な記述は、添付図面を参照する。
【0053】
【実施例】本発明は、RETEネットワークを構築するためのシステムおよび方法である。本発明のシステムおよび方法は、従来のRETEネットワーク構築システムおよび方法においてはこれまで得られなかった利点を提供する。本発明は、コンピュータに基づくエキスパート・システムの開発シェルおよび専用エキスパート・システムと共に統合化が可能である。図1は、本発明の動作を全般的に示す高レベルのブロック図である。動作ブロック101に示されるように、本発明はまず、1階述語論理あるいは相当の形態と機能的に実質上等価である構文でルールをユーザが入力することを可能にする。1階述語論理は、例えば、ルールを論理和、論理積あるいは否定形で表現することを許容する。
【0054】動作ブロック102は、本発明の第2の動作を示す。動作ブロック102は、ルールについて動作(変換)してRETEネットワークを表わすデータ構造を生成する。更に、動作ブロック102は、オブジェクトに対するテストを任意指定したルールを認識して処理するように動作する。動作ブロック102は、更に、論理和関係を持つオブジェクトに対する2つ以上のテストを有するルールを認識して処理するように動作する。動作ブロック102は更に、論理積関係を有するオブジェクトに対する2つ以上のテストを有するルールを認識して処理するように動作する。
【0055】動作ブロック102に対応する構造は、本発明のRETEネットワーク・モジュール206(最初に図2に関して論述する)である。以下において明らかになるように、本発明のRETEネットワーク・モジュール206は、ユーザがルールをより多くの意義を持ちかつ理解可能なように表現することを可能にする。
【0056】動作ブロック104は、RETEネットワークを表わす結果として得るデータ構造を示している。
【0057】次に図2において、本発明のRETEネットワーク・モジュール206のコンピュータ環境200が示される。コンピュータ環境200は、一般に、中央処理装置(CPU)202と、RETEネットワーク・モジュール206を格納する主メモリ204と、入出力(I/O)デバイス208と、バッファ212とを含む。CPU202、主メモリ204およびバッファ212は、ホスト・バス214を介して通信する。I/Oデバイス208およびバッファ212は、システム・バス216を介して通信する。
【0058】望ましい実施態様においては、図2に示した形態は、IBM PS/2パーソナル・コンピュータのワークステーション環境の形態である。IBMPS/2は、「IBM PS/2 Guide to Operations Manual」(米国ニューヨーク、アーモンク)に詳細に説明されている。
【0059】コンピュータ環境200を構成するコンピュータの構成要素/サブシステムは従来の設計であることを理解すべきである。現在入手可能な、あるいは将来開発される適当なコンピュータ構成要素/サブシステムを使用することができる。単なる例示として、本発明は、メインフレーム・コンピュータの如き他の形態で統合することが可能である。また、本発明は典型的には別のソフトウエア・モジュール(図示せず)と関連して動作することも理解すべきである。このような付加的なソフトウエア・モジュールは、エキスパート・システムのアプリケーションを開発できるようにするために必要となろう。
【0060】また、RETEネットワーク・モジュール206は種々の他の形態において提供できることも理解すべきである。単なる例示として、RETEネットワーク・モジュール206は、ハードウエアまたは読出し専用メモリ(ROM)デバイス(図示せず)に構成することができるファームウエアの形態を取ることもできる。更にまた、RETEネットワーク・モジュール206は、各ROMがRETEネットワーク・モジュール206により実行されるものと類似する特定の動作を実行する、多重構成ROMの形態を取ることもできる。
【0061】RETEネットワーク・モジュール206の高レベルの構造的表示が図3に示される。図示の如く、RETEネットワーク・モジュール206は、パーサ(構文解析)モジュール302と変換モジュール304とを含む。
【0062】構文解析モジュール302は、ユーザにより入力されるルールを抽出して解釈し、またメモリ装置204(図2)に格納されたこれらルールを表わすデータを生成する機能を有する。一旦メモリ装置204に格納されると、このルールは、RETEネットワークを構築するため変換モジュール304により操作することができる。一般に、当技術において構文解析系(パーサ)は周知である。更に、大半のコンピュータ・システムは構文解析系を典型的に使用する。しかし、構文解析系は、通常は各システムの特定の要件を満たすように注文設計されている。
【0063】図4は、本発明の構文解析モジュール302の高レベルの動作を示すブロック図である。動作ブロック402により示されるように、構文解析モジュール302は、CPU202に対して最初に各ルール(前述の如く、1階述語論理と類似する構文で表現される)を調べることを指令する。動作ブロック404により示されるように、構文解析モジュール302は、CPU202に各ルール毎に1つの抽象構文ツリーを生成するように命令する。動作ブロック406により示されるように、構文解析モジュール402は次に、変換モジュール304により後で処理するため、メモリ装置204に各ルールに対する抽象構文ツリーを記憶するように指令する。
【0064】当業者には、1階述語論理に従う多数の言語が開発できることが明らかであろう。本発明の望ましい実施態様においては、構文解析モジュール302は、KRLと本発明者が呼ぶ構文におけるルールを認識して処理することができる。KRLは知識表現言語である。KRL構文は、「The INTEGRATED REASONING SHELL REFERENCE MANUAL,IBM」(1989年)に詳細に説明されている。
【0065】KRLルールは、If−Thenステートメントの形態で構成される。本発明においては、ユーザは、KRLルールのIf部分を論理積、論理和あるいは否定形のいずれかで入力することができる。以下において明らになるように、本発明は、ユーザがルールのIf部分を論理積、論理和あるいは否定形のいずれかで入力することを許容する構文言語を処理するために使用することができる。
【0066】KRL構文は、本発明が認識し処理できる唯一の言語である。現在入手可能な、あるいは将来開発される他の言語(構文)を使用することができる。当業者には明らかなように、このような状況においては、構文解析モジュール302は、実際に使用される構文の様式に見合うように修正(特別注文)されねばならないことになる。
【0067】本論の目的にとって、僅かに高いレベルの抽象化でKRLルールを表わすことが役立とう。この抽象化は、本文ではKRLショートハンドと呼ぶ。
【0068】KRLショートハンドにおいては、1つの文字で完全な要素内テストあるいは要素間テストが表わされる。例えば、車(オブジェクト)の色(属性)が青(属性値)であるかどうかをテストするルール条件においては、KRLは下記の如くになる。即ち、 x: car If x.color = 'Blue' then... KRLショートハンドでは、簡単に書くことになる。即ち、 If A then....ここで、Aは条件テスト全体を意味すると見做される。
【0069】RETEネットワーク構成の目的のためにルールの顕著な要素を理解するための手段を除いて、KRLに勝るKRLショートハンドの利点はない。
【0070】本発明の望ましい実施態様は実際にはKRLを使用すると理解すべきであるが、本文における全ての事例ルールはKRLショートハンドで示される。
【0071】再びKRLの事例について見れば、Rule 1.0で示されるルールのLHSの表記は、下記のように論理積形で書くことができる。即ち、 Rule 1.0.
KRLでは、x: car: If x.color='Blue' and x.wheels=4 then.... KRLショートハンドでは、If A and B then...KRLショートハンドでは、シンボルAおよびBはそれぞれ、ルール1.0内の個々のテストを示す。各テストは、1つのオブジェクトについての要素内テスト、あるいは幾つかのオブジェクトについての要素間テストと対応し得る。以下に述べるように、本発明は、オブジェクトに対するテストの任意仕様を認識することができる。例えば、テストAは、車の色が青であるかどうかと対応する。テストBは、同じオブジェクトが4つの車輪(別の属性値の対)を持つかどうかと対応する。
【0072】従来のRETEネットワーク構築システムおよび方法は、本発明とは異なり、テストの上記の任意の論理積を認識して処理することができない。
【0073】以下は、論理和形で書かれたRule2.0で示されるKRLルールのLHSの表記である。即ち、 Rule2.0 If A or B then...
下記は、それぞれRule3.0および3.1で示される、否定形で書かれた2つのKRLルールのLHSの表記である。即ち、 Rule3.0 If NOT(A and B) then...
Rule3.1 If NOT(A or B) then...
本発明の構文解析モジュール302は、論理積、論理和あるいは否定形のいずれかで表わされるルールを処理(構文解析)するように設計される。構文解析モジュール302はまた、オブジェクトに対するテストの任意仕様を処理するように設計される。更に、構文解析モジュール302は、ルールの能動部分(即ち、RHS)を処理するように設計される。
【0074】動作ブロック404に関して先に述べたように、構文解析モジュール302は各KRLルールに対して1つの抽象構文ツリーを生成する。抽象構文ツリーは当技術においては周知である。この抽象構文ツリーは、変換モジュール304により後で処理されるように、メモリ装置204に表現を示す便利な方法である。データ構造はメモリ装置204に格納される。望ましいモードにおいて、抽象構文ツリーはKRLルールを表わすデータ構造である。
【0075】単なる例示として、KRLショートハンドで示されるRule4.0で示したKRLルールの下記の抽象化について考察しよう。即ち、 Rule4.0 If(A and B and Cand D) then...図5は、構文解析モジュール302により構築されたRule4.0と対応する抽象構文ツリーを示す。Rule4.0に対する抽象構文ツリーは、プロダクション節点504、AND節点508、テストA節点510、テストB節点512、テストC節点514およびテストD節点516を含む。プロダクション節点504は、このルールに対するメモリ装置204内の場所である。各ルールは、関連するプロダクション節点を有する。また、プロダクション節点502および506も示される。プロダクション節点502および506は、各プロダクション節点が接続されることを示すため示される。
【0076】AND節点508は、抽象構文ツリーの最も高いレベルである。AND節点508は、テストA、B、C、D間、即ちテストA節点510、テストB節点512、テストC節点514、テストD節点516の論理積関係を示す。
【0077】また、数式節点518も示される。数式節点518は、テストA(テスト節点510)において行うことができる数学的演算を表わす。例えば、=、>または<、>=、<=、=タイプの数学的演算を実施することができる。例えば、ある数学式は下記のテストである。即ち、x=4。図5に更に示されるのは、本発明のシンボル・リスト節点524である。シンボル・リスト節点524は、テスト節点510の数式節点518において使用される特有な変数の合計リストである。本発明のシンボル・リスト節点は、各テスト条件において生じるオブジェクトを要約する便利な方法を提供する。以下に述べるように、シンボル・リストは本発明の重要な特質である。シンボル・リストは、フロー・リスト(以下に述べる)を許容し、従ってRETEネットワークを容易に構成する。ここでは、シンボル・リストが、与えられたテストと関連する全ての特有な(全ての異なる型(種類)の)変数を含むメモリ装置204に格納されたリストを表わすと理解することが重要である。
【0078】以下に述べるように、与えられたルールに対するRETEネットワークを構築するため必要である重要な情報は、どのオブジェクトがルールの各条件テストと関連するか、どれだけが特有であり、オブジェクトが負に定量化されるかどうかである。特に、与えられたテスト節点に含まれるオブジェクトの量は、テスト節点がRETEネットワークにおいて1入力節点あるいは2入力節点として表わされるかを決定する。
【0079】変換モジュール304の高レベルのブロック図が図6に示される。図示の如く、変換モジュール304は、否定モジュール602と、論理和モジュール604と、構成モジュール606と、暗黙条件モジュール608と、最適化モジュール610を含む。これらのモジュールの動作は、図7に関して説明する。
【0080】図7は、変換モジュール304の動作を高レベルで示すブロック図である。動作ブロック704(これは、「not処理」と呼ばれる)により示されるように、変換モジュール304は、各抽象構文ツリーを最初に調べてこのルールが否定されるかどうかを判定するようにCPU202に対して命令する。もしこのルールが否定されるならば、変換モジュール304はCPU202に対して否定を排除するように命令する。望ましい実施態様においては、これは変換モジュール304により行われる最初の動作である。変換モジュール304においては、この動作は否定モジュール602(図6)によって行われる。しかし、動作ブロック704により示される動作は必ずしも変換モジュール304により最初に行われる動作である必要がないことを理解すべきである。しかし、もし否定が最初に指定されなければ、別のOR節点が導入され、更に処理が要求されることになる。このため、望ましい実施態様では、否定を最初に排除することにする。他のメソッドは本質的にそれほど有効ではない。
【0081】動作ブロック706(「OR処理」と呼ぶ)により表わされる如く、変換モジュール304は、各抽象構文ツリーを再び調べて、論理和形で表わされるルールを論理積正規形に変換するようにCPU202に命令する。この動作は、論理和モジュール604(図6R>6)により行われる。
【0082】望ましい実施態様においては、上記の論理和フォーマット動作は、変換モジュール304により行われる第2の動作である。しかし、動作ブロック706により示される動作は必ずしも変換モジュール304により行われる第2の動作である必要はないことを理解すべきである。例えば、動作ブロック706により示される動作は、動作ブロック704により示される動作が後に続く最初の動作であってもよい。しかし、先に述べたように、望ましい実施態様は否定を最初に排除する。
【0083】ブロック704、706により示される動作は、RETEネットワークの構築に先立ち生起する先行処理である。これらの動作は、ユーザが与えられたルールを否定形および(または)論理和形で表わすことを可能にする。これらの動作は、本発明の重要な特徴である。
【0084】動作ブロック708により示されるように、変換モジュール304は次に、CPU202に対して本発明のRETEネットワークを構築するように命令する。動作ブロック708は、RETEネットワークの実際の構築プロセスを示す。この動作は、構成モジュール606(図6)によって行われる。
【0085】動作ブロック710により示されるように、変換モジュール304は、必要に応じて、CPU202に暗黙条件を加えることを指令する。動作ブロック710は、ルールのRHSにおける各オブジェクトを調べてこれがルールのLHSに存在することを保証するプロセスを示す。この動作は、暗黙条件モジュール608(図6)により行われる。
【0086】動作ブロック712により示されるように、変換モジュール304は、最後にCPU202に対して本発明のRETEネットワークを最適化するように指令する。動作ブロック712は、2つ以上のルールに現れるテストが同じテスト節点を共有するように、RETEネットワークを再構成するプロセスを示す。この動作は、最適化モジュール610(図6)により行われる。
【0087】次に変換モジュール304の構造について論述する。否定モジュール602が図8において(図6のその一般形態に加えて)拡張された形態で示されることに注意する。図示の如く、否定モジュール602は、下方否定モジュール802と、AND排除モジュール804と、OR排除モジュール806とを含む。
【0088】下方否定モジュール802は、コンピュータ環境200が否定ルールを認識するように提供される。以下に示すRule5.0は、構文記法で表わされる否定ルールの事例である。即ち、 Rule5.0 If NOT(A and(B or C)and NOT D)
上記の如く、式全体またはLHSが否定される。
【0089】Rule5.0に対する抽象構文ツリーが図9に示される。
【0090】以下は、図9の抽象構文ツリーと関連して図8に示した(下方)否定モジュール802の動作の論議である。下方否定モジュール802は、各ルール(従って、ルール5.0)に対する抽象構文ツリーを調べて、これが否定されるルールであるかどうかを判定するようにCPU202に対して指令する。ルール5.0の事例においては、下方否定モジュール802は、ルール5.0が否定されることを判定する。次いで、下方否定モジュール802は、ルール5.0の抽象構文ツリーについて動作して否定節点を排除する。これは、ド・モルガン理論および(または)2重否定の法則をルール5.0のLHSに対して用いることにより行われる。換言すれば、NOT節点904により示される否定は、ルール5.0内の個々の命題(条件)へプッシュ・ダウンされる。
【0091】ルール5.0のLHSに否定を分配することは、結果として下記の構文記法を得る。即ち、 LHS=NOT A OR(NOT B AND NOT C)OR D図10は、図10に示した如き否定が下方否定モジュール802によりプッシュ・ダウンされた後の修正された抽象構文ツリーを示している。図9のAND節点906の否定は図10のOR節点1002と等価であることを注目すべきである。換言すれば、これらは、式NOT(A and B)=NOT A orNOT Bを表わす。後者の式は、論理和を除いて、RETEネットワークに対する適正なフォーマットである。同様に、否定OR節点は、AND節点となる。
【0092】また、図9および図10において判るように、テストA節点908は、NOTテストA節点1004となる。このNOT表記は、否定がこの条件レベルへプッシュ・ダウンされたことを示す。実際問題として、このことは、例えばz=4であったテストがこの時4に等しくないZとなることを意味する。また、OR節点910がAND節点1006となることに注意すべきである。テストD節点918を伴うNOT節点912は、通常のテストD節点1008となる。ここで、図10の構文解析ツリーは全ての観点において図9の構文解析ツリーと等価であることが明らかな筈である。換言すれば、図10の構文解析ツリーは、依然としてユーザにより最初に示された如くルール5.0の論理的意味を表わす。
【0093】従来のOPS5システムにおいては、ユーザは全体として否定されたルールを書くことができない。その代わり、ユーザは単に個々に条件を否定できるに過ぎない。対照的に、本発明、特に否定モジュール802は、ユーザに対してこのステップを実施する。これは、ユーザが否定されたルールとしてルールを表現することを可能にし、このことはユーザにとって更に有意義となろう。
【0094】一旦与えられたルールが「操作」されて(もしあれば)否定がその最も低いレベル(条件命題レベル)へプッシュ・ダウンされたことが保証されると、否定モジュール602は次に冗長なAND節点を排除する機能を行う。この機能は、AND排除モジュール804により行われる。冗長AND節点を含むルール6.0で示される事例ルールは、シンボル的に下記の如く示される。即ち、 Rule6.0 (A AND B)AND(C OR D)AND G冗長AND節点の全ての連続層に対して実行が継続する。
【0095】ルール6.0に対する抽象構文ツリーが、図11に示される。明らかなように、冗長AND節点1104および1106が存在する。AND節点1106の排除がルール6.0の意味論的意義に影響を及ぼさないことに注意すべきである。AND排除モジュール804の実行は、ルール6.0をルール6.1として示される下記の修正式に変換する。即ち、 Rule6.1 A AND B AND(C OR D)AND Gルール6.1に対する抽象構文ツリーは、図12に示される。AND排除モジュール804は、冗長AND節点1106を排除するタスクを行う。明らかなように、図1111のテストA節点1112およびテストB節点1114は、構文解析ツリーにおいて「上げ」られた。
【0096】しかし、AND排除モジュール804は必ずしも本発明によるRETEネットワークの構築に必要でないことに注意すべきである。しかし、冗長AND節点を排除しないと、より大きな従ってより非効率的なRETEネットワークをもたらす結果となることがある。
【0097】OR排除モジュール806は、AND排除モジュール804と同様に動作する。OR排除モジュール806の目標は、冗長OR節点を排除することである。
【0098】図13は、論理和モジュール604に対するアーキテクチャを示す。論理和モジュール604は、各ルールから論理和を排除する機能を有する。論理和モジュール604は、発見モジュール1302、シャフラ・モジュール1304、排除モジュール1306およびザッパー・モジュール1308を含む。
【0099】図14は、論理和モジュール604の動作を示す高レベルのブロック図である。動作ブロック1402により示されるように、論理和モジュール604は最初CPU202に対して各抽象構文ツリーを調べるように指令する。論理和モジュール604は更に、CPU202に対して抽象構文ツリーを調べるように指令すると、このCPUはOR節点を子節点として有するAND節点を見出すように働く。もしOR節点が見出されると、次の動作が行われる。
【0100】動作ブロック1404により示されるように、論理和モジュール604はCPU202に対してOR節点を抽象構文ツリーにおける最も高い述語レベルへ「上げる」ように指令する。この動作は、1つのルールが2つの個別のルールに分けることができるように行われる。この動作は、抽象構文ツリーを経て何回かの繰返しを生じる。一旦論理和モジュール604がORをその最も高い述語レベルへ移すと、これは次の動作を行う。
【0101】動作ブロック1406により示されるように、論理和モジュール604は、CPU202に対して2つのルールを生成することによりOR節点を排除するように指令する。換言すれば、論理和モジュール604は、論理和の各「足」毎に1つのルールを生成するよう働く。この動作は、分配則を用いることによって実行される。この動作は、ユーザにより最初に指定されたルールの意味論的意義に影響を及ぼすことはなく、これは単にORのいずれか一方の側がルールの突合わせの目的には充分であるという事実を反映する。
【0102】図13の論理和モジュール604のサブコンポーネントの各々に対するアーキテクチャは下記の如くである。
【0103】発見モジュール1302は、抽象構文ツリーの各々を調べてOR節点をその子節点として有するAND節点を見出す機能を有する。もし発見モジュール1302がこのようなOR節点を見出すならば、発見モジュール1302はシャフラ・モジュール1304へ制御を渡す。
【0104】シャフラ・モジュール1304は、OR節点が構文解析ツリーの先頭へ移るように、与えられた抽象構文ツリーの節点を認識する。シャフラ・モジュール1304は、ルールの意味論的意義に影響を及ぼすことなく抽象構文ツリーを認識する。
【0105】シンボル記法で表現された下記の例示ルールについて考察しよう。このルールは、ルール7.0として記される。即ち、Rule7.0 (C OR D)AND Eルール7.0に対する抽象構文ツリーが図15に示される。示されているのはプロダクション節点1502、1504および1506である。プロダクション節点1504が、例えばルール7.0と対応する。更に、2つの子節点、即ちOR節点1510およびテストE節点を持つAND節点1508が示される。OR節点1510は、その子節点としてテストC節点1514とテストD節点1516を有する。
【0106】分配則の使用により、ルール7.0を示すシンボル記法は下記の記法と等価であり、これはルール7.1として識別される。即ち、 Rule7.1 (C AND E)OR(D AND E)
明らかなように、ルール7.0の論理表現は、式(C AND E) OR (D AND E)に修正された。図16は、修正されたルール7.1に対する抽象構文ツリーを示す。図示の如く、OR節点1602(前は、図15のOR節点1510)が抽象構文ツリーの先頭にある。OR節点1602はこの時、ルールにおける中心演算子となる。ルールの意味論的意義を維持するため、シャフラ・モジュール1304はまた、元のOR節点1510の全ての兄弟(テストE節点1512)のコピーを、その各子節点即ちテスト節点1514および1516に付す。本質的に、前のOR節点1510の下のテスト節点1514および1516は、それぞれAND節点の下方の子節点となる。図16においては、このことは、AND節点1604の子節点として示されるテストC節点1514およびテストE節点1512により表わされる。同様に、テストD節点1516およびテストE節点1512は、AND節点1606の子節点となる。図16の抽象構文ツリーが図15の抽象構文ツリーと同じ意味論的意義を有することは明らかであろう。
【0107】この時、論理和モジュール604は、OR節点1602を排除するよう働く。この特徴は、排除モジュール1306により行われる。排除モジュール1306は、ORが存在するかどうかを判定するため、3回目にCPU202に抽象構文ツリーを調べるように指令する。OR節点が発見されると直ちに、排除モジュール1306が制御を実行ザッパー・モジュール1308へ渡す。
【0108】ザッパー・モジュール1308の構造は、実行されるとこれがCPU202に対してOR節点を排除するように、またOR節点の各子節点に対しては、新しいルール節点を生成するように指令する。このルール節点は、前のルール節点のクローンである。従って、ザッパー・モジュール1308は、OR節点の下方の各子節点をそれ自体の別個のルールへ変える。換言すれば、論理和の足の各々はこの時別個の抽象構文ツリーとして表わされる。
【0109】図17は、ザッパー・モジュール1308の上記の動作に対する抽象構文ツリーを示している。図示の如く、ザッパー・モジュール1308は2つのルールを生成する。このルールは、ルール節点1504およびルール節点1702をそれらの格納場所として有する。本質的に、ザッパー・モジュール1308は図16のAND節点1606およびその子節点を用いて、図17R>7のルール1702と対応する別個のルールを生成する。
【0110】上記の論議から判るように、論理和モジュール604は、論理和形で書かれたルールについて働いて、2つの別個のルールを生成する。否定モジュール602と同様に、論理和モジュール604は、コンピュータ・システム環境200がOR節点を含むルールを認識して処理することを許容する。本発明は、複雑なルールを用いて、これを2つの別個のルールに分割する。これは、ルールが適正なRETEネットワーク・フォーマットで表現することができるように行われる。また、OR節点が多くのレベルにおいて起生し得ることに注意すべきである。論理和モジュール604は、全てのOR節点が構文解析ツリーの先頭に押しやられるまでレベル単位に動作する。
【0111】この点において、本発明は、与えられたルールに対する抽象構文ツリーをAND節点およびテスト節点のみが存在するように変換する。NOT節点はないが、これはこれら節点が否定モジュール602により排除される故である。OR節点がないが、これはこれらが論理和モジュール604によって排除される故である。
【0112】次に、構成モジュール606が、ルールを構成してRETEネットワークに構築するタスクを行う。図18は、構成モジュール606の高レベルなアーキテクチャのブロック図を示す。構成モジュール606は、多重入力フロー・リスト・モジュール1802、alpha節点モジュール1804、ダングリングalphaルーチン1806、および多重入力節点モジュール1808を含む。
【0113】図19及び図20は、図18の構成モジュール606の高レベルの動作を示すブロック図である。
【0114】まず図19において、動作ブロック1902により示される如きRETEネットワークの構築における最初のステップは、各テスト節点におけるシンボル・リストを調べて、全ての純粋に負の多重入力テストに対するフロー・リスト・エントリを形成することを含む。動作ブロック1904により示される如く、RETEネットワークの構築の2番目のステップは、残る各テスト節点におけるシンボル・リストを調べて、他の全ての多重入力テストに対するフロー・リスト・エントリを形成することを含む。また図19により示される如く、動作ブロック1902および1904により記述される動作ステップは多重入力フロー・リスト・モジュール1802により行われる。
【0115】動作ブロック1906により示される如く、RETEネットワークの構築における次のステップは、テスト節点を再び調べて全ての単入力テスト(alphaテスト)に対するフロー・リスト・エントリおよびRETE節点を構成することを含む。以下に示し述べるように、ステップ1906はalpha節点モジュール1804により行われる。
【0116】次に図20において、動作ブロック1910により示される如きRETEネットワークの構築における次のステップは、正のフロー・リストを調べてダングリングalphaテストを再整列することを含む。動作ブロック1912により示されるように、RETEネットワークの構築における次のステップは、ダングリングalphaテストを右側のその隣接するテストへ接続することを含む。図20により示されるように、動作ブロック1910および1912により記述される2つのステップは、ダングリングalphaモジュール1806により行われる。
【0117】動作ブロック1914により示されるように、RETEネットワークの構築における次のステップは、多重入力テストを調べて、全ての純粋に負のテストに対する負のフロー・リストへbetaテストを取付けることを含む。このステップは、多重入力節点モジュール1808により行われる。
【0118】動作ブロック1916により示されるように、1つのルールに対してRETEネットワークを構築する際の最後のステップは、各テスト節点を逐次再び調べることである。
【0119】先に述べた動作は、与えられたテスト節点のシンボル・リストにおける変数が正に定量化され、負に定量化され、あるいは混成されるかに従って行われる。特に、もし検査中のテストが正に定量化されたテストであれば、BETAテストが構成される。もし検査中のテストが混成量化であるならば、BETA NOTテストが構成される。もし考察中のテストが単入力の負のテストであれば、純粋に負のテストが、AND NOT節点でRETEネットワークの正の側に接続される。上記のステップもまた、多重入力節点モジュール1808によって行われる。
【0120】この時行われる全ての接続は、フロー・リストの問題の変数の左側に現れる全ての変数もまた包含されるように構成される。このステップは、さもなければ、見過ごすおそれがあるbeta節点を接続する働きがある。
【0121】ここで、フロー・リストの一般的概念について論述する。フロー・リストは、本発明の重要な特徴である。フロー・リストは、RETEネットワークが構築されつつある時更新される作業用主メモリ204(図2R>2参照)の専用ブロックである。このフロー・リストはまた、与えられたルールでテストされるオブジェクトの完全なセットを含む。更に明らかになるように、フロー・リストは、緻密なRETEネットワークを構築する便利な方法を提供する。その理由は、与えられたテストと対応する全てのオブジェクトが相互に隣接することである。
【0122】望ましい実施態様において、本発明は2つのフロー・リスト、即ち正のフロー・リストと負のフロー・リストを使用する。この正のフロー・リストは、1つのルールでテストされる全ての特有な正で定量化されるオブジェクトの順序を付したリストである。負のフロー・リストは、1つのルールでテストされる全ての負で定量化された変数の順序を付したリストである。本文において明らかになるように、(1つは正の変数、1つは負の変数に対する)2つのフロー・リストを使用することで、RETEネットワークの構築を著しく容易にする。
【0123】構成モジュール606の各サブコンポーネント(多重入力フロー・リスト・モジュール1802、alpha節点モジュール1804、ダングリングalphaモジュール1806、多重入力節点モジュール1808)について、更に詳細に記述する。
【0124】動作において、また再び図18において、多重入力フロー・リスト・モジュール1802は、CPU202に対して各シンボル・リストを調べて、テストが2つ以上のオブジェクトを含むかどうかを判定するように指令する。多重入力フロー・リスト・モジュール1802は、このようなオブジェクトの検出と同時に、CPU202に対してオブジェクトをフロー・リストへ加えることを指令する。付加されるオブジェクトに加えて、多重入力フロー・リスト・モジュール1802は、各オブジェクトがルールに現れる相対順位をフロー・リストに記憶する。
【0125】多重入力フロー・リスト・モジュール1802は、一般に、2入力テストに含まれるこれらオブジェクトを見出すための手段を含む。多重入力フロー・リスト・モジュール1802は更に、これらのオブジェクトを正のフロー・リストまたは負のフロー・リストのいずれかに記憶するための手段を含む。
【0126】望ましい実施態様においては、多重入力フロー・リスト・モジュール1802は与えられるルールについて抽象構文ツリーを調べ、負に定量化された多重入力テストを最初に探す。多重入力フロー・リスト・モジュール1802は、次に他の全ての多重入力テストについて構文ツリーを再び調べる。
【0127】上記の諸操作を行うためのモジュールのアーキテクチャが図21に示される。図示の如く、多重入力フロー・リスト・モジュール1802は、純粋に負のフロー・リスト・モジュール2002、純粋に正のフロー・リスト・モジュール2004および混成量化モジュール2006を含む。
【0128】図22〜図23は、多重入力フロー・リスト・モジュール1802および図21のその対応する構造的サブコンポーネント、即ち、純粋に負のフロー・リスト・モジュール2002、純粋に正のフロー・リスト・モジュール2004および混成量化モジュール2006の動作を詳細に示す高レベルのフローチャートである。特に、図22は、純粋に負のフロー・リスト・モジュール2002の動作を示し、図23はモジュール2004および2006の動作を示す。
【0129】まず図22において、動作ブロック2102により示されるように、純粋に負のフロー・リスト・モジュール2002は最初に(各テスト毎にシンボル・リストを調べることにより)CPU202に対して与えられたルールに対する抽象構文ツリーにおける次のテストを調べるように指令する。各テストが1つのシンボル・リストを持つことを想起しよう。最初の実行サイクルにおいて、抽象構文ツリーにおける次のテストがユーザにより書かれた最初のテストとなる。判断ブロック2104により示されるように、純粋に負のフロー・リスト・モジュール2002はCPU202に対して考察中のテストが2つ以上の異なるオブジェクトを参照するかどうかを判定するように指令する。同じオブジェクトの2つの属性が同じであるかどうかをテストするテストが2つの異なるオブジェクトと見做されることがないことを理解すべきである。
【0130】もし唯1つのオブジェクトがテストにおいて参照されるならば、制御は判断ブロック2104により動作ブロック2102へ戻され(NOループ参照)、ここでCPU202が抽象構文ツリーにおける次のテストを調べるように指令される。しかし、もし2つ以上のオブジェクトの異なるオブジェクトが存在するならば、制御は判断ブロック2104により判断ブロック2106へ送られる。
【0131】判断ブロック2106により示されるように、純粋に負のフロー・リスト・モジュール2002がCPU202に対して、テストが純粋に負に定量化されるか、即ちテストにおいて参照される各オブジェクトが負に定量化されるかを判定するように指令する。もし全てのオブジェクトが負に定量化されるのでないならば、制御は動作ブロック2102へ戻り、ここでCPU202が抽象構文ツリーにおける次のテストを調べるように指令される。しかし、もしテストにおける各オブジェクトが負に定量化されるならば、判断ブロック2106が制御を動作ブロック2108へ送る。
【0132】動作ブロック2108により示されるように、純粋に負のフロー・リスト・モジュール2002がCPU202に対してオブジェクトを負のフロー・リストへ加えるように指令する。オブジェクトは、テスト内のそれらのシーケンス順で付加される。その後、制御は判断ブロック2110へ進む。
【0133】判断ブロック2110により示されるように、純粋に負のフロー・リスト・モジュール2002は抽象構文ツリーにおける最後のテスト節点かをテストする。もしこれが最後のテストでなければ、上記のサイクルが再開するとき、制御はNOループにより動作ブロック2102へ戻される。しかし、もし最後のテスト節点であるならば、制御は判断ブロック2110により図23R>3の動作ブロック2112へ(2150を介して)送られる。
【0134】動作ブロック2112により示されるように、純粋に正のフロー・リスト・モジュール2004がCPU202に対して、同じ抽象構文ツリーを再び調べるように指令する。このサイクルにおいては、抽象構文ツリーにおける次のテストは同様にユーザにより指定された最初のテストとなる。
【0135】判断ブロック2114により示されるように、純粋に正のフロー・リスト・モジュール2004がCPU202に対して考察中のテストが2つ以上の異なるオブジェクトを参照するかどうかを判定するように指令する。もし唯1つのオブジェクトがこのテストにおいて参照されるならば、制御は動作ブロック2112へ戻され、ここでCPU202が抽象構文ツリーの次のテストを調べるように指令される。しかし、もし2つ以上のオブジェクトの異なるオブジェクトが存在するならば、制御は判断ブロック2114により判断ブロック2116へ送られる。
【0136】判断ブロック2116により示されるように、純粋に正のフロー・リスト・モジュール2004がCPU202に対してテストが純粋に正に定量化されるかどうか、即ちテストにおいて参照された各オブジェクトが正に定量化されるかどうかを判定するように指令する。もしオブジェクトの全てが正に定量化されなければ、制御はNOループを介してテスト2126へ戻り、ここでCPU202はテストが混成量化を包含するかどうかを判定するように指令される。即ち、このCPUは、テストにおいて参照されたあるオブジェクトが他のオブジェクトが負に定量化される一方、正に定量化されるかどうかを判定する。もしそうであれば、制御は動作ブロック2128へ進む。
【0137】動作ブロック2128により示されるように、混成量化モジュール2006はCPU202に対してオブジェクトを負および正のフロー・リストへ加えるように指令する。オブジェクトは、テスト内に現れる順序で加えられる。その後、制御は判断ブロック2120へ進む。
【0138】もしテストが混成量化を含まなければ、制御はNOループを介してテスト2116へ戻り、ここでCPU202が抽象構文ツリーにおける次のテストを調べるように指令される。しかし、テストにおける各オブジェクトが正に定量化されるならば、制御は判断ブロック2116により動作ブロック2118へ送られる。
【0139】動作ブロック2118により示されるように、純粋に正のフロー・リスト・モジュール2004はCPU202に対してオブジェクトを正のフロー・リストへ加えるように指令する。オブジェクトは、テスト内のそのシーケンス順に加えられる。その後、制御は動作ブロック2118により判断ブロック2120へ送られる。
【0140】判断ブロック2120により示されるように、フロー・リスト・モジュール2004はCPU202に対して、問題のテストが抽象構文ツリーにおける最後のテストであるかどうかを判定するように指令する。もしこのテストが抽象構文ツリーにおける最後のテストでなければ、制御はNOループを介して動作ブロック2112へ戻される。しかし、もし問題のテストが抽象構文ツリーにおける最後のテストであるならば、制御は判断ブロック2120により動作ブロック2134へ送られ、ここで多重入力節点モジュール1808の動作が終了される。
【0141】多重入力フロー・リスト・モジュール1802が純粋に正、純粋に負、および混成の定量化テストを個々に処理することにより同様に実現するできることに注意すべきである。即ち、多重入力フロー・リスト・モジュール1802が、3つの個別のステップ、即ち、(1)純粋に正に定量化されるテスト、(2)純粋に負に定量化されるテスト、および(3)混成量化テストにおいて実現することができる。
【0142】しかし、望ましい実施態様においては、多重入力フロー・リスト・モジュールは2つの個々のステップ、即ち、(1)純粋に負に定量化されるテスト、および(2)他の全ての多重入力テストにおいて処理される。このような実施態様は、負に定量化されるテストの意味論的な完全性を更に充分に保護する。本実施態様はまた、テストのユーザの最初の順序がRETEネットワークの最終的な状態において考慮できる程度を最大限にするものである。
【0143】図24は、サンプル・ルール(図示せず)に対する抽象構文ツリー2200を示している。プロダクション節点2202およびAND節点2204が示される。更に、テスト節点2206、2208、2210、2212、2214および2216が示される。更にまた、それぞれが上記のテスト節点2206〜2216の各々に対応するシンボル・リスト2218、2219、2220、2222、2224および2226が示される。
【0144】シンボル・リスト2218は、テスト節点2206が負に定量化されるオブジェクトAについてのテストを有することを示す。シンボル・リスト2219は、テスト節点2208が正に定量化されるオブジェクトBについてのテストを有することを示す。シンボル・リスト2220は、テスト節点2210が純粋に正に定量化されるオブジェクトCおよびDについてのテストを有することを示す。
【0145】シンボル・リスト2222は、テスト節点2212がオブジェクトEおよびFについて参照するテストを有することを示す。シンボル・リスト2222は更に、オブジェクトFが負に定量化されたオブジェクトであることを示す。このように、テスト節点2212により示されるテストは混成量化テストである。
【0146】シンボル・リスト2224は、テスト節点2214がオブジェクトGおよびHを参照するテストを有することを示す。シンボル・リスト2224は更に、オブジェクトGおよびHが負に定量化されることを示す。このように、テスト節点2214により示されるテストは、純粋に負に定量化される。シンボル・リスト2226は、テスト節点2216が正に定量化されるオブジェクトIについてのテストを有することを示す。
【0147】本発明にとってRETEネットワークを構築するために別の情報が不要であることに注意すべきである。
【0148】次に、構成モジュール606(図6)の動作について、図22の抽象構文ツリー(ルール)に対するRETEネットワークの構成を使用して更に説明する。
【0149】再び図24において、また先に述べたように、構成モジュール606の最初の動作は、多重入力フロー・リスト・モジュール1802(図18)の動作のそれである。多重入力フロー・リスト・モジュール1802の動作については、図22〜図23に関して詳細に述べた。構成モジュール606の第2の動作は、alpha節点モジュール1804のそれである。第3の動作は、ダングリングalphaモジュール1806のそれである。構成モジュール606の最後の動作は、多重入力節点モジュール1808のそれである。構成モジュール606のこれらサブモジュール1802、1804、1806および1808の各々について、図24の抽象構文ツリーに対するRETEネットワークを構築する環境において説明する。
【0150】図25は、ブロック図フォーマットにおいて、正のフロー・リスト・ブロック2314および負のフロー・リスト・ブロック2316を示す。正のフロー・リスト・ブロック2314および負のフロー・リスト・ブロック2316は、メモリ装置204(図2)内の記憶場所である。
【0151】図22に関して述べたように、多重入力フロー・リスト・モジュール1802の負のフロー・リスト・モジュール2102は、純粋に負のオブジェクトに対してフロー・リスト・エントリを最初に構成する。図2424に示されるルールにおいては、シンボル・リスト2224のオブジェクトGおよびHが多重入力テストの一部である純粋に負に定量化されたオブジェクトを示す。このように、シンボル・リスト2224のオブジェクトGおよびHは、フロー・リスト・エントリ2302および2304としてそれぞれ負のフロー・リスト・ブロック2316へ挿入される。他の純粋に負の2つの入力オブジェクトは存在しない。
【0152】図23に関して述べたように、純粋に正のモジュール2004はその後、CPU202に対して図2424の全ての多重入力テストを調べるように指令する。純粋に正のフロー・リスト・モジュール2004は、純粋に正のテストからのオブジェクトを正のフロー・リスト・ブロック2314へ加える。図24に示されるように、シンボル・リスト2220のオブジェクトは、純粋に正の2つのオブジェクトであり、このため、フロー・リスト・エントリ2306および2308として正のフロー・リスト・ブロック2314にそれぞれ挿入される。図24のシンボル・リストには、他の純粋に正の2つの入力オブジェクトは存在しない。
【0153】また図23に関して述べたように、混成量化モジュール2006がCPU202に対して混成量化テストの負のオブジェクトを負のフロー・リスト・ブロック2316へ加えるように指令する。シンボル・リスト2222のオブジェクトFは、混成量化テストの負のオブジェクトであり、このため負のフロー・リスト・ブロック2316にフローリスト・エントリ点2310として挿入される。他の負の混成量化オブジェクトは存在しない。
【0154】その後、混成量化モジュール2006が、混成量化テストの正のオブジェクトを正のフロー・リスト・ブロック2314へ加える。図24に示されるように、シンボル・リスト2222のオブジェクトEは、混成量化テストと対応する正の変数である。シンボル・リスト2222のオブジェクトEは、フローリスト・エントリ2312として正のフロー・リスト・ブロック2314に挿入される。多重入力フロー・リスト・モジュール1802の動作のみが、比較的厳密な最適化されたRETEネットワークを保証する。ユーザにより入力される多重入力テスト(betaテスト)の順序がRETEネットワークの相対的な状態を決定することを理解すべきである。従って、本発明は、多重入力テストに関するユーザの順序を考慮する。
【0155】次に、alpha節点モジュール1804の動作について正のフロー・リスト・ブロック2314および負のフロー・リスト・ブロック2316を修正する環境において記述する。図26は、図25の正のフロー・リスト・ブロック2314および負のフロー・リスト・ブロック2316の修正を示している。
【0156】図26において、alpha節点モジュール1804が多重入力フロー・リスト・モジュール1802と同様に働く。多重入力フロー・リスト・モジュール1802と同様に、alpha節点モジュール1804がCPU202に対して図24の抽象構文ツリーを調べてテスト節点を探すように指令する。
【0157】しかし、alpha節点モジュール1804は、多重入力テストとは対照的に単入力テストにおいて使用されるオブジェクトを処理する。換言すれば、alpha節点モジュール1804は、1つのオブジェクトを持つテスト節点を見出す。これらのテスト節点が最終的にalphaテストとなる。
【0158】もし既に多重入力フロー・リスト・モジュール1802により構成されていなかったならば、これらの一入力テストに対するフローリスト・エントリは正のフロー・リスト・ブロック2314および(または)負のフロー・リスト・ブロック2316に加えられる(同じオブジェクトが1入力テストおよび2入力テストの双方にあり得、これが2入力テストの一部でもあるため、このオブジェクトに対するalphaテストは非ダングリングalphaテストと呼ばれることに注意)。従って、alpha節点モジュール1804は図24のシンボル・リストを調べて、負に定量化されるかどうかに拘わらず、フローリスト・エントリをこれが見出す順序で構成する。
【0159】多重入力フロー・リスト・モジュール1802とは対照的に、1つの入力オブジェクトをフロー・リストに入力する時、alpha節点モジュール1804はCPU202に対してRETE alpha節点を即時構成するように指令する。これは、本発明により実際に構成された最初のRETE節点である。
【0160】もし同じオブジェクトが多くの1入力テストを有するならば、多重alpha節点は一方が他方の下に接続される。alpha節点が最初に構成されるが、これは関連する任意のalpha節点の接続前にbeta節点を接続することが非効率的であるためである。
【0161】図26に示されるように、alpha節点モジュール1804は、正のフロー・リスト・ブロック2314および負のフロー・リスト・ブロック2316を「更新」している。図示の如く、図2のシンボル・リスト2218の負に定量化されたオブジェクトAが、負のフロー・リスト・ブロック2316におけるフローリスト・エントリ2402として加えられている。同様に、シンボル・リスト2208および2216のオブジェクトBおよびIは、それぞれ正のフロー・リスト・ブロック2314におけるフローリスト・エントリ点2404および2406として加えられている。図26に更に示されるように、alpha節点モジュール1804はまたalpha節点2408、2410、2412をそれぞれ構成している。
【0162】前記の節点は、RETEネットワークに対して構成された最初の節点である。本発明がRETEネットワークを正のフロー・リスト・ブロック2314および負のフロー・リスト・ブロック2316から構成することを理解すべきである。このようなデータ構造が、RETEネットワークの構築の便利な方法を提供する。
【0163】この点において、本発明の多重入力フロー・リスト・モジュール1802およびalpha節点モジュール1804が、与えられたルールにおいて使用される各オブジェクトを識別している。更に、多重入力フロー・リスト・モジュール1802およびalpha節点モジュール1804が、これらのオブジェクトをフローリスト・エントリ点として正または負のフロー・リストへ入力した。
【0164】次に、図18のダングリングalphaモジュール1806の動作について、図26の正のフロー・リスト2314および負のフロー・リスト2316の修正の環境において論議する。
【0165】一般に、ダングリングalphaモジュール1806が、ダングリングalpha節点がユーザにより生成された順序で配置されるようにCPU202に対して正のフロー・リスト・ブロック2314を並替えることを指令する。ダングリングalphaテストは、要素間テストにより使用されないオブジェクトについての要素内テストである。換言すれば、これはこのオブジェクトが多重入力テストにおいて参照されない場合のオブジェクトについての単一テストである。本発明はまた、ユーザにより全ての以降のテストを禁止するように指定された手段としてダングリングalphaテストとも呼ばれる。換言すれば、本発明は、ユーザが専らダングリングalphaテストの設置によりRETEネットワークのサブセクションを選択的に使用可能/使用不能にすることを許容する。ダングリングalphaテストは、可能な限り優先権を与えられる。
【0166】図27に示されるように、ダングリングalphaモジュール1806は、alpha並替えモジュール2502およびalpha接続モジュール2504を含む。alpha並替えモジュール2502は、ユーザが最初に置いた場所へダングリングalphaテストが置替えられるように、正のフロー・リスト2314を修正する。しかし、alpha並替えモジュール2502が正のフロー・リスト・ブロック2314のエントリのみを修正することに注意すべきである。換言すれば、alpha並替えモジュール2502は負のフローリスト・エントリは修正しない。その理由は、負に定量化されたテストの意味論的意義を保存することである。
【0167】図28に示されるように、alpha並替えモジュール2502の動作が、図26の正のフロー・リスト・ブロック2314を修正した。図28から判るように、シンボル・リスト2219のオブジェクトBがフローリスト・エントリ点2404から2306へ移されている。シンボル・リスト2226のオブジェクトIは、そのテスト場所(番号6)がこれが既にその適正な場所にあることを示す故に、置替えられることがない。
【0168】alpha並替えモジュール2502は、ここで述べるアルゴリズムを用いて上記の再構成を実施する。このアルゴリズムにおいては、alpha並替えモジュール2502は各フローリスト・エントリと関連する番号を参照する。抽象構文ツリーにより最初に構文解析モジュール302がルール全体にオブジェクト場所を格納することを想起されたい。alpha並替えモジュール2502は、左側から始めて各フローリスト・エントリ・テスト番号を持つダングリングalphaテストを比較してフロー・リストにわたって反復する。この反復がダングリングalpha節点番号が左側のそれより大きくかつ右側のそれより小さいことを判定する時、CPU202はこの場所にダングリングalphaを挿入することを知る。次いで、全ての以降の変数の場所へ当たる。
【0169】次に、図27のalpha接続モジュール2504について論述する。alpha接続モジュール2504は、CPU202に対してダングリングalphaを隣接するフローリスト・エントリ点と接続するように指令する。この操作はまた、図28に示される。図示の如く、ダングリングalpha節点2610は、AND節点2606によりフローリスト・エントリ点2306と接続されている。これは、ダングリングalpha節点2610がRETEネットワークの残りと接続されるように行われる。フローリスト・エントリ点2406(オブジェクトI)およびその関連するalpha節点2412がAND節点と接続されなかったことに注意すべきである。この理由は、フローリスト・エントリ2406が正のフロー・リスト・ブロック2314における最も右に離れたエントリであるためである。図には示さないが、2つの隣接するダングリングalpha節点が相互に接続され、次いで次の右側に隣接するフローリスト・エントリと接続されることを理解すべきである。
【0170】ダングリングalphaモジュール1806は本発明の顕著な特徴であり、これがパワーユーザがRETEネットワークのトポロジーに対する制御を維持することを可能にする。
【0171】一般に、BETA節点およびBETA NOT節点がRETEネットワークのトポロジーを制御する。多重入力オブジェクトに対するフロー・リストを最初に、次いでその中にダングリングalphaを再び挿入する理由は、非ダングリングalphaテストが与えられたルールに存在し得る故である。非ダングリングalphaはBETA節点により駆動されるが、これはこれら節点が関連する2入力テストに対する入力として要求される故である。先に述べたように、本発明は、緊密なRETEネットワークを取得するため全てのBETA参照オブジェクトを一体化する。しかし、このような特徴に打ち勝つため、本発明は、ダングリングalphaテストのユーザのシーケンスを考慮する。
【0172】次に構成モジュール606の多重入力節点モジュール1808について詳細に論述する。先に述べたように、多重入力節点モジュール1808の動作はRETEネットワークの構築における最終的な動作を表わす。多重入力節点モジュール1808の動作は2つのステップからなる。
【0173】第1のステップは、図20の動作ブロック1914において前に示したように、シンボル・リストを逐次調べて純粋に負のBETAテスト(2つ以上のオブジェクトを含むテスト)のみを見出すことである。もし純粋に負のBETAテストが見出されると、負のフロー・リストについてテストされたオブジェクトに対してBETAテストが構成される。
【0174】第2のステップは、前に図19の動作ブロック1904に示したように、(純粋に負の2入力テストのみが問題となる第1のステップとは対照的に)シンボル・リストにおける各テストの順次の再検査のステップである。シンボル・リストに与えられたテストが正に定量化された、負に定量化された、あるいは混成量化されたかに従って、ある動作が行われる。
【0175】一般に、もし検査中のテストが正に定量化された多重入力テストであれば、BETAテストが構成される。もし検査中のテストが混成量化されたテストであれば、BETA NOTテストが構成される。もし問題のテストが純粋に負のテスト(即ち、負のフロー・リストから外されるalpha節点あるいはbeta節点)であれば、純粋に負のテストがAND NOT節点でRETEネットワークの正の側に接続される。
【0176】多重入力節点モジュール1808の上記の動作は、図24に示したルールに対するRETEネットワークの継続的構築を参照すれば更によく理解される。図28において、ダングリングalphaモジュール1806がユーザにより指定される如きその元の場所に対するダングリングalphaテスト(オブジェクトBのテスト)を認識して、これをAND節点(AND節点2606)でRETEネットワークに接続したことを想起されたい。
【0177】先に述べたように、多重入力節点モジュール1808の動作における最初のステップは、純粋に負の2入力テスト(2つ以上のオブジェクトに対するテスト)に対するBETAテストの構成のステップである。動作においては、多重入力節点モジュール1808は、CPU202に対して図24のシンボル・リストを調べて全ての純粋に負の2入力テストを見出すように指令する。図25に示した事例においては、CPU202が唯1つのこのようなテスト、即ち、オブジェクトGおよびHを参照するテスト2214が存在することを判定する。図29から判るように、多重入力節点モジュール1808は、CPU202に対してBETAテスト節点2702を介してオブジェクトGおよびHを接続するように指令する。他の純粋に負の2入力テストは存在しない。このため、上記の操作後のRETEネットワークの状態は、図29に示される如くである。
【0178】次に、多重入力節点モジュール1808の第2のステップについて、図24のルールに対するRETEネットワークの構築に関して記述する。先に述べたように、多重入力節点モジュール1808は、CPU202に対して各テストを再び調べて、テストの種類に応じてこのテストについてある動作を行うように指令する。
【0179】一例において、図24のシンボル・リストを逐次調べることは、テスト2206(オブジェクトAに対するテスト)が検査中の最初のテストであることを示す。テスト2206は、オブジェクトAに対する純粋に負のテストである。図30に示されるように、この種のテストに応答して、多重入力節点モジュール1808はCPU202に対してオブジェクトA(負のフロー・リストに見出される)をAND NOT節点で正のフロー・リスト・ブロック2314に接続するように指令する。
【0180】ルールにおける最初のテスト(テスト2206)の動作を完了した後、多重入力節点モジュール1808はCPUに対してこのルールの次のテストを調べるように指令する。図24のルールの次のテストは、テスト2208のテスト(オブジェクトBに対するテスト)である。テスト2208を調べると、テスト2208がオブジェクトBに対する純粋に正の1入力テストであることが示される。このような場合、多重入力節点モジュール1808は通常、CPU202に対してオブジェクトBをAND節点を介して(全てのalpha節点が前にalpha節点モジュール1804により構成されたことを想起されたい)RETEネットワークと接続するように指令する。しかし、本例においては、オブジェクトに対するalphaテストが既に節点2606を介してRETEネットワークに接続されている。従って、テスト2208に対して動作を行う必要はない。
【0181】その後、多重入力節点モジュール1808はもう一度CPU202に対して図24のルールにおける次のテストを調べるように指令する。図24のルールにおけるこの次のテストは、テスト2210(オブジェクトCおよびDに対するテスト)のそれである。テスト2210を調べると、テスト2210がオブジェクトCおよびDに対する純粋に正の2入力テストであることが示される。図31に示されるように、この種のテストに応答して、多重入力節点モジュール1808はCPU202に対してオブジェクトCおよびDをBETAテスト節点2902を介して接続するように指令する。
【0182】その後、多重入力節点モジュール1808はもう一度CPU202に対して図24のルールにおける次のテストを調べるように指令する。図24のルールにおける次のテストは、テスト2212(オブジェクトEおよびFに対するテスト)のそれである。テスト2212を調べると、テスト2212は、オブジェクトEが正に定量化され、オブジェクトFが負に定量化されたものである混成量化されたテストであることが示される。
【0183】図32に示されるように、この種のテストに応答して、多重入力節点モジュール1808はCPU202に対してオブジェクトEおよびFをBETA NOT節点3004で接続するように指令する。しかし、図24のルールにおいてオブジェクトEが最初にRETEネットワークと接続されねばならないことを知るべきである。従って、この種の状況においては、多重入力節点モジュール1808は最初にCPU202に対してオブジェクトEをAND節点3002によりRETEネットワークに接続することを指令する。一般に、多重入力節点モジュール1808は最初にフロー・リストにおける最も左側のオブジェクトが実際に問題となるテストを構成する前にRETEネットワークに接続されるかどうかを判定する。
【0184】その後、多重入力節点モジュール1808はもう一度CPU202に対して図24のルールにおける次のテストを調べるように指令する。図24のルールにおける次のテストは、テスト2214(オブジェクトGおよびHに対するテスト)のそれである。テスト2214を調べると、テスト2214が純粋に負に定量化された2入力テストであることが示される。図33に示されるように、この種のテストに応答して、多重入力節点モジュール1808はCPU202に対してBETAテスト節点2702をAND NOT節点3102を介してRETEネットワークに接続するように指令する。オブジェクトGおよびHに対するBETAテストが多重入力節点モジュール1808の最初の動作により構成される最初のテストであったことを想起されたい。多重入力節点モジュール1808の第2の動作においては、CPU202に対してBETAテスト2702をRETEネットワークの残部に接続するように指令するだけである。
【0185】その後、多重入力節点モジュール1808はもう一度CPU202に対してルールにおける次のテストを調べるように指令する。図24のルールにおける次のテストは、テスト2216(オブジェクトIに対する正に定量化されたテスト)である。テスト2216はまた、図24のルールにおける最後のテストでもある。テスト2214を調べると、テスト2214はオブジェクトIに対する純粋に正の1入力テストであることが示される。この場合、多重入力節点モジュール1808はCPU202に対してオブジェクトBをAND節点3202を介して接続するように指令する(alpha節点2410が前にalpha節点モジュール1804により構成されたことを想起されたい)。
【0186】その後、多重入力節点モジュール1808はもう一度CPU202に対して図24のルールにおける次の入力テストを調べるように指令する。しかし、この時CPU202は、多重入力節点モジュール1808に対して、これ以上のテストがルールに存在しないことを指令する。これに応答して、多重入力節点モジュール1808はCPU202に対してAND節点3202をプロダクション節点2202に接続するよう指令する。
【0187】プロダクション節点2202が図24のプロダクション節点2202であることに注意すべきである。換言すれば、RETEネットワークは、プロダクション節点2202を「放す」のである。更に、先に述べたように、プロダクション節点2202は、図24のルールに関する全ての情報に対する中心の場所である。この種のデータ構造は、与えられたルールに対するRETEネットワークを構成して構築する便利な方法である。
【0188】次に、暗黙条件モジュール608について論述する。暗黙条件モジュール608は、あるルールのRHSの全ての暗黙条件が知識ベースに実際に存在することを保証するようにルール・セットに対して作用する。暗黙条件モジュール608は、事物が未決定の点である衝突するセットに落込むことを許さない。
【0189】図36に示されるように、暗黙条件モジュール608は、オブジェクト・リスト・モジュール3402と、検証モジュール3404と、挿入モジュール3406とを含む。
【0190】一般に、暗黙条件モジュール608は、各ルールについて動作してあるルールのRHSの全ての暗黙条件が実際に知識ベースに存在することを保証する。
【0191】検証モジュール3404は、CPU202にオブジェクト・リストについて最初に反復してオブジェクトがルールのLHSに存在するかどうかを判定するように指令する。もしオブジェクトがルールのLHSに存在しなければ、検証モジュール3404はCPU202に対してRHSにおけるオブジェクトの存在がオブジェクトの新しい生成によるものかどうかを判定するように指令する。オブジェクトの新しい生成は、ルールのLHSの暗黙条件ではあり得ないことを意味する。
【0193】もし暗黙条件が見出されると、挿入モジュール3406が実行されて、CPU202に対してオブジェクトをルールに対するRETEネットワークに挿入することを指令する。従って、挿入モジュール3406は、暗黙条件をルールのLHSに加える。
【0194】本発明の詳細な記述におけるこれまでの論議は、与えられたルールに対するRETEネットワークの処理および構築(各ルール毎に暗黙条件をRETEネットワークに加えることを含む)と関連するものであった。
【0195】もし多くのルールが存在するものとすれば、多くの個々のRETEネットワークが構築される。
【0196】発明の背景の章に論述されたように、RETEネットワークの1つの重要な特徴は、ルール間に共通のテスト節点を共用することである。この特徴は、時に最適化RETEネットワークと呼ばれる。従来のRETEネットワーク構築システムにおいては、RETEネットワークの構築に際して最適化ステップは統合化ステップである。換言すれば、ルールが構成される時最適化が生起する。従来のRETE構築システムにおいては、RETEネットワークは最初に1つのルールに対して構築される。その後、次のルールに対するRETEネットワークが構築される時、コンパイラは既に前に構成されたテストを構成することはない。これは、最適化が実際のRETEネットワーク構成に組込まれる場合である。
【0197】対照的に、本発明の各ルールは、それ自体の個々のRETEネットワークにより構築される。従って、本発明における最適化は、個々のステップが生起する時で、結果冗長テストが構成された時に生起する。本文に述べたように、個々のRETEネットワークが各ルール毎に構築された後に最適化が生起する必要はない。本発明は、最適化を構成モジュール606と統合化できるようにするものである。
【0198】次に、本発明の最適化モジュール610について論述する。
【0199】従来のRETEネットワーク・システムにおいては、与えられたRETEテスト・モードが多数のRETE節点の直系の親(即ち、右側入力又は左側)として供される。このため、1つのルール内あるいは幾つかのルールにわたり複数回現れる同じ条件は、RETEネットワーク内で一回だけ表現されるに過ぎない。このようなRETE節点を数多く再使用することが最適化とされる。最適化は、処理速度およびメモリの利用を著しく改善することができる。
【0200】本実施例においては、RETEネットワークは最適化により、あるいはこれによらずに構築することができる。最適化によらないRETEネットワークの構築の利点は、結果として得られるRETEネットワークがデバッグおよび理解が容易であることである。このため、ユーザが最初にルールを構築してデバッグし、次いでRETEネットワークをより良好な性能となるように「調整」することを可能にする。
【0201】本例においては、最適化は各ルート節点を調べることにより達成される。これは、与えられたデータ・オブジェクトのタイプを含む全てのRETEネットワークのテスト節点を見出すために行われる。このプロセスは、可能な統合化のための全ての候補となるRETE節点を識別する。
【0202】この統合化は次の2つの形態を取る。即ち、1.テストの組合わせ2.入力の共有テストは下記の如く組合わされる。即ち、1.変数名を共通にすること:与えられたデータ・オブジェクトのタイプに関する変数を含む全てのテストが、関連する変数が共通名を持つように変更される。
【0203】2.要素内テストを組合わせること:連続するalpha節点が合成されたテストを持つ1つのalpha節点に「纏められる」(例えば、2つのalphaテスト、x.color=’Blue’and x.wheel=4,が色および車輪の双方をテストする1つのalphaテストとなる)。
【0204】3.要素間テストを組合わせること:beta節点の如き連続的な多重入力テスト節点が、合成されたテストを持つ1つのテスト節点に「纏められる」。このプロセスは、alphaテストに用いられるものと非常によく似ている。
【0205】入力は下記の如く共有される:1.同じRETEテスト節点が識別されること2.見出された各セットの同じテスト節点毎に、1つの節点が保持され、他は削除される。RETEネットワークにおけるリンクが、削除された節点と接続された節点がこの時残りの節点と接続されるように変更される。
【図面の簡単な説明】
【図1】本発明の動作を示す高レベルのブロック図である。
【図2】本発明のアーキテクチャ環境200を示す高レベルのブロック図である。
【図3】本発明のRETEネットワーク構築モジュール206のアーキテクチャを示す高レベルのブロック図である。
【図4】本発明の構文解析モジュール302の動作を示すブロック図である。
【図5】本発明の与えられたルールに対する構文解析ツリー500の典型的なデータ構造を示すブロック図である。
【図6】本発明の変換モジュール304のアーキテクチャを示すブロック図である。
【図7】本発明の変換モジュール304の動作を示すブロック図である。
【図8】本発明の否定モジュール602のアーキテクチャを示すブロック図である。
【図9】否定されたルールを示す構文解析ツリー900に対するデータ構造を示すブロック図である。
【図10】否定を排除するように本発明の下方否定モジュール902により修飾される図9の構文解析ツリー900に対するデータ構造を示すブロック図である。
【図11】冗長AND節点を有するルールを表わす構文解析ツリー1100に対するデータ構造を示すブロック図である。
【図12】冗長AND節点を除去するため本発明のAND排除モジュール804により修正される図11の構文解析ツリー1100に対するデータ構造を示すブロック図である。
【図13】本発明の論理和モジュール604のアーキテクチャを示すブロック図である。
【図14】論理和モジュール604の動作を示すブロック図である。
【図15】内部に論理和条件を持つルールを示す構文解析ツリー1500に対するデータ構造を示すブロック図である。
【図16】本発明のシャフラ・モジュール1304が如何にして構文解析ツリーの最も高い動作レベルへ論理和をプッシュするかを示すように修正された図15の構文解析ツリー1500に対するデータ構造を示すブロック図である。
【図17】論理和を排除するように、2つの構文解析ツリーに本発明の排除モジュール1306により修正される図16の構文解析ツリーに対するデータ構造を示すブロック図である。
【図18】本発明の構成モジュール606のアーキテクチャを示すブロック図である。
【図19】本発明の構成モジュール606の動作を示すブロック図である。
【図20】本発明の構成モジュール606の動作を示す、図19の続きのブロック図である。
【図21】本発明の多重入力フロー・リスト・モジュール1802のアーキテクチャを示すブロック図である。
【図22】本発明の多重入力フロー・リスト・モジュール1802の動作を示すフローチャートである。
【図23】本発明の多重入力フロー・リスト・モジュール1802の動作を示す、図22の続きのフローチャートである。
【図24】事例のルールに対する抽象構文ツリーを示す図である。
【図25】図22の事例に対して多重入力フロー・リスト・モジュール1802により構成されるフローリストの内容を示す図である。
【図26】図22の事例に対するalpha節点モジュール1804により構成されるフローリストの内容を示す図である。
【図27】alpha再整列ルーチン1806のアーキテクチャを示す図である。(図28乃至図35は、図24R>4における事例の抽象構文ツリーに対するRETEネットワーク構造のシーケンスを示す。)
【図28】alpha再整列ルーチン1806により生じたalpha節点接続の結果を示す図である。
【図29】ステップ1914における多重入力節点モジュール1808により処理される第1の否定テストの結果を示す図である。
【図30】多重入力ハンドラ・モジュール1916により処理される第2のテストの結果を示す図である。
【図31】多重入力ハンドラ・モジュール1916の連続結果を示す図である。
【図32】多重入力ハンドラ・モジュール1916の連続結果を示す図である。
【図33】多重入力ハンドラ・モジュール1916の連続結果を示す図である。
【図34】多重入力ハンドラ・モジュール1916の連続結果を示す図である。
【図35】多重入力ハンドラ・モジュール1916の連続結果を示す図である。
【図36】RETEネットワーク暗黙条件モジュール608のアーキテクチャを示す図である。
【符号の説明】
101 動作ブロック 102 動作ブロック
200 コンピュータ環境 202 CPU
204 メモリ装置
206 RETEネットワーク・モジュール
208 I/Oデバイス 212 バッファ
214 ホスト・バス 216 システム・バス
302 構文解析モジュール 304 変換モジュール
402 動作ブロック 404 変換モジュール
500 構文解析ツリー 502 プロダクション節点
504 プロダクション節点 508 AND節点
510 テストA節点 512 テストB節点
514 テストC節点 516 テストD節点
518 数式節点 524 シンボル・リスト節点
602 否定モジュール 604 論理和モジュール
606 構成モジュール 608 暗黙条件モジュール
610 最適化モジュール 704 動作ブロック
706 動作ブロック 708 動作ブロック
710 動作ブロック 712 動作ブロック
802 否定モジュール 804 AND排除モジュール
806 OR排除モジュール 900 構文解析ツリー
904 NOT節点 906 AND節点
908 テストA節点 910 OR節点
912 NOT節点 918 テストD節点
1002 OR節点 1004 NOTテストA節点
1006 AND節点 1008 正規テストD節点
1100 構文解析ツリー 1106 冗長AND節点
1112 テストA節点 1114 テストB節点
1302 発見モジュール 1304 シャフラ・モジュール
1306 排除モジュール 1308 ザッパー・モジュール
1402 動作ブロック 1404 動作ブロック
1406 動作ブロック 1500 構文解析ツリー
1502 プロダクション節点 1504 プロダクション節点
1506 プロダクション節点 1508 AND節点
1510 OR節点 1512 テストE節点
1514 テストC節点 1516 テストD節点
1602 OR節点 1604 AND節点
1606 AND節点 1702 ルール節点
1802 多重入力フロー・リスト・モジュール
1804 alpha節点モジュール
1806 ダングリングalphaモジュール
1808 多重入力節点モジュール 1902 動作ブロック
1904 動作ブロック 1906 動作ブロック
1910 動作ブロック 1912 動作ブロック
1914 動作ブロック 1916 多重入力節点ハンドラ
2002 純粋に負のフロー・リスト・モジュール
2004 純粋に正のフロー・リスト・モジュール
2006 混成量化モジュール
2102 負のフロー・リスト・モジュール
2108 動作ブロック 2112 動作ブロック
2118 動作ブロック 2128 動作ブロック
2202 プロダクション節点 2206 テスト節点
2208 テスト節点 2210 テスト節点
2212 テスト節点 2214 テスト節点
2216 シンボル・リスト 2219 シンボル・リスト
2222 シンボル・リスト 2224 シンボル・リスト
2226 シンボル・リスト 2304 フロー・リスト・エントリ
2306 フロー・リスト・エントリ 2308 フロー・リスト・エントリ
2310 フローリスト・エントリ点
2314 正のフロー・リスト・ブロック
2316 負のフロー・リスト・ブロック2404 フローリスト・エントリ点
2406 フローリスト・エントリ点 2408 alpha節点
2410 alpha節点 2412 alpha節点
2502 alpha並替えモジュール 2504 alpha接続モジュール
2610 ダングリングalpha節点 2702 BETAテスト節点
2902 BETAテスト節点 3002 AND節点
3102 AND NOT節点 3202 AND節点
3402 オブジェクト・リスト・モジュール
3404 検証モジュール 3406 挿入モジュール

【特許請求の範囲】
【請求項1】1組の入力されたルールを有効なリーティ(RETE)ネットワークに組織化する、リーティ・ネットワーク組織化方法であって、前記ルールの各々は、論理積、否定、論理和形式を用いて任意に特定され得るテスト条件を有しており、(a)各ルールに対してデータ構造を構築し、記憶装置内に前記データ構造を格納するステップと、(b)前記データ構造を、論理積形式であり且つ他のデータ構造に変形するステップと、(c)変形された前記データ構造から、用いられているオブジェクトを抽出し、フロー・リストを作成し、当該フロー・リストに、全ての異なる型の前記オブジェクトを格納するステップと、(d)前記異なる型のオブジェクトの各々に対して、前記フロー・リスト上に前記リーティ・ネットワークを構成するテスト・ノードを構築するステップとを含むリーティ・ネットワーク組織化方法。
【請求項2】各ルールに対してデータ構造を構築する前記ステップ(請求項1(a))が、前記ルールの各テスト条件についてのシンボル・リストを生成し且つ格納するステップを含み、前記シンボル・マークが、与えられたテストに対する全ての用いられているオブジェクトを含んでいることを特徴とする請求項1記載のリーティ・ネットワーク組織化方法。
【請求項3】前記変形ステップ(請求項1(b))が、(a)各ルールに対する前記データ構造を検査し、前記ルールから否定形式を除去するステップと、(b)各ルールに対する前記データ構造を検査し、前記ルールから論理和形式を除去するステップとを含む請求項1記載のリーティ・ネットワーク組織化方法。
【請求項4】フロー・リストを作成する前記ステップ(請求項1(c))が、正のフロー・リスト及び負のフロー・リストを作成するステップを含む請求項1記載のリーティ・ネットワーク組織化方法。
【請求項5】フロー・リストを作成する前記ステップ(請求項1(c))が、(a)純粋に負の多重入力テストに含まれるオブジェクトを負の前記フロー・リストに付加するステップと、(b)純粋に正の多重入力テストに含まれるオブジェクトを正の前記フロー・リストに付加するステップと、(c)混成量化多重入力テストに含まれるオブジェクトを、その極性により正又は負の前記フロー・リストに付加するステップと、(d)単入力テストに含まれるオブジェクト及びアルファ(alpha)節点を、その極性により正又は負の前記フロー・リストに付加するステップとをさらに含む請求項4記載のリーティ・ネットワーク組織化方法。
【請求項6】前記異なる型のオブジェクトの各々に対し、前記フロー・リスト上に少なくとも1のテスト・ノードを構築する前記ステップ(請求項1(d))が、(a)前記ルールの各テスト条件を検査するステップと、(b)最初に、純粋に負に定量化されたテスト条件に対し、ベータ(beta)節点を作成するステップと、(c)テスト条件が純粋に正又は混成で定量化されていることに依存して、ベータ(beta)節点又はベータ否定(beta not)節点を作成し、純粋に負のベータ(beta)節点をアンド否定(and not)節点で前記フロー・リストに接続するステップとを含む請求項1記載のリーティ・ネットワーク組織化方法。
【請求項7】暗黙条件を前記ルールに付加するステップを含む請求項1記載のリーティ・ネットワーク組織化方法。
【請求項8】暗黙条件を前記ルールに付加する前記ステップが、(a)前記ルールの右側を検査して、オブジェクトについての特有のリストを作成するステップと、(b)前記ルールの左側を検査して、前記ルールの右側にあるルールが前記ルールの左側にあるかどうかを判定するステップと、(c)前記ルールの左側にないオブジェクトを前記ルールの開始により生成すべきか判定するステップと、(d)前記オブジェクトが前記ルールの開始により生成されない場合、前記ルールの左側に前記オブジェクトを付加するステップとを含む請求項7記載のリーティ・ネットワーク組織化方法。

【図1】
image rotate


【図3】
image rotate


【図2】
image rotate


【図4】
image rotate


【図6】
image rotate


【図5】
image rotate


【図7】
image rotate


【図9】
image rotate


【図8】
image rotate


【図10】
image rotate


【図13】
image rotate


【図25】
image rotate


【図11】
image rotate


【図12】
image rotate


【図14】
image rotate


【図15】
image rotate


【図16】
image rotate


【図17】
image rotate


【図18】
image rotate


【図19】
image rotate


【図20】
image rotate


【図21】
image rotate


【図22】
image rotate


【図26】
image rotate


【図23】
image rotate


【図24】
image rotate


【図27】
image rotate


【図36】
image rotate


【図28】
image rotate


【図29】
image rotate


【図30】
image rotate


【図31】
image rotate


【図32】
image rotate


【図33】
image rotate


【図34】
image rotate


【図35】
image rotate


【特許番号】第2741715号
【登録日】平成10年(1998)1月30日
【発行日】平成10年(1998)4月22日
【国際特許分類】
【出願番号】特願平3−63445
【出願日】平成3年(1991)3月27日
【公開番号】特開平5−88894
【公開日】平成5年(1993)4月9日
【審査請求日】平成3年(1991)3月27日
【審判番号】平7−13504
【審判請求日】平成7年(1995)6月26日
【出願人】(999999999)インターナショナル・ビジネス・マシーンズ・コーポレイション
【合議体】