Z3 C API在运行时更改超时

时间:2012-05-31 12:47:11

标签: z3

是否可以使用C API在运行时更改解算器的超时值? 为了设置超时,可以完成以下操作 -

Z3_config  cfg = Z3_mk_config();
Z3_set_param_value(cfg, "SOFT_TIMEOUT", "10000") // set timeout to 10 seconds
Z3_context ctx = Z3_mk_context(cfg);
....
Z3_check_and_get_model(ctx);
....
....
Z3_check_and_get_model(ctx);

但是,假设我们想要在保留上下文的同时更改下一个查询的超时,是否可以在两者之间更改超时值?

1 个答案:

答案 0 :(得分:2)

考虑转移到Z3 4.0。 Z3 4.0有新的API,允许用户在同一个Z3_context中创建许多解算器。您可以为每个解算器设置不同的超时,并随时更新它们。 Z3 4.0还附带了一个C ++层,使C API更加便于使用。 这是一个设置超时的简短示例。在我的机器上,Z3将在使用1毫秒超时时返回unknown,并在删除sat命令时返回s.set(p)

context c;
expr x = c.real_const("x");
expr y = c.real_const("y");
solver s(c);

s.add(x >= 1);
s.add(y < x + 3);

params p(c);
p.set(":timeout", static_cast<unsigned>(1)); // in milliseconds
s.set(p);

std::cout << s.check() << std::endl;