0

特定の条件が満たされたときに何千もの事実を撤回するルールがあります。このルールは、「not」ステートメントを使用する他の 2 つのルールを含むモジュール内にあります。私の質問は次のとおりです。

  1. 最初のルールがファクトを撤回するたびに、rete ネットワークが再計算されますか?
  2. それは、他の 2 つのルールの「not」ステートメントが原因でしょうか?
  3. 最初のルールで撤回するファクトがなくなるまで、アクティベーションの再計算を停止する方法はありますか?

ありがとう!

4

2 に答える 2

1

撤回された事実の型を使用するルールのパターンを知らなければ、正確な答えはできません。

明らかに、 ifFactがそのタイプで、ルール #2 と #3 には

not Fact(...constraints...)

これらの Fact ファクトの最後のもの (制約を満たすものがある場合) がワーキング メモリから削除されるまでは、大きなことは何も起こらないはずです。その後、追加のノードを作成する必要がある場合があります (CE 以外のものによって異なります)。これは、not CE の後にあるものに応じて継続し、最終ノード、つまりアクティベーションにつながる可能性があります。

みたいなパターンなら

Fact(...constraints...)

これらのルールのいずれかに含まれている場合、Fact (これらの制約を満たすものがある場合) を撤回すると、ネットワーク内の保留中のアクティブ化とノードの削除に対するアクションが即座に発生します (以前に含まれていた場合)。

Rete ネットワークでの出来事を回避するためにできることはあまりありません。

とはいえ、何千もの事実を撤回しなければならないというのは、かなり恐ろしいことです。何人残っていますか?少数を選択して、まったく新しい Rete で最初からやり直す方が安上がりかもしれません。または、これらの数千のすべてを一度にエンジンに公開しない設計パターンを使用します。または、他の何か。

于 2014-09-01T15:43:40.260 に答える
0

ルールが実行される可能性があるまで、部分的な一致とアクティベーションの再生成を回避する遅延アルゴリズムを作成しました。怠け者なので、salience を使用してルールの評価を遅らせることができます。 http://blog.athico.com/2013/11/rip-rete-time-to-get-phreaky.html

于 2014-09-15T22:38:50.000 に答える