Z3 Gurobi可以用来解决SMT-LIB文件吗?

Z3 Gurobi可以用来解决SMT-LIB文件吗?,z3,smt,gurobi,Z3,Smt,Gurobi,我有一个问题,我们以前是用混合整数线性规划(MILP)和Gurobi解决的。problemspace涉及大约2亿个整数变量,其中除5000个变量外,其余都是零,5000个(非常具体的5000个)是1。唯一的算术是加法 这个问题的Gurobi输入文件通常是5-10GB大小(太大了,我将它们压缩存储,并开发了一个Gurobi hack,让它读取gzip-ed文件)。古罗比通常可以在60-600秒内解决这些问题,但有时需要6000秒。甚至6万。从来没有60万 我已将该问题重新编码到SMT-LIB中。问

我有一个问题,我们以前是用混合整数线性规划(MILP)和Gurobi解决的。problemspace涉及大约2亿个整数变量,其中除5000个变量外,其余都是零,5000个(非常具体的5000个)是1。唯一的算术是加法

这个问题的Gurobi输入文件通常是5-10GB大小(太大了,我将它们压缩存储,并开发了一个Gurobi hack,让它读取gzip-ed文件)。古罗比通常可以在60-600秒内解决这些问题,但有时需要6000秒。甚至6万。从来没有60万

我已将该问题重新编码到SMT-LIB中。问题现在小得多了——只有100000个整数变量。现在使用的函数是
ite
+
=
assert
。但在相对简单的问题上,Z3比古洛比要花费大约10-100倍的时间

有没有办法让Gurobi处理SMT-LIB文件

编辑:我不是在优化,我只对找到令人满意的解决方案感兴趣

另一方面,我应该看看其他的解决方案吗


另一方面,我怀疑将问题从100000000个整数更改为100000个整数会使问题更难解决。这两个问题之间的映射是,大问题中的整数变量以大约15000个为一组进行聚集,而在小问题中,我有一个8位数字、一个6位数字和两个1位数字)。也许我应该给Z3一个更大的问题?

不尝试就不可能知道。你在使用z3的优化器吗?如果是这样的话,它将比实际的解算器引擎慢得多。您可能希望直接求解,然后迭代以查看是否有成本更低的解决方案。令人惊讶的是,如果解决方案空间足够小,这可能会更快。如果您没有使用优化器,那么我不明白为什么您应该期望z3打败Gurobi,因为它似乎有自定义算法。另外,请查看OptiMathSAT(),它可以读取SMTLib并具有自定义优化器。它可能表现得很好。Patrick Trentin(@PatrickTrentin)是基于SMT的优化和MathSAT方面的专家,他经常在这里闲逛。他也许能回答具体的问题。我不是在优化。我想知道我是否能让古洛比阅读SMT-LIB文件;它显然不支持这种格式。如果我能将SMT-LIB文件转换成Gurobi将采用的格式,这将非常有用。我想知道我是否能让古洛比阅读SMT-LIB文件;它显然不支持这种格式。如果我能将SMT-LIB文件转换为Gurobi将采用的格式,这将非常有用。您可能仍然希望尝试MathSAT(),因为您已经有了SMTLib,可以查看它是否做得更好。CVC4或Yices不太可能表现得更好,但这些确实是您的主要选择。我不知道古洛比是否能读SMTLib。由于明显的原因,在StackOverflow上获得关于商业工具的帮助通常并不容易。不尝试就不可能知道。你在使用z3的优化器吗?如果是这样的话,它将比实际的解算器引擎慢得多。您可能希望直接求解,然后迭代以查看是否有成本更低的解决方案。令人惊讶的是,如果解决方案空间足够小,这可能会更快。如果您没有使用优化器,那么我不明白为什么您应该期望z3打败Gurobi,因为它似乎有自定义算法。另外,请查看OptiMathSAT(),它可以读取SMTLib并具有自定义优化器。它可能表现得很好。Patrick Trentin(@PatrickTrentin)是基于SMT的优化和MathSAT方面的专家,他经常在这里闲逛。他也许能回答具体的问题。我不是在优化。我想知道我是否能让古洛比阅读SMT-LIB文件;它显然不支持这种格式。如果我能将SMT-LIB文件转换成Gurobi将采用的格式,这将非常有用。我想知道我是否能让古洛比阅读SMT-LIB文件;它显然不支持这种格式。如果我能将SMT-LIB文件转换为Gurobi将采用的格式,这将非常有用。您可能仍然希望尝试MathSAT(),因为您已经有了SMTLib,可以查看它是否做得更好。CVC4或Yices不太可能表现得更好,但这些确实是您的主要选择。我不知道古洛比是否能读SMTLib。出于明显的原因,通常很难在StackOverflow上获得有关商业工具的帮助。