【问题标题】:problems generating interval information生成区间信息的问题
【发布时间】:2016-12-21 14:06:41
【问题描述】:

给定一个随时间变化的二元函数,我尝试提取有关此函数中出现的间隔的信息。 例如。我有状态 a 和 b,以及以下功能:

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)

这是我目前得到的:

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.

这实际上工作得很好,但仍然不正确,这是我的输出,当我使用 cligo 4.5.4 运行它时:

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 == 9 处的所有间隔(L == 1 的间隔除外)

所以我尝试添加以下约束,以摆脱那些:

:- interval1(T, L, V), not time(T + L - 1).

在我的脑海中翻译为“禁止,有一个间隔,这样 T + L 不是时间” 但是现在 cligo 说这个问题将无法满足。

所以我尝试了另一种解决方案,它应该做同样的事情,但不太通用:

:- 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
).

即使没有有问题的约束,这也会使整个事情无法满足,这是为什么呢?

所以是的......我想,我从根本上误解了一些东西,如果有人能告诉我那到底是什么,我会非常高兴。

最好的问候 宇扎库

【问题讨论】:

    标签: answer-set-programming clingo


    【解决方案1】:

    带有约束的程序是不一致的,因为在 ASP 中包含事实a. 和约束:-a. 的任何程序都是不一致的。您基本上是在说a 是真的,同时a 不可能是真的。

    例如,在您的情况下,您有一条规则告诉 interval1(9,10,a) 对于某些功能为真,另一方面,您有一条约束说 interval(9,10,a) 不能为真,所以您得到不一致。

    摆脱不想要的区间的一种方法是,例如,在区间的定义中添加额外的原子,例如:

    interval1(T, Length, Value) :- 
        time(T), duration(Length), value(Value),
        time(T+Length-1), % I added this
        function(Ti, Value): Ti >= T, Ti < T + Length, time(Ti).
    

    现在程序是一致的。

    我无法重现您提供的特定功能的不一致之处。对我来说,以下是一致的:

    time(0..9).
    
    duration(1..10).
    value(a;b).
    
    %1{ function(T, V): value(V) }1 :- time(T).
    
    function(0,a).
    function(1,a).
    function(2,b).
    function(3,b).
    function(4,b).
    function(5,b).
    function(6,a).
    function(7,b).
    function(8,a).
    function(9,a).
    
    
    interval1(T, Length, Value) :- 
        time(T), duration(Length), value(Value),
        time(T+Length-1),
        function(Ti, Value): Ti >= T, Ti < T + Length, time(Ti).
    
    
    #show function/2.
    #show interval1/3.
    

    这是我在输出中得到的:

    $ clingo test 0
    clingo version 4.5.4
    Reading from test
    Solving...
    Answer: 1
    function(0,a) function(1,a) function(2,b) function(3,b) function(4,b) function(5,b) function(6,a) function(7,b) function(8,a) function(9,a) interval1(0,1,a) interval1(1,1,a) interval1(0,2,a) interval1(6,1,a) interval1(8,1,a) interval1(9,1,a) interval1(8,2,a) interval1(2,1,b) interval1(3,1,b) interval1(2,2,b) interval1(4,1,b) interval1(3,2,b) interval1(2,3,b) interval1(5,1,b) interval1(4,2,b) interval1(3,3,b) interval1(2,4,b) interval1(7,1,b)
    SATISFIABLE
    
    Models       : 1     
    Calls        : 1
    Time         : 0.002s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
    CPU Time     : 0.000s
    

    我们得到了比需要更多的间隔,因为其中一些不是最大的,但我把这个留给你考虑:)

    希望这会有所帮助。

    【讨论】:

    • 您好,非常感谢您的回答。只需在interval1的定义中添加您提出的一行,即可解决问题。但第一个约束“:-interval1(T, L, V), function(T + L, V)。”有效,那么为什么这不会导致不一致?
    • 好的,我刚刚注意到,如果我手动定义函数而不是规则,则约束不起作用,从而导致不一致。我将约束移至间隔的定义,添加“not function(T + Length, Value)”应该说“没有间隔,如果时间中的下一个元素与间隔具有相同的值”,但它仍然产生区间 (0, 2, a) 和区间 (1, 1, a)。这是为什么呢?
    • NVM,我刚刚意识到,那些在前面太长,而不是在后面,所以通过在定义中添加“not function(T - 1, Value)”,我现在正好有了我想要什么。再次感谢:)
    • 如果加上约束:-interval1(T, L, V), function(T + L, V),就不会有不满足约束的模型。如果您“手动”定义函数,则最多有一个模型,显然不满足约束,因此如果添加约束,则会出现不一致。如果您使用使用选择规则的函数的原始定义,则程序实际上有 1024 个模型(每个函数一个模型),因此,也许在其中一些模型中满足约束,因此,程序是一致的也有约束。
    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2012-12-20
    • 2018-01-26
    相关资源
    最近更新 更多