C 使用Z3API解决LRA运行速度比在终端中使用z3慢
我试图用Z3来解决一个随机的广义带包装问题(LRA),我在c程序中调用了Z3API,下面是代码C 使用Z3API解决LRA运行速度比在终端中使用z3慢,c,z3,smt,C,Z3,Smt,我试图用Z3来解决一个随机的广义带包装问题(LRA),我在c程序中调用了Z3API,下面是代码 Z3_context ctx; Z3_ast fs; LOG_MSG("smt2parser_example"); FILE *fp = fopen("smttest","r"); if(fp == NULL) { perror("fopen()"); return; } int file_size; fseek(fp,0,SEEK_END); file_size = ftel
Z3_context ctx;
Z3_ast fs;
LOG_MSG("smt2parser_example");
FILE *fp = fopen("smttest","r");
if(fp == NULL)
{
perror("fopen()");
return;
}
int file_size;
fseek(fp,0,SEEK_END);
file_size = ftell( fp );
char *tmp;
fseek( fp , 0 , SEEK_SET);
tmp = (char *)malloc( (file_size+1) * sizeof( char ) );
tmp[file_size]='\0';
fread( tmp , file_size , sizeof(char) , fp);
ctx = mk_context();
fs = Z3_parse_smtlib2_string(ctx, tmp, 0, 0, 0, 0, 0, 0);
Z3_assert_cnstr(ctx, fs);
Z3_model m = 0;
Z3_check(ctx);
Z3_del_context(ctx);
我还尝试通过命令“z3 smttest”解决终端中的smttest问题。然而,在终端中,它比在c程序中调用api运行得更快。我想知道是否需要设置任何配置以使其在api模式下快速运行?(顺便说一下,z3在终端中的运行速度是调用api的两倍。)函数“z3_assert_cnstr(ctx,fs);”不再可用,因此您必须使用非常旧的z3版本。使用“求解器”对象来声明表达式,并且还使用C++ API来提高可靠性。您可以为指定的逻辑(如“QF_LRA”)创建解算器,在这种情况下,初始设置必须适合该逻辑。默认情况下,Z3将在第一次检查sat之前通过分析断言的公式来自动找到良好的设置。函数“Z3_assert_cnstr(ctx,fs);”不再可用,因此您必须使用非常旧的Z3版本。使用“求解器”对象来声明表达式,并且还使用C++ API来提高可靠性。您可以为指定的逻辑(如“QF_LRA”)创建解算器,在这种情况下,初始设置必须适合该逻辑。默认情况下,Z3将在第一次检查sat之前,通过分析断言的公式,尝试自动找到良好的设置。非常感谢您的回答。我为“QF_LRA”逻辑创建了一个求解器,这个问题就解决了。非常感谢您的回答。我为“QF_LRA”逻辑创建了一个求解器,解决了这个问题。