4

javaで推論プロセスのためにフォワードチェーンとバックワードチェーンを実装するための最良のアプローチは何ですか?

一連のステートメントを持つホーン形式の知識ベースが与えられました。

インターネットで検索しようとしましたが、この種の人工知能の概念をコーディングに実装する方法に関する説明を見つけることができませんでした。

私の理解 :

これまで、各センテンス (Horn-Form) を読み込んでオブジェクトを作成しようと考えてきました。各 Sentence クラス オブジェクトには関係変数があり、ナレッジ ベースに Backward または Forward チェーンを要求すると、それらのオブジェクトの配列がチェックされ、目的のチェーンが構築されます。

 public class Sentence{

    private String impliedBy;
    private String implementedVar;

    public Sentence(String sentence){
       String[] relation = sentence.split("=>");
       this.impliedBy = relation[0];
       this.implementedVar = relation[1];
    }
    ...
 }

と言ってクラスの上に電話する...

Sentence s = new Sentence("a&b=>c");

申し訳ありませんが、私はこの種の複雑なプログラミングに慣れていません。私の予測によれば、この種の推論を非常に高いレベルで実行するには、多くの最適化が必要になる可能性があります。しかし、誰かの理解が必要なようです...

ありがとう!

4

4 に答える 4

5

自分でこれを書く前に 、 DroolsJESSなどのルール エンジンを使用します。

あなたの目的が Rete ルール エンジンの書き方を学ぶことでない限り、その場合は回答を取り下げます。チャールズ・フォージーの論文を探しに行きます。

于 2011-05-23T01:10:07.410 に答える
0

変数の数で線形時間で動作するフォワード チェーンを取得する方法の説明については、ここを参照してください(スニペットの実装が、アジェンダのすべての変数の句をループする方法に注意してください)。コードはありませんが、Hornsat のコーディングはそれほど難しくありません。

于 2012-05-02T17:55:18.933 に答える
0

通常、OPS5 などのシステムには、フォワード チェーンを使用する推論コンポーネントがあります。一方、Prolog は通常、後方連鎖を使用します。

フォワード チェーンとバックワード チェーンの両方を、解決に対処するためのさまざまな戦略と見なすことができます。フォワード チェーンはユニットの解像度に対応しますが、バックワード チェーンは入力解像度に対応します。

制御された方法でフォワード チェーン内にバックワード チェーンを含めることができるシステムを構築することも可能です。そのようなシステムの 1 つがJekejeke Minlogです。

マービン・ミンスキーの可能な実装は、HornClauses をネットワークとして見ることです。頭が X の HornClauses と本体に X が含まれる HornClauses は接続されます。

  A <- D, X      X <- G
          |      |
          +------+

HornClause の本体は一種の AND ゲートとして機能し、異なる HornClause が同じヘッドを持つことができるため、OR ゲートも含まれます。次に、これらのゲートに沿って真実を伝えるプログラムを作成してみてください。

さよなら

于 2013-08-12T18:36:12.413 に答える
0

また、次を使用することも役立ちます。

HashMap マップ = 新しい HashMap(); map.put(impliedBy,impliedVar);

簡単に var を取得するには: String value = map.get(impliedBy)。

于 2011-05-23T01:17:21.827 に答える