首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Mathsat确定给定实例的解决方案数目

如何使用Mathsat确定给定实例的解决方案数目
EN

Stack Overflow用户
提问于 2013-11-05 01:43:21
回答 1查看 314关注 0票数 1

Mathsat支持命令check-allsat,而Z3不支持它。请考虑以下例子:

代码语言:javascript
复制
(declare-fun m () Bool)
(declare-fun p () Bool)
(declare-fun b () Bool)
(declare-fun c () Bool)
(declare-fun r () Bool)
(declare-fun al () Bool)
(declare-fun all () Bool)
(declare-fun la () Bool)
(declare-fun lal () Bool)
(declare-fun g () Bool)
(declare-fun a () Bool)
(define-fun conjecture () Bool
(and (= (and (not r) c) m) (= p m) (= b m) (= c (not g)) (= (and (not al) (not all)) r)
(=(and la b) al) 
(= (and al la lal) all) (= (and (not g) p a) la) (= (and (not g) (or la a)) lal)))
(assert conjecture)
(check-allsat (m p b c r al all la lal g a))

使用mathsat执行此代码将获得所有一致的赋值。问题是如何使用Mathsat来确定这样一致的作业的数量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-18 23:11:37

我不知道有什么命令来计算解决方案的数量。但是,使用MathSAT的API可以很容易地做到这一点。创建一个计数器,并在每次MathSAT通知时增加它。

代码语言:javascript
复制
static int counter = 0;
static int my_callback(msat_term *model, int size, void *user_data)
{
   counter++; return 1;
}
...
msat_all_sat(env, important, 4, my_callback, &data);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19780602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档