2009-03-12 6 views
2

データを解釈するためのルールベースのシステムを構築しようとしています。しかし、私はルールの保存と解釈のロジックを構築する方法を決定する際に問題を抱えています。PHP:Outlookスタイルのルールエンジン

現在、かなり複雑なデータベース構造がありますが、ルールデータを格納するすべての面を処理します。アイデアは、システムは、MS Outlookがユーザーにルールを追加させる方法を模倣できるということです。次のように

私の問題は、以下のとおりです。私は、オブジェクトの内部でこれらのルールを保存するために

  1. 何パターンを使用すべきですか?
  2. ルールを実行するためにeval()または適切なオブジェクトの向きを使用する必要がありますか?

そして例のルールは次のようになります。

エリアで、各要素(犬は、持っている必要がありますエリア内カラー公園

、襟を持っている必要があり、公園)は、解釈されるべき論理の別個の部分である。

上記の質問に対する一般的なアドバイスは大変ありがとうございます。

答えて

1

あなたは「現実の世界」の文脈で説明したようなシステムを実装したことはありませんでしたが、私はそれらを趣味のプロジェクトとしてかなりの額で使っています。私の好みの方法は、アサーションを作成しチェックするために、Prologのような何らかのロジック言語を使用することです。あなたは、公園がどこにあるのか、何かを持つことが何を意味するのか、犬は何か、そしてあなたのポストの一番下にあるカッコ内のあなたの例にほぼ似たルールを作るでしょう。申し訳ありませんが、私のPrologはあなたに有用な例を与えるには余りにも錆びています...私は自宅で推論された推論言語をあまりにも長くプレイしてきました。

ほとんどの言語に埋め込み可能なPrologインタープリタがありますが、PHP5についてはわかりません。 Prologインタープリタを見つけることができない場合は、forward-chaining inferenceという単純なものを、自分の作成したルールデータ構造に対してかなり短期間でまとめることができます。自動化された推論については、notesに興味があるかもしれません。

+0

PrologはPHPから離れすぎている可能性がありますが、これは良い考えです。おそらく、First Order Logicの実装を提案できますか? – tombazza

+0

「FOLの実装」とはどういう意味ですか?私の記事の最後のリンクは、基本的にあなた自身のFOL推論エンジンを実装する方法です。また、Cycプロジェクトをチェックしてみることもできます:http://www.opencyc.org/ – rmeador

+0

はい、おそらく、誰かが既にこの論理プロセスを実装したものを作っていることを期待していました。少なくとも私は彼らがそれのコードベースを構築した方法を見直すことができます! – tombazza

1

おそらく、この回答はあなたにとってはあまりにも些細なことですが、Zend Frameworkアプリケーションである私の現在の既存のプロジェクトで、どうやって解決するのかと考えました。私はfilter-とvalidatorChains ZFが使うと思っていました。私はあなたが可能な入力オブジェクトの可能な限りの数、条件/制約の細かい数と細かいアクションの数を持っていると仮定します。その場合、最初にオブジェクトをインスタンス化し、一連の条件(バリデータ)に対して実行します。すべての条件が満たされている場合は、actionChainに対してオブジェクトを実行します。ここでは、おそらくいくつかのアクションが他のアクションの前に実行されなければならないので、ある種のアクション優先順位システムを実装する必要があります。 「通知を送信する」のようにして、問題のオブジェクトを「削除」します。だからZFでは、すべての条件/制約に対してカスタムバリデータを作成します。私はOutlookシステムが非常に賢明であるとは思わない、私はバリデータが非常に一般的だとは思わないという意味です。

dbには、実際のルール用のテーブルがあります.1つは条件用、もう1つはアクション用です。次に、ルールと必要なすべての条件とアクションをリンクする2対多の表が存在する可能性があります。

+0

チェーンを使用するという考えは、実際には非常に興味深いものです。あるオブジェクトの内部にチェーンが含まれていて、別のチェーンにチェーンされているなど – tombazza

関連する問題