問題タブ [rule-engine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - リアルタイムの滑走路侵入防止システムには、どの知識ベース/ルールベースの推論エンジンを選択するか
私たちは、滑走路への侵入を防ぐために、空港管制官とパイロットの間の会話を聞くプロジェクトを設計しています (たとえば、ある飛行機が離陸し、他の飛行機が滑走路を横切っている場合)。私たちの教授は、知識ベースにJenaを使用することを望んでいます (または、何らかのルールベースのエンジンである必要があります)。推論は Jena の主なものではなく、これに関するドキュメントや例はあまりありません。そのため、パイロットからのメッセージを入力および出力として取得し、メッセージ プロトコルの侵入またはその他のエラーの可能性があるエンジンが必要です。ルールを簡単に記述でき、エンジンにリアルタイム データを簡単に提供できる必要があります。
私はそれを次のようにイメージします:
- パイロットが滑走路に着陸したというメッセージを送信すると、システムは滑走路が混み合っており、誰も滑走路を渡ってはならないことを記憶します
- 誰かがこの滑走路を横断するように指示された場合、エンジンは何かがおかしいというルールを起動する必要があります
- パイロットが滑走路を離れてゲートに向かうというメッセージを送信すると、システムは滑走路をクリアし、他の飛行機がそれを使用できるようにします。
Jena、prolog、またはその他のルール エンジンはこれに適していますか? 適しているということですが、本当に使う必要があるのでしょうか?私は教授に尋ねた。滑走路の状態を維持し、受け取ったメッセージに基づいていくつかの簡単なチェックを使用することができれば、スケーラブルではなく、ナレッジベースが必要であると彼は言いました。このシステムにどのアプローチを使用するかについて誰かアドバイスをもらえますか? kb を推奨する場合、どれを使用する必要がありますか? プロジェクトはJavaで書かれています。
ありがとうございました。
tsql - ユーザーは、グループへの他のユーザー アクセスに適用される動的ルールを作成する必要があります。
さて、これが「一言で言えば」私が達成しようとしていることです...
私のアプリケーションのユーザーは、新しいグループを作成できます。グループへの参加を許可するユーザーを決定するために許可/拒否する他のユーザーに関する基準を指定できます。
例: 年齢: 12 - 16 歳 身長: 5 - 6 フィート
ルールを格納するデータ テーブルは次のようになります。許可または拒否フラグ (Y/N) AgeStart: 12 AgeEnd: 16 HeightStart: 5 HeightEnd: 6
次に、ユーザーがグループへの参加を許可されているかどうかを判断する基準を満たしているかどうかを確認する必要があります。
これは理にかなっていますか?それに反する EXCEPTION ルールも存在する可能性があります...たとえば、最初の「許可: Y」は 12 歳から 30 歳である可能性がありますが、2 番目のレコードは 25 歳から 28 歳の拒否に追加される可能性があるため、ユーザーは両方の基準を満たす必要があります。入力。
これに乗る人はいますか?
user-interface - ルール エンジンのユーザー インターフェイスの設計
社内には最適化エンジンがあり、これらのエンジンが使用する入力の 1 つはビジネス ルールであり、独自のルール エディターで作成および編集しています。
既存のルール エンジンでは、必要な複雑さのビジネス ルールを表現できなかったため、これらのルールは独自の形式になっています。
いずれにせよ、現在のルール エンジンの動作には多かれ少なかれ満足しています。複雑なビジネス ルールでは非常にうまく機能しますが、ユーザー インターフェイス (ルール エディター)には満足していません。基本的に、これは現在、文字通り、複雑なスプレッドシートのような表形式の GUI を使用して編集される一連のテーブルで構成されています。
これは機能的ですが、開発者ではなく、ビジネス アナリストに相当するエンド ユーザーに提示するにはひどいインターフェイスです。手を汚す前に、この状況に特有のユーザー インターフェイス設計について、StackOverflow コミュニティの意見を聞くのは良い考えだと思いました。
私の質問
- 既存のルール エディターで見た中で最高のユーザー インターフェイスは何ですか?
- ルール エディターのユーザー インターフェイスの設計の背後にある最良の原則は何だと思いますか?
私は、ルール エンジンとルール エディターという用語を別々に使用しています。この質問については、ルール エディターのみに関心があります。
ルール エンジンに対処するが、ルール エディターにもそのユーザー インターフェイス設計にも対処しない、StackOverflow に関するその他の質問:
database - ロジックルールを保存するための適切なデータ構造とデータベーススキーマは何ですか?
はじめに:ルールエンジン、ルールの作成、ルールのモデリング、ルールのデータ構造の実装などの経験はありません。したがって、私は自分が何をしているのか、または以下で試みたことがベースから大きく外れているかどうかはわかりません。
次の架空のシナリオを保存して処理する方法を理解しようとしています。私の問題を単純化するために、ユーザーがオブジェクトを購入するタイプのゲームがあり、1000の可能なオブジェクトが存在する可能性があり、オブジェクトは指定された順序で特定のグループでのみ購入する必要があるとします。たとえば、私がユーザーであり、オブジェクトFを購入したいとします。オブジェクトFを購入する前に、以前にオブジェクトA OR(B AND C)を購入している必要があります。FとAを同時に購入することも、FとB、Cを購入することもできません。それらは、ルールで指定された順序である必要があります。最初に、次にFを後で。または、最初にB、C、次にFを実行します。私は今のところ、購入間の期間やユーザーの他の特性については気にかけていません。ただ、それらが今のところ正しい順序であるということだけです。
購入するオブジェクトのルールを読み取って、ユーザーの以前の購入履歴と照合できる、潜在的に数千のオブジェクトについてこの情報を保存するための最良の方法は何ですか?
私はこれを試みましたが、A OR(B AND C)などのグループ化を実装しようとして立ち往生しています。これらのテーブルがあるデータベースにルールを保存したいと思います。
しかし、明らかに、グループ化せずに結果を処理すると、間違った答えが得られます。可能であれば、過度の文字列解析は避けたいと思います:)。1つのオブジェクトには、以前に必要な購入の数が不明である可能性があります。ルールを処理するためのSQLまたは擬似コードスニペットをいただければ幸いです。:)
java - OpenRules ルールはデータベースでのみ可能ですか?
私は OpenRules と Java を試していて、すべてのルールをデータベースにのみ保存したいと考えています。ドキュメントを正しく理解していれば、環境設定を保存する「Main.xls」が 1 つ必要です。ここで質問です: この 1 つの物理的な .xls ファイルを完全に回避する方法はありますか? 最良のケースは、次のようなものを呼び出すことができれば
メソッド defineOpenRulesDatabase() は、ドキュメントに記載されている db.properties ファイルで定義されているすべての設定を定義します。
これについて何か考えはありますか?
c++ - スクリプトシステムに公開されているC++関数-自己記述型パラメータタイプ
C ++ルールエンジンはXMLでルールを定義し、各ルールは「if X、then Y」に要約されます。ここで、Xは一連のテストであり、Yは一連のアクションです。C ++コードでは、テスト/アクションで使用できる「関数」は、「関数」ごとにクラスとして作成され、それぞれに「run(args)」メソッドがあります...それぞれが独自のパラメーターのセットを取ります。
これは正常に機能します。
ただし、ユーザーがXMLを手作りするのを防ぐために別のツールが必要です。ルールエンジンはプログラマー以外を対象としています。ツールは、使用可能なすべての「関数」と、それらに必要な入力パラメーターを知っている必要があります。これを行うことを検討するための最良の方法は何ですか?私はいくつかの可能性を考えました:
- 構成ファイルには、「関数」とそのパラメーターが記述されており、ツールによって読み取られます。これは非常に簡単で、実際のC ++コードはこれを使用して引数の検証を実行できますが、それでもC ++とXMLの同期は保証されません。プログラマーは、C ++を変更し、XMLの更新を忘れて検証のバグが発生する可能性があります。
- 各「関数」クラスには、それを記述するメソッドがあります。どういうわけか、ツールはC ++クラスをロードします...これはリフレクションをサポートする言語では簡単ですが、C ++では厄介です。おそらく、すべての「関数」などを備えた特別なDLLを作成する必要があります。これは余分なオーバーヘッドを意味します。
特にC++の性質を考えると、何が理にかなっていますか?
編集:タイトルは説明的ですか?これ以上良いものは考えられません。
architecture - Outlook Expressで使用されているようなルールシステムは理論的にどのように機能しますか?どうすればそれができますか?
私はこれについて興味があります:
MicrosoftのOutlookExpress(またはOutlook、よく覚えていませんが、私はMacユーザーです)では、本当にすばらしいものがあります。一般的なルール:
たとえば、一連のルールを構成して、電子メールを自動的に並べ替えたり削除したりできます。それは信じられないほど強力で使いやすいです。
これらのルールは次のようになりました。
「受信トレイのメールに「foo」、「bar」、または「foobar」を含む件名がある場合は削除してください」
強力なフォーム検証システムに似たものをコーディングする必要があります。開発者は、次のようなルールを簡単に作成できるはずです。
さて、私はこれをどのように行うことができるかについていくつかのアイデアを持っています、そして私はそれらを答えとしてここに投稿します。しかし、私が車輪の再発明をする前に:これに似たルールベースの検証システムを開発するための基礎として使用できる書面による概念はありますか?または、そうでない場合、これをどのように行うことができるかについて何か提案はありますか?
上記の例では、角かっこで囲まれたものはすべてhtmlフォーム要素の名前です。アポストロフィ''のすべては、比較するための「ハードコードされた」値です。
定義されたルールは、クライアント側とサーバー側の両方の検証を行うためにPHPコードとJavaScriptコードに変換されます。
これが可能でなければならない機能:
- 条件付きルール:何かAが何かBに依存している
- 値の比較:整数、浮動小数点数、文字列の場合
- 上記の「[gender]is_equal_with'female'」の例のように、フォーム制御ロジックも有効にします。
これはどのように行うことができますか?科学的な観点から、私が考慮しなければならない実体は何ですか?
これの理論的概念はプラットフォームに依存しないと思います。これをPHPとJavaScriptで実装しますが、C++開発者が応答しない理由はありません;-)(私はObjective-Cの人です)
java - Java アプリケーションのルール エンジン
Java のアプリケーションにいくつかのルール エンジンを使用したいと考えています。では、良いルールの枠組みをいくつか提案していただけますか?
algorithm - 自動生成された特徴ベクトルの集約
私は分類システムを持っていますが、残念ながら仕事上の理由からあいまいにする必要があります。考慮すべき 5 つの機能があるとします。基本的には一連のルールです。
サブジェクトを取得して AE の値を取得し、ルールを順番に照合してみます。いずれかが一致した場合、最初の結果を返します。
C は離散値で、ae のいずれかになります。残りは単なる整数です。
ルールセットは古いシステムから自動的に生成され、非常に多数のルール (約 2,500 万) を含んでいます。古いルールは if ステートメントでした。
ご覧のとおり、古いルールでは多くの場合、一部の機能が使用されなかったり、範囲が受け入れられなかったりします。より厄介なものもあります:
ルールセットは人間が維持する必要があるため、はるかに小さくする必要があるため、最初の例が次のようになるようにルールセットを縮小したいと思います。
結果として、結果列でルールセットを分割し、それぞれを個別に縮小できます。ただし、ルールセットを特定して縮小する簡単な方法は思いつきません。クラスタリング アルゴリズムを試してみましたが、一部のデータが離散的であり、それを連続として扱うのは不完全であるため、それらはチョークします。もう一つの例:
理想的な世界では、これは 2 つのルールになります。
つまり、アルゴリズムは A と B の関係を識別するだけでなく、C がノイズであると推測します (ルールにとって重要ではありません)。
この問題をどうやって解決するか考えている人はいますか? ほとんどの場合、これは 1 回限りのプロセスであると予想されるため、どの言語やライブラリも公正なゲームです。前もって感謝します。