X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=modelchecker%2Fmain.c;h=95b8458e45e57cf7afec4d6ce0d7f3655d445f93;hb=c4d4a1d7cbe6a1c6dd2a2b3ba80b3f3029ee8186;hp=1fd9e93f4c9f5b5eaea7ff21ca206a22f7062c25;hpb=2be3ea1fc484406a2865426c9b02ad7e9ff703ba;p=mc1516pa.git diff --git a/modelchecker/main.c b/modelchecker/main.c index 1fd9e93..95b8458 100644 --- a/modelchecker/main.c +++ b/modelchecker/main.c @@ -7,6 +7,8 @@ #include #include "sokoban.h" +#include "coord.h" +#include "object.h" #define ERRPRINT(fmt, as...) fprintf(stderr, fmt, ## as); #define DPRINT(fmt, as...) if(DEBUG) ERRPRINT(fmt, ## as); @@ -46,37 +48,53 @@ void solve(FILE *inputstream) time_start_read = clock(); sokoban_screen *screen = parse_screen(inputstream); if (screen == NULL) printf("Something went wrong...\n"); - sokoban_print(screen); - sokoban_free(screen); - + //sokoban_print(screen); time_end_read = clock(); + time_start_encode = clock(); - + lace_init(0, 1000000); lace_startup(0, NULL, NULL); LACE_ME; sylvan_init_package(1LL<<21, 1LL<<27, 1LL<<20, 1LL<<26); sylvan_init_bdd(6); - - //ENCODE??? - switch(strat){ - case COORD: - DPRINT("Encoding coordinate based\n"); - break; - case OBJECT: - DPRINT("Encoding object based\n"); - break; - case HYBRID: - DPRINT("Encoding hybrid based\n"); - break; - default: - ERRPRINT("Huh?"); - exit(2); + + state *init = encode_screen(screen); + rels *rls = encode_rel(screen); + + BDD old = sylvan_false; + BDD new = init->bdd; + int iteration = 0; + while(new != old){ + ERRPRINT("Iteration %d\n", iteration++); + old = new; + new = sylvan_or(new, sylvan_relnext(new, rls->rell->bdd, rls->rell->varset.varset)); + new = sylvan_or(new, sylvan_relnext(new, rls->relu->bdd, rls->relu->varset.varset)); + new = sylvan_or(new, sylvan_relnext(new, rls->relr->bdd, rls->relr->varset.varset)); + new = sylvan_or(new, sylvan_relnext(new, rls->reld->bdd, rls->reld->varset.varset)); } + //sylvan_printdot_nc(old); + //switch(strat){ + // case COORD: + // DPRINT("Encoding coordinate based\n"); + // break; + // case OBJECT: + // DPRINT("Encoding object based\n"); + // solve_object(screen); + // break; + // case HYBRID: + // DPRINT("Encoding hybrid based\n"); + // DPRINT("Not implemented yet...\n"); + // break; + // default: + // ERRPRINT("Huh?"); + // exit(2); + //} time_end_encode = clock(); //SOLVE??? + sokoban_free(screen); ERRPRINT("Reading: %fs\n", ((double) (time_end_read-time_start_read))/CLOCKS_PER_SEC); ERRPRINT("Encoding: %fs\n",