显示 Z3 模型的所有值 (Python)
Display all values from Z3 model (Python)
当我想获取SMT2实例中所有变量的值时,我使用命令(set-option :auto-config false)
。在 Z3py 中,设置此选项不起作用 - 模型不显示我定义但未在任何约束中使用的变量。如果我询问这些变量的值,我会得到 None
。我尝试了这些选项,但其中 none 个选项产生了我想要的结果:
set_option('model_evaluator.completion', True)
set_option('smt.auto-config', False)
set_option('auto-config', False)
我应该怎么做才能获得这些变量的具体值?
auto-config
选项不会告诉 Z3 打印或省略部分模型;它只是启用或禁用求解器的自动配置(基于静态公式功能)。
当一个变量在模型中没有被赋值时,它就是无关紧要的,也就是说,你可以为它补任何值,它仍然是一个正确的模型。根据您使用的 solvers/tactics,选项 model_evaluator.completion
可能会解决该问题,但最安全的方法是在模型评估时启用模型完成,即使用 eval(..) 函数model_completion=True
当我想获取SMT2实例中所有变量的值时,我使用命令(set-option :auto-config false)
。在 Z3py 中,设置此选项不起作用 - 模型不显示我定义但未在任何约束中使用的变量。如果我询问这些变量的值,我会得到 None
。我尝试了这些选项,但其中 none 个选项产生了我想要的结果:
set_option('model_evaluator.completion', True)
set_option('smt.auto-config', False)
set_option('auto-config', False)
我应该怎么做才能获得这些变量的具体值?
auto-config
选项不会告诉 Z3 打印或省略部分模型;它只是启用或禁用求解器的自动配置(基于静态公式功能)。
当一个变量在模型中没有被赋值时,它就是无关紧要的,也就是说,你可以为它补任何值,它仍然是一个正确的模型。根据您使用的 solvers/tactics,选项 model_evaluator.completion
可能会解决该问题,但最安全的方法是在模型评估时启用模型完成,即使用 eval(..) 函数model_completion=True