【问题标题】:Clingo program expected to be satisfiableClingo 计划有望令人满意
【发布时间】:2021-04-13 09:15:04
【问题描述】:

我正在 Clingo 5.0.0 中测试一些涉及算术的程序,但我不明白为什么下面的程序不能满足:

#const v = 1.

a(object1).
a(object2).
b(object3).
value(object1,object2,object3) = "1.5".
value(X,Y,Z) > v, a(X), a(Y), b(Z), X!=Y :- go(X,Y,Z).

我希望得到的答案包含:a(object1) a(object2) b(object3) go(object1,object2,object3)。

关于 Clingo 的算术,我可能想念一些东西。

【问题讨论】:

    标签: logic-programming answer-set-programming clingo


    【解决方案1】:

    我担心这里对 ASP 有一些误解。

    1. 您不能为谓词赋值 (value(a,b,c)=1.5)。谓词形成原子,可以是真或假(包含在答案集中或不包含在答案集中)。
    2. 我假设您的最后一条规则将导出原子 go(X,Y,Z)。规则确实反过来起作用,派生的内容在左侧。
    3. 无法进行浮点运算,您必须将值放大为整数。

    您的问题可能看起来像这样,但这只是在黑暗中摸索:

    #const v = 1.
    
    a(object1).
    a(object2).
    b(object3).
    value(object1,object2,object3,2).
    go(X,Y,Z) :- value(X,Y,Z,Value), Value > v, a(X), a(Y), b(Z), X!=Y.
    

    最后一条规则规定: 如果value(object1,object2,object3,2) 为真且2 > 1a(object1) 为真且a(object2) 为真且b(object3) 为真且object1 != object2,则派生go(object1,object2,object3)

    【讨论】:

    • 非常感谢您的详细回答。确实,这是我努力实现的。我需要继续学习 ASP。
    猜你喜欢
    • 2014-07-01
    • 2020-09-11
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多