fzn2smt工具允许用户通过 Yices 解决 flatzinc 公式。
当我尝试运行它时,解算器以UNKNOWN
回答我测试的每个公式。 。的 e.g :
~$ java -Xmx4096M fzn2smt -ce "./yices-2.5.2/bin/yices -f" -i 2DPacking.fzn
Time1:170
=====UNKNOWN=====
但是,在给定的示例中,它似乎在2DPacking.fzn
文件的同一目录中正确创建了2DPacking.fzn.smt
实例:
~$ ls
2DPacking.fzn.smt 2DPacking.fzn 2DPacking.mzn 2DPacking.ozn
如果我在Yices
公式上手动运行smt
,我会得到一个积极的结果:
~$ yices-smt -f 2DPacking.fzn.smt
sat
(= x____00002_6_ 0)
...
IMPLICANT:
(>= x____00003_4_ 0)
...
问:是否有其他人有使用fzn2smt
的经验并知道如何解决此问题?
为了确保我遇到的问题不是由于安装部分,我将在此处分享:
main_dir
main_dir/fzn2smt-2-0-02 # unpacked fzn2smt files
main_dir/antlr # unpacked antlr-runtime-3.5 files
main_dir/yices-2.5.2 # unpacked yices files
我还根据工具说明的要求修改了环境变量:
PATH=${main_dir}/yices-2.5.2/bin/:${PATH}
PATH=${main_dir}/fzn2smt-2-0-02/:${PATH}
CLASSPATH=${main_dir}:${CLASSPATH}
CLASSPATH=${main_dir}/antlr:${CLASSPATH}
CLASSPATH=${main_dir}/fzn2smt-2-0-02:${CLASSPATH}
答案 0 :(得分:1)
正如评论中建议的 @Dekker 一样,问题是由于fzn2smt
似乎暂时没有更新。
经过一些试验和错误后,我发现似乎与Yices
兼容的fzn2smt
的最新版本是版本2.2.1
。
可以按如下方式执行:
~$ java -Xmx4096M fzn2smt -ce "./yices-2.2.1/bin/yices-smt -f" -i 2DPacking.fzn
Time1:162
Time: 207
Pos: 0
item = array2d(1..2, 1..4, [0, 0, 0, 0, 1, 1, 1, 1]);
obj = 1;
----------
Time: 223
Pos: 0
item = array2d(1..2, 1..4, [0, 0, 0, 0, 1, 1, 1, 1]);
obj = 1;
----------
==========
Time2:228
最初,fzn2smt
与 SMT-COMP 2009 中提供的2
版本Yices
配合使用。要使用该版本,使用该工具的命令行指令略有不同:
~$ java -Xmx4096M fzn2smt -ce "./yices2smt09/bin/yices -f" -i 2DPacking.fzn
Time1:160
Time: 208
Pos: 0
item = array2d(1..2, 1..4, [0, 0, 0, 0, 1, 1, 1, 1]);
obj = 1;
----------
==========
Time2:223
请注意
可执行文件在此处命名为yices
,而不是yices-smt
输出略有不同,由于某些原因,使用较新版本的工具时,解决方案会被多次打印
旧版Yices
可以从here下载。