X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=modelchecker%2Fmain.c;h=95b8458e45e57cf7afec4d6ce0d7f3655d445f93;hb=c4d4a1d7cbe6a1c6dd2a2b3ba80b3f3029ee8186;hp=02cda40f09ee0bedcbc35eb59b93a76c02b246ee;hpb=b29982e8181d823142ce12b6d582181937fba7ad;p=mc1516pa.git diff --git a/modelchecker/main.c b/modelchecker/main.c index 02cda40..95b8458 100644 --- a/modelchecker/main.c +++ b/modelchecker/main.c @@ -48,9 +48,9 @@ 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_print(screen); time_end_read = clock(); + time_start_encode = clock(); lace_init(0, 1000000); @@ -58,28 +58,43 @@ void solve(FILE *inputstream) LACE_ME; sylvan_init_package(1LL<<21, 1LL<<27, 1LL<<20, 1LL<<26); sylvan_init_bdd(6); - switch(strat){ - case COORD: - DPRINT("Encoding coordinate based\n"); - encode_screen(screen); - 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); + + 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)); } - sokoban_free(screen); + //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",