私が取り組んでいるアプリケーションは、一種の「コンフィギュレーター」です。これは C# で書かれており、それに合わせてルール エンジンも作成しました。アイデアは、命題論理ステートメントがたくさんあり、ユーザーが選択できるということです。選択した内容に基づいて、他の項目が必須になるか、完全に利用できなくなります。
命題論理ステートメントは、一般に次の形式を取ります。
A => ~X
ABC => ~(X+Y)
A+B => Q
A(~(B+C)) => ~Q A <=> B
シンボル:
=> -- Implication
<=> -- Material Equivalence
~ -- Not
+ -- Or
Two letters side-by-side -- And
私は Prolog に非常に慣れていませんが、すべての「ルール処理」を処理できるようで、現在のルール エンジンから抜け出すことができるようです (動作しますが、それほど速くも簡単でもありません)。私が望むように維持します)。
さらに、使用可能なオプションはすべて階層化されています。例えば:
Outside
Color
Red
Blue
Green
Material
Wood
Metal
第 2 レベルの項目 (色などの機能) が暗示されている場合は、第 3 レベルの項目 (赤などのオプション) を選択する必要があります。同様に、機能が false であることがわかっている場合、その下にあるすべてのオプションも false です。
問題は、すべての製品に独自のルールがあることです。これらの演算子を述語として含むナレッジ ベースを設定し、実行時に製品のすべてのルールの構築を開始することは合理的なアプローチですか?
私が想像する方法は、コンポーネント、機能、およびオプションのアイデアを設定することです。次に、それらの間の関係を設定します (たとえば、機能が false の場合、そのオプションはすべて false になります)。実行時に、製品固有のルールを追加します。次に、ユーザーのすべての選択を関数に渡し、どの項目が true でどの項目が false であるかを出力として取得します。
私は Prolog を始めたばかりなので、私が尋ねていることの意味をすべて知っているわけではありませんが、悪い道をたどり、その過程で多くの時間を無駄にしないようにしています.
私が見つけようとしているものをターゲットにするのに役立つかもしれないいくつかの質問:
- これは実行可能ですか?
- 私は間違った木を吠えていますか?
- 実行時にこれらすべてのルールを作成しようとすると、欠点や懸念事項はありますか?
- C# アプリ (正確には Silverlight) に詰め込むことができる、この種のより良いシステムはありますか?
- 他に検討すべき競合システムはありますか?
- この種のことについて何か一般的なアドバイスはありますか?
アドバイスありがとうございます!