是否可以使用Optimizer最小化功能的图像?如果没有,我还会怎么做呢?
该功能定义为 (declare-fun vmorph(V)V)
其中V是
(declare-datatypes () ((V V1 V2 V3 V4 V5 V6)))
。
还有其他规定使vmorph既不是满射也不是单射。而不是仅排除这两个我想首先最小化vmorph的图像,理想地将所有元素映射到相同的元素。如果它是python,它将类似于:
a = len({vmorph(v) for v in V})
minimize(a)
最小化是我正在寻找的z3功能。
答案 0 :(得分:0)
也许你可以指定一个"成本"每个V
的函数,并要求最小化。像这样:
(declare-datatypes () ((V (V1) (V2) (V3) (V4) (V5) (V6))))
(declare-fun vmorph (V) V)
(define-fun cost ((x V)) Int (ite (= x V1) 1
(ite (= x V2) 2
(ite (= x V3) 3
(ite (= x V4) 4
(ite (= x V5) 5 6))))))
(minimize (+ (cost (vmorph V1))
(cost (vmorph V2))
(cost (vmorph V3))
(cost (vmorph V4))
(cost (vmorph V5))
(cost (vmorph V6))))
(check-sat)
(get-model)
这将有利于" V1
超过V2
超过V3
等等。当然,这并不能保证让您达到全球最低标准;因为所有人都更喜欢V6
可能会更好。但是根据vmorph
的属性,您可能会想出一个可以达到所需效果的良好成本函数。