나는 을 c 프로그램에서 사용하여 x > 100
표현을 해결하고 x
에 대한 해결책을 얻고 싶습니다. 여기 내 코드는 다음과 같습니다.랜덤 솔루션 Yices 솔버
#include<stdio.h>
#include"yices_c.h"
int main() {
yices_context ctx = yices_mk_context();
char int_ty_name[] = "int";
yices_type int_ty = yices_mk_type(ctx, int_ty_name);
char vname[] = "x";
yices_expr e1 = yices_mk_num(ctx,100);
yices_var_decl v = yices_mk_var_decl(ctx,vname,int_ty);
yices_expr e2 = yices_mk_var_from_decl(ctx,v);
yices_expr eq1 = yices_mk_lt(ctx, e1, e2);
yices_assert(ctx, eq1);
yices_dump_context(ctx);
switch(yices_check(ctx)) {
case l_true:
printf("satisfiable\n");
yices_model m = yices_get_model(ctx);
long i;
yices_get_int_value(m,v,&i);
printf("e2 = %d\n", i);
yices_display_model(m);
break;
case l_false:
printf("unsatisfiable\n");
break;
case l_undef:
printf("unknown\n");
break;
}
yices_del_context(ctx);
return 0;
}
이 프로그램의 결과는 항상 x =101
입니다. 101
은이 표현식에 대한 가능한 결과 중 하나 일뿐입니다. 솔버가 가능한 모든 결과 (임의의 정수 101에서 MAX_INT까지)에서 임의의 결과를 선택하기를 원합니다.
어떻게해야합니까?
은 '101'을 다시 반환합니다. –
그렇다면 제약 조건에 따라 무작위 검색이 매우 무작위가 아닌 것으로 나타납니다. 네가 할 수있는 일이 많다고 생각하지 않는다. SMT 솔버에게 가능한 모든 모델을 제공하여 무작위로 하나를 선택할 수 있도록 요청하는 것은 너무 많은 것입니다. – nickie
나는 모든 가능한 모형을 원하지 않는다. 나는 모델을 원하지만 무작위로 선택했다. 예를 들어 프로그램 1의 실행 번호 1에서 실행 번호 2의'x = 201', 실행 번호 3의'x = 234234'에서'x = 1000'을보고 ... –