問題タブ [clingo]
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.
logic-programming - 座標グリッド上の折れ線グラフの対称破りエッジ
Datalog プログラムを最適化するための古典的なトリックは、対称性の破れです。対称性の破れにより、データベースで計算する必要がある事実の数を半分にすることができedge(0, 1)
ますedge(1, 0)
。
nxm 座標グリッドを考えてみましょう。このグリッド上で無向辺を記述する関係を書きたい場合、対称性を破る簡単な方法は、辺が小さい座標から大きい座標へと進む (たとえば(2, 3)
へ(3, 3)
、その逆ではない) ということです。以下は、正確にこの方法で 2x2 グリッドをモデル化する簡単な clingo プログラムです。
これにより、対称性が破られていない場合の 8 つではなく、エッジに関する 4 つの事実が生成されることがわかります。
この座標グリッドによって誘導される折れ線グラフを考えてみましょう。この折れ線グラフも無向なので、同様に対称を破りたいと思います。このグラフの対称性を破るコンパクトな方法は何ですか?
参考までに、対称性を破らない折れ線グラフのエッジの短い定義を次に示します。
次の 2 つの事実が生成されるため、対称性が崩れていないことがわかります。
clingo - クリンゴのルール本体の選言
これは基本的なことだと思いますが、クリンゴのルールの本体にリテラルをどのように分離しますか? 私は試した
p3 :- p1 ; p2.
しかし、それは機能せず、の答えを想定しています
p3 :- p1 , p2.
ありがとう。