54

Javascript で実装された軽量ルール エンジンの提案を探しています。

このような実装の理由は、少数のルール セット (20 未満) を使用して、非常に軽量で高速なブラウザー ベースのシミュレーションを構築するためです。シミュレーションは、サーバーに戻る必要なく、6 つのパラメーターを使用してルールを実行し、ブラウザーに結果を表示します。いくつかのラジオ ボタン、チェックボックス、テキスト ボックス、およびパラメーターを制御するスライダーを備えた UI を考えてみてください。シミュレーションは、パラメーターの変更に基づいてすぐに再実行されます。

4

6 に答える 6

15

node.js用の純粋な JavaScript で実装されたnoolsルール エンジンを確認してください。ルール定義の構文は非常に単純です。

于 2012-10-25T10:51:19.143 に答える
15

私はあなたが c# で記述しているものの (より複雑な) バージョンを実装しました。コードを振り返ってみると、すべて JavaScript で実行できます。自分で書くことが実行可能なオプションであるという投稿されたコメントに同意します。必要に応じて単純にも複雑にもできます。

このタイプのルール エンジンに関する一般的な考察 (順不同):

  1. 非線形ルックアップはあなたの友達です。JavaScript では、obj[key] = val構文を使用してこれを簡単に行うことができます。特定のパラメーター セットに対するルールの出力を決定したら、その結果をキャッシュして、ルールを再度実行せずに再度使用できるようにします。

  2. 入力の一意の組み合わせを処理する必要があるかどうかを判断します。たとえば、ユーザーが複数の名前を入力して、XYZ に関する提案を求めることを許可するとします。実際には、各入力値に対してすべてのルールを実行する必要があります。これは、無関係、単純、または非常に複雑な場合があります (複数の日付、時間、場所、および基準を使用して提案を行うホテル予約システムを想像してください)。

  3. setTimeout() を使用して UI の動作をスムーズにすることができますが、記述したルールは数ミリ秒以下で実行する必要があるため、パフォーマンスについては最後に心配してください。パフォーマンスは、基本的なルール エンジンで考えられるほど問題ではありません。

  4. ルール定義がオブジェクト (または単純なオブジェクト ツリー) である場合は、操作が最も簡単になります。

  5. UI 要素を出力結果に関連付けないでください。つまり、ルール実行の結果を柔軟なオブジェクト リストに入れ、そこから必要な視覚的出力を作成できるようにします。

  6. カスタマイズされた出力メッセージは、ユーザーにとって非常に便利です。つまり、条件が満たされたときに一般的なメッセージをトリガーするのではなく、出力メッセージに実際の値を挿入してみてください。

それは私の頭の上からそれです。幸運を。

于 2010-12-27T05:16:07.943 に答える
6

Rule Reactor ( https://github.com/anywhichway/rule-reactor ) は、軽量で高速、表現力豊かなフォワード チェーン ビジネス ルール エンジンであり、JavaScript の内部構造、遅延クロス積、Rete ではなくオブジェクトとしての関数を活用します。ブラウザまたはサーバーで使用できます。

于 2016-06-17T09:04:38.550 に答える
3

これは非常に単純なルール エンジンで、サーバー サイドの javascript (Mozilla の Rhino エンジン) を使用します (おそらく役に立つでしょう) http://jubyrajan.blogspot.com/2010/04/implementing-simple-deterministic-rule.html

于 2010-12-29T18:36:36.290 に答える
1

製品コンフィギュレーター用の html / javascript ルール エンジンの例を作成しました。ルール エンジンは if then ステートメントに基づいています。if then ステートメントは配列でチェックされます。この配列は、オプションが変更されるたびに可能なすべてのオプションで埋められます。例については、私のブログをご覧ください。 私のブログ「Forward chaining javascript rule engine」へのリンク

「obj[key] = val」が JavaScript ルール エンジンの鍵だと思います。Jquery は JavaScript の処理に役立ちます。

于 2012-02-17T16:05:52.800 に答える