在玩nuZ时我偶然发现了这个:
(declare-fun x () Int)
(declare-fun y () Int)
(assert-soft (= x 1) :weight 1 :id first)
(assert-soft (= y 4) :weight 3 :id first)
(assert-soft (= x 2) :weight 1 :id second)
(assert-soft (= y 5) :weight 3 :id second)
(assert-soft (= x 3) :weight 1 :id third)
(assert-soft (= y 6) :weight 3 :id third)
(maximize (+ x y))
(check-sat)
(get-model)
给了我这个结果(使用Z3不稳定分支4.4.0):
first |-> 0
second |-> 4
third |-> 4
(+ x y) |-> 5
sat
(model
(define-fun x () Int
1)
(define-fun y () Int
4)
)
“| - >”是什么这意味着什么
当提到软断言的id时,它可能意味着放弃一些软断言的成本。 当提到目标时,它看起来像是优化的结果。
还有更多吗?
此致 约翰
答案 0 :(得分:1)
没有更多的东西。 对于软约束," | - >"右边的数字。给出如下。
假设我们断言 (断言 - 软F1:重量w1:id第一) (断言 - 软F2:重量w2:id第一) (断言 - 软F3:权重w3:id第一)
假设M是模型最大赋值 将事实值分配给F1,F2,F3中的变量,因此我们可以将M中的公式计算为0(假)或1(真)。
然后是| - >的右侧是数字:
M(not(F1))*w1 + M(not(F2))*w2 + M(not(F3))*w3
MaxSat解决方案最小化此总和,或双重最大化总和:
M(F1)*w1 + M(F2)*w2 + M(F3)*w3
(不打印)。