시간이 지남에 따라 이진 함수가 주어지면이 함수에서 발생하는 간격에 대한 정보를 추출하려고합니다. 예.간격 정보 생성 문제
a, a, b, b, b, a, b, b, a, a
그럼 난 사실 간격이 같은 (시작, 길이, 값)를 원하는 것 :
여기interval(0, 2, a)
interval(2, 3, b)
interval(5, 1, a)
interval(6, 2, b)
interval(8, 2, a)
내가 지금 무엇을 가지고있다 나는 상태 A와 B, 다음과 같은 기능을 가지고 지금까지 :
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와 함께 실행할 때 여전히 제대로 수행하지 않는이 내 출력은 다음과 같습니다
,369 하나의 버그가 1,363,210function(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)
:
그래서 나는 다음과 같은 제약 조건을 추가하려고 (L == 1이 하나 제외) T의 == 9 전혀 간격, 그 없애 :
내 마음에서하는 변환:- interval1(T, L, V), not time(T + L - 1).
"가 금지되고, T + L은 시간이되지 않도록, 간격을 가지고"하지만 지금 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의 정의에서 제안한 한 줄만 추가하면 문제가 해결됩니다. 하지만 첫 번째 제약 조건은 ": - interval1 (T, L, V), function (T + L, V)"입니다. 그렇다면 이것이 왜 불일치를 유발하지 않는가? – Uzaku
자, 방금 규칙 대신 손으로 함수를 정의하면 제약 조건이 작동하지 않아서 불일치가 발생한다고 언급했습니다. 나는 interval의 정의로 constraint를 옮겼는데, "not function (T + Length, Value)"를 추가했다. "다음 요소가 interval과 같은 값일 때 interval이 없다"고 말해야한다. 간격 (0, 2, a) 및 간격 (1, 1, a)을 생성합니다. 그게 왜? – Uzaku
NVM은 방금 전방에서 너무 길다는 사실을 깨달았습니다. 그래서 "기능 (T - 1, Value)이 아닌"기능을 정의에 추가함으로써 이제는 원하는 바를 갖게되었습니다. 다시 한 번 감사드립니다 :) – Uzaku