使用优化程序

时间:2018-02-18 17:46:41

标签: z3 z3py

是否可以使用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功能。

1 个答案:

答案 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的属性,您可能会想出一个可以达到所需效果的良好成本函数。