使用模和优化的z3py性能问题

使用模和优化的z3py性能问题,z3,z3py,Z3,Z3py,我正在试验Z3(使用PythonAPI),我正在为类分配建立一个调度模型,我必须经常使用模(因为它是周期性的)。模似乎已经使z3慢了很多,但是如果我尝试在上面做一些优化(最小化一个成本函数,它是一个和),那么对于相当小的问题,它需要相当长的时间 如果没有优化,它可以正常工作(对于较小的问题,只需几秒钟)。话虽如此,我现在有两个问题: 1) 模函数有什么诀窍吗?如何使用它?我已经给一个函数赋值了。或者是否有其他方式来表示周期性/环行为 2) 我对找到最好的解决办法不感兴趣。一个好的,就足够了。有没

我正在试验Z3(使用PythonAPI),我正在为类分配建立一个调度模型,我必须经常使用模(因为它是周期性的)。模似乎已经使z3慢了很多,但是如果我尝试在上面做一些优化(最小化一个成本函数,它是一个和),那么对于相当小的问题,它需要相当长的时间

如果没有优化,它可以正常工作(对于较小的问题,只需几秒钟)。话虽如此,我现在有两个问题:

1) 模函数有什么诀窍吗?如何使用它?我已经给一个函数赋值了。或者是否有其他方式来表示周期性/环行为

2) 我对找到最好的解决办法不感兴趣。一个好的,就足够了。有没有一种方法可以为代价函数设置一些界限。比如,如果知道它的上下限?任何其他技巧,我可以使用领域知识快速找到解决方案。
此外,我认为如果我使用timeout选项solver.set(“timeout”10000),那么解算器将超时,并获得迄今为止最好的解决方案。情况似乎并非如此。它只是超时。

如果不看到一些代码,就无法对
mod
函数进行注释。但根据经验,划分是困难的。您使用的是
Int
值还是位向量?如果您使用的是无界整数,您可能希望尝试位向量,这可能会从更好的内部启发式中受益。或者尝试
Real
值,然后进行适当的缩减


关于如何获得“到目前为止最好”的最佳值,请参见以下答案:

不使用内置的模和除法,您可以引入未解释的函数
mymod
mydiv
,对于这些函数,您只提供问题所需的除法和模公理。如果我没记错的话,微软的铁甲和/或铁甲舰队团队在遇到模/除法相关性能问题时(使用管道Dafny->Boogie->Z3)就这样做了