問題タブ [inference-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.
expert-system - CLIPS での一連の事実の一般化 (マルチスロット スロットで一致するスロット値を見つけようとしています)
私は CLIPS で「事実の一般化」のようなことをしようとしています (どの用語がそれを最もよく表しているかわかりません) が、これを最善の方法で行う方法がわかりません。
そのような状況を考慮してください。以下のテンプレートで記述された一連の事実があります。
Coraxidcause と changeidcause の組み合わせは一種のキーです。これら 2 つのフィールドの組み合わせは一意です。changeinfo と coraxinfo には、スロットにいくつかの記号値があります (これらの各スロットには、常に 10 個を超える値はありません)。
だから私はいくつかの単純な原因の事実を持っています。私がやりたいことは、changeinfo と coraxinfo で同じ値を見つけてアサートすることです。たとえば、これらの単純な原因の事実がある場合:
私はそのような事実を主張したい:
今のところ、私はこのルールを書きました:
問題は、前述の 4 つの事実に戻ると、次のように主張されることです。
等
これらすべての「部分一致」は必要ありません。完全に一致する部分 (finalcause (coraxinfo 2 3) (changeinfo ab)) が必要なだけですが、その方法がわかりません。さらに、次のようなことがあると、本当に恐ろしいことが起こります。
この時点で、CLIPS エンジンは無限ループのようになり、LHS はすべての可能な一致を一覧表示します。
等
それには何年もかかります(そして、前に述べたように、まだ必要のないことをしています)。私は CLIPS の初心者なので、明らかな何かを見逃していると思います。必要なことを行う方法がいくつかあるはずです。これを行う方法についての助けや提案をいただければ幸いです。どんなアイデアも本当に役に立ちます。
私は自分が何を望んでいるのかを明確にしていないようです。たとえば、次の事実がある場合、すべての事実にわたって可能なすべての「一致」を見つける必要があります。
これを出力として取得する必要があります:
clips - CLIPS - マルチスロット フィールドのランダム スロット間の一致を探す
そのような状況を考慮してください。私はそのようなテンプレートを持っています:
私は、coraxinfo スロットでは、常に 14 以下の値しか持たないことを知っています (それより少ないかもしれませんが、それ以上になることはありません)。また、changeinfo マルチスロットでは、値が 13 以下になることもわかりました。
私が持っている事実の間で可能なすべての一致を見つけるルールを書こうとしています。
例えば:
これを取得する必要があります(各マルチスロットの値の順序は関係ありません):
今のところ、私はこの関数で停止しました:
少し不器用ですが、私が覚えている限りでは $? 「ゼロ以上」を意味するため、検索パターンで指定したよりもフィールドが少なくても機能するはずです。最大値として 14 または 13 の値を持つことは、最悪の場合、マルチスロットのすべての 2 番目の値が他の事実と一致することを意味するため、各パターンで最大 7 つのマルチスロットを使用します。
defacts CLIPS で指定されたファクトをロードすると、一種の無限ループに陥るという問題 - 長い間応答しないので、ルールに誤りがあると思います。また、このルールは、1 つのフィールドのみの違いでほとんど同じである事実がいくつかある場合に備えて、エンジンを強制終了する必要があります。そのような場合、それらの間でひどい量の一致が生成されます。どこが間違っていたのですか?どんな提案でも本当に感謝します。
アップデート。coraxinfo スロットと changeinfo スロットに一度に 1 つの値を追加することで (finalcause) 事実を構築するアプローチを試みている場合、現在これら 2 つのルールで停止しています。
両方のマルチスロットで 1 つの一致する値を使用して、最初の最終原因ファクトを作成します。
finalcause ファクトがある場合、一致する simplecause ファクトの両方で、その中のすべてのマルチスロット値が ?coraxmatchafter 値の前のすべてのサブセットであることを確認し、拡張された finalcause をアサートします。私は、このルールは、単純な原因のマッチングにおいて「ギャップを飛び越える」ことができるはずだと信じています。
私はこれらのデファクトでルールを使用します (デファクトは上記のものとは異なることに注意してください):
ここでの問題は、3 つの一致するフィールドの最終的な原因を生成できると期待していましたが、2 つの一致するフィールドを持つ最終的な原因の事実のみを生成し、その理由がわかりません。この 3 つの事実が 2 番目のルールに該当することに注意してください。
clips - CLIPS でファクト アドレスを使用してマルチスロット スロットのすべての値を取得する
ファクトのファクトアドレスを使用して、クリップでマルチスロットスロットのすべての値を取得することは何とか可能ですか? 例えば:
そして、入力でマルチスロット値を受け取る count-coraxes という関数があるので、そのような種類のルールを書き込もうとします:
?f:coraxinfo は、ファクト アドレス ?f を使用して、coraxinfo スロット内のすべての値を取得すると想定していましたが、そうではないようです。全然無理ですか?
logic - ベースド エキスパート システムのルールと通常のアルゴリズム プログラミングの条件の違い
ルールベースのエキスパート システムでは、ナレッジ ベースに多数のルールが「if (テンプレート) then (アクション)」の形式で含まれています。推論エンジンは、入力されたファクトに一致するルールを選択します。つまり、条件セクションが入力データと一致するルールが最終候補にリストされ、そのうちの 1 つが選択されます。
これで、何らかの方法で同様の条件ステートメントを使用して通常のプログラムを使用して、結果に到達する可能性があります。
私は、この 2 つの違いの「健全で明確な説明」を見つけようとしています。また、通常のアルゴリズム プログラミングでエキスパート システムのルールが実行できることを達成できないのはなぜですか?
エキスパートシステムは不完全な情報を任意の順序で受け入れることができるのに、アルゴリズムは完全で非常によく知られている入力を必要とするだけですか?
ありがとう。
asp.net - ASP.Net Web サービスでの Infer.Net モデルの使用
Azure で ASP.Net Web API 2 Web サービスを構築して、 Infer.Netナイーブ ベイズ モデルにアクセスできるようにしています。モデルの起動には 2 つのモードがあります。モデルを最初から構築するモードと、最後に保存されたモデルの状態をロードするモードです。後者は前者よりも高速ですが、どちらもほぼ瞬時ではありません。Web サービスの呼び出しは、即時かつほぼステートレスである必要があります。実行中のモデルを Web API に関連付けるには、ASP.Net のアプリケーション状態を使用する方法と、 Azure ワーカー ロールを使用して Web サービス メソッドと実行中のワーカー ロールの間でキューを使用して通信する方法の 2 つが考えられます。
実行中の Infer.Net モデルを Web サービス API に関連付けるベスト プラクティスは何ですか?
prolog - 推論エンジン プロローグ
プロローグで推論エンジンを構築しようとしています。
たとえば、ここにいくつかのルールがあります
こういうのやりたかった
しかし、次のように定義された述語「rule/1」を使用する必要があります
rule(Ri) :- "if conditions then conclusions".
例えば :
どのようにできるのか ?
artificial-intelligence - ハイブリッド推論エンジンとは
いろいろ調べてみたのですが、同じような投稿がありましたら申し訳ありません。
ルール エンジンには、基本的に、フォワード チェーンとバックワード チェーンの 2 つの推論方法があることを理解しています。また、両方が個別にどのように機能するかを理解していると思いますが、混合推論機能を備えたエンジンはどのように機能し、最初に前方連鎖を実行してから後方連鎖を実行しますか、またはその逆ですか? それとも、エンジンが知識ベースと作業メモリ内の事実に基づいて、どの推論を使用するかを決定する可能性はありますか?
また、両方の推論方法でエンジンを構築したい場合は、使用されているマッチング アルゴリズム (Rete、Treat など) を強化することから始めますか?
私は多くの質問をしたことを知っています。誰かが答えたり、どの部分についても文献を参照してくれたりしたら、本当に感謝しています.
ありがとう!
sparql - SPARQL 1.1 含意レジームと FROM 句を使用したクエリ (フォローアップ)
これは、 SPARQL 1.1 含意レジームと FROM 句を使用したクエリからのフォローアップの質問です。
私は現在、SPARQL 1.1 含意体制について文書化/テストを行っており、推奨事項には次のように繰り返し述べられています。
スコーピング グラフは、アクティブ グラフと同等のグラフです...
したがって、推論スコープ グラフはクエリに依存しているように見えます。
問題は、スコープ グラフがクエリのデータセット (FROM/FROM NAMED 句) に由来するのか、それとも評価されるトリプル パターンの実際の現在アクティブなグラフ コンテキストを参照しているのかということです。
以下のグラフで
次のクエリは何を返す必要がありますか (たとえば、ここでは RDFS 含意体制の下で)、推奨事項に従っていますか?
3 つのリソースすべてを取得する必要があります:
あるいは単に
トリプル パターンのアクティブなグラフは NAMED グラフにスコープされているため、推論の公理はデフォルトのグラフに「配置」されていますか?
あなたの洞察をありがとう、
最大。