時間の経過とともに2進関数が与えられた場合、この関数で発生する間隔に関する情報を抽出しようとします。 など。このような間隔情報の生成に関する問題
a, a, b, b, b, a, b, b, a, a
、私は実際の間隔([スタート]、長さ、値)を望む:私は状態aとb、および以下の機能を持たせてここ
にinterval(0, 2, a)
interval(2, 3, b)
interval(5, 1, a)
interval(6, 2, b)
interval(8, 2, a)
を私は得たものですはるか:
time(0..9).
duration(1..10).
value(a;b).
1{ function(T, V): value(V) }1 :- time(T).
interval1(T, Length, Value) :-
time(T), duration(Length), value(Value),
function(Ti, Value): Ti >= T, Ti < T + Length, time(Ti).
:- interval1(T, L, V), function(T + L, V).
#show function/2.
#show interval1/3.
これは実際にちょっとうまく動作しますが、私はclingo 4.5.4とそれを実行したときにはまだない、正しく、これが私の出力は、次のとおりです。
だから私はそれらを取り除くために、以下の制約を追加しようとしたTの== 9(1ここで、L == 1を除く)ですべての間隔:
一つだけバグがありますfunction(0,b)
function(1,a)
function(2,b)
function(3,a)
function(4,b)
function(5,a)
function(6,b)
function(7,a)
function(8,b)
function(9,a)
interval1(0,1,b)
interval1(1,1,a)
interval1(2,1,b)
interval1(3,1,a)
interval1(4,1,b)
interval1(5,1,a)
interval1(6,1,b)
interval1(7,1,a)
interval1(8,1,b)
interval1(9,1,a)
interval1(9,10,a)
interval1(9,2,a)
interval1(9,3,a)
interval1(9,4,a)
interval1(9,5,a)
interval1(9,6,a)
interval1(9,7,a)
interval1(9,8,a)
interval1(9,9,a)
私の心の中で「T + Lは、時間ではないように、間隔を持つように、禁止されている」に変換さ
:- interval1(T, L, V), not time(T + L - 1).
しかし、今clingoは、問題が充足不能だろうと述べました。
だから私は同じことを行う必要があり、別の解決策を、試してみましたが、少し一般的な方法で:また、全体のことは解決不可能作っ
:- interval1(T, L, V), T + L > 10.
。 私は本当に理解していない、私はちょうどそれらのルールは、単に関数を実行する間隔を取り除くことを期待したいと思います。 なぜモデルのすべての要素が完全に消去されるのですか?
また、私の実験中に、私は、関数のルールを置き換える:
も、問題の制約を受けることなく、全部が充足不能になるだろうfunction(
0, a;
1, a;
2, b;
3, b;
4, b;
5, b;
6, a;
7, b;
8, a;
9, a
).
、なぜですか?
だから私は基本的には何かを誤解していたと思うし、誰かが私に正確に何かを教えてくれるのなら、本当に素晴らしいだろう。制約のある
よろしく Uzaku
お返事ありがとうございました。 interval1の定義で提案した1行を追加するだけで問題は解決しました。しかし、最初の制約は ": - interval1(T、L、V)、function(T + L、V)"です。なぜ、これが不整合を引き起こさないのでしょうか? – Uzaku
わかりました。私は、ルールの代わりに関数を手で定義すると、制約が機能しないことに気づいたため、矛盾が生じます。私は間隔の定義に制約を移し、 "関数ではない(T + Length、Value)"を追加する必要があります。 "時間間隔の次の要素が間隔と同じ値であれば間隔はありません"区間(0,2、a)と区間(1,1、a)を生成する。何故ですか? – Uzaku
NVM、私はちょうどそれらが正面ではなく、後ろではないことに気付いたので、定義に "not function(T - 1、Value)"を追加することによって、今私が望むものを得ました。ありがとうございました:) – Uzaku