Sequential 実行モードのパフォーマンスの改善
Sequential アルゴリズム
ルールが均一である必要があります。 均一なルールとは、同じ種類および同じ数のオブジェクトでこれらのルールの条件を設定する必要がある、という意味です。 逐次アルゴリズムを異機種混合の規則に適用しようとすると、通常、より多くのタプル・オブジェクトが作成されます。これにより、 RetePlus モードよりも多くのルールが実行される可能性があります。 共通タプル・シグニチャーは、不均一なルールが実行されない原因となる可能性もあります。 作業メモリー内の対応するインスタンスがない場合、タプルは作成できません。
ルールをチェーニングしないでください。つまり、ルールのアクション部分の変更によって、別のルールが実行されてはなりません。
Sequential 実行モードに準拠しないルールに Sequential 実行モードを指定すると、エンジンでエラーが発生します。
タプル
タプルとは、特定の構造に準拠するオブジェクトのリストです。 タプル構造 とは、クラス記述子の単なるシーケンスです。 タプル構造内のそれぞれの場所のことをスロット と呼びます。 同じクラス記述子を異なるスロットで繰り返し使用することができます。
次のようなタプル構造があるとします。
(Customer,Product)
この構造に準拠するタプルは、次のようになります。
(new Customer("Henry"),new DVD("Mickey"))
DVD は Productであるため、サブクラス化が考慮されることに注意してください。 ただし、以下に示すように、この構造に準拠しないタプルもあります。
例えば、次のタプルは大きすぎます。
(new Customer("Henry"),new CD("Madona"),new DVD("Mickey"))
次のタプルは順序付けが正しくありません。
(new DVD("Lord of the rings"),new Customer("Henry"))
また、次のタプルは小さすぎます。
(new Customer("Henry"))
Java™では、タプルはオブジェクトの配列として簡単に実装できます。
Java Tuple = Object[]
タプルとそのオブジェクトを作成する Java コードは、以下のとおりです。
new Object[] {new Customer("Henry"),new DVD("Mickey")}
実行時、タプルは、作業メモリーの内容から自動的に作成され、ルール・エンジンに渡されます。 タプルは、タプル・マッチング・メソッドに順に渡されます。
Sequential モードでの制御プロパティー
制御プロパティーは Sequential モードの実行およびタプルの構造に影響します。 一般情報については、 実行モードでのルール・タスクのコントロール・プロパティー を参照してください。
タプルごとに実行するルールの数、およびそれらのルールの実行順序は、制御プロパティー ordering、firing、および firinglimit で指定できます。
ordering プロパティー
ordering プロパティーは Sequential 処理に必須です。 ルール・タスクのルールの実行順序を表します。
使用可能な値は、次の 2 つです。
literal: ルールは (上/下矢印を使用して) タスク本体に設定するときの順序で保持されます。sorted: ルールはそれぞれの静的優先度に従ってソートされます。
もう 1 つの値である dynamic は、RetePlus 実行モードを使用しているルール・タスクに対してのみ使用可能であることに注意してください。
firing プロパティー
firing プロパティーは、タプルごとに、適用されるすべてのルールを実行するか、それとも適用される最初のルールのみを実行するかを指定します。 このプロパティーはオプションです。
次の 2 つの値があります。
allrulesこの値は、適用されるすべてのルールを実行してから、次のタプルにスキップすることを意味します。 これはデフォルト値です。
ruleこの値は、適用される最初のルールのみを最初のタプルで実行することを意味します。
firinglimit プロパティー
firinglimit プロパティーは、firing プロパティーが allrules に設定されたときに別の制御レベルを提供します。 このプロパティーを使用して、次のタプルにスキップする前に実行するルールの最大数を表す数値を指定します。 この数値はゼロより大きい必要があります。
Sequential アルゴリズムの既知の制限
次の表は、順次処理の制限、特に特定の ILOG ® Rule Language (IRL) 構成体と組み合わせて使用する場合の制限の概要を示しています。
| 制約事項 | 説明 |
|---|---|
| ILOG ルール言語 (IRL) の制限 | ステートフルの Rete マッチング向けに設計されたルール・パターンは必ずしもすべて使用できるとは限りません。 ルールが現在のタプル・マッチングの実装に準拠していないと、コンパイル時エラーが発生します。 そのため、Sequential 処理が使用される場合、IRL は次のフィーチャーをサポートしません。
|
| 条件コンストラクト | Sequential 処理で使用可能な条件コンストラクトは、次のとおりです。
|
| 屈折 | エンジン・サイクルのデータ単位はタプルです。 エンジンは、一致するタプルを記録せず、サイクルとサイクルの間で忘れます。 そのため、屈折の組み込みサポートはありません。 Sequential 実行モードを使用すると、上記のルール・タスクは次のようになります。 実行トレースでは、逐次実行モードを使用することにより、同じルールが 2 つの異なるタプルの同じ部分に対して 2 回実行されることが示されます。 屈折の組み込みサポートはありませんが、Sequential 実行モードは、タプル・マッチング・メソッドの本体を生成する場合に特定のルール・アプリケーション戦略を使用します。 ただし、この戦略では、屈折の使用制限が試行されます。 |
| ILOG ルール言語 (IRL) 機能 | 一方、Sequential 処理では、IRL の実質的にすべてのスクリプト・レベルの式およびステートメントが使用可能です。 これらは、主に、Sequential アルゴリズムに設定されていないその他のルール・タスクの整合性を維持することを目的としています。 次に、これらのフィーチャーのリストを示します。
|