X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=modelchecker%2Fcoord.c;h=85b1867ea6c93533bb37d76710dbbca4a3b9743b;hb=509bd1dfaca9df4125e648a96e0c47ef2cf054ae;hp=c74c2fe80916988cfdb646a61aa2041a9b69d87a;hpb=d0ee02a16e9266da088b78ab8d2982f1c215fa1b;p=mc1516pa.git diff --git a/modelchecker/coord.c b/modelchecker/coord.c index c74c2fe..85b1867 100644 --- a/modelchecker/coord.c +++ b/modelchecker/coord.c @@ -69,6 +69,7 @@ bddvar_xy_map *getbdd(int key, bddvar_xy_map *map) return r; } +/* xy_bddvar_map *create_xy_bddvar_map(sokoban_screen *screen) { int varcount = 0; @@ -112,6 +113,7 @@ bddvar_xy_map *create_bddvar_xy_map(sokoban_screen *screen) } return bddxy; } +*/ bimap *create_bimap_helper(sokoban_screen *screen) { @@ -148,6 +150,24 @@ bimap *create_bimap_helper(sokoban_screen *screen) return bm; } +int check_xy_exists(int x, int y, bimap *bm) +{ + int res = 0; + if (getxy(x, y, bm->f) != NULL) res = 1; + return res; +} + +int check_space(int x, int y, direction d, int delta, bimap *bm) +{ + switch(d){ + case LEFT: x = x - delta; break; + case UP: y = y - delta; break; + case RIGHT: x = x + delta; break; + case DOWN: y = y + delta; break; + } + return check_xy_exists(x, y, bm); +} + /* * Each coordinate has three related boolean variables. The combination of those boolean variables * defines tiles: @@ -164,186 +184,619 @@ bimap *create_bimap_helper(sokoban_screen *screen) * directly in transition relations. */ -BDD encode_screen(sokoban_screen *screen) +state *encode_screen(sokoban_screen *screen) { - BDD state = sylvan_false; + LACE_ME; + + BDDVAR vars[HASH_COUNT(screen) * 3]; + for (uint8_t i = 0; i < HASH_COUNT(screen) * 3; i++){ + vars[i] = i * 2; + } + + uint8_t st_enc[HASH_COUNT(screen) * 3]; + + BDDSET varset = sylvan_set_fromarray(vars, HASH_COUNT(screen) * 3); + BDD s; + state *fullState = NULL; + fullState = (state *)malloc(sizeof(state)); + fullState->vars.varset = varset; + fullState->vars.size = HASH_COUNT(screen) * 3; int tile_index = 0; sokoban_screen *r; - LACE_ME; for(r=screen; r != NULL; r = (sokoban_screen *)(r->hh.next)){ switch(r->tile){ - case FREE: - if (state == sylvan_false){ - state = sylvan_not(sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - } - else { - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - } + case FREE: //001 + st_enc[tile_index] = 0; + tile_index++; + st_enc[tile_index] = 0; + tile_index++; + st_enc[tile_index] = 1; + tile_index++; break; - case WALL: - if (state == sylvan_false){ - state = sylvan_not(sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - } - else { - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - } + case WALL: //000 + st_enc[tile_index] = 0; + tile_index++; + st_enc[tile_index] = 0; + tile_index++; + st_enc[tile_index] = 0; + tile_index++; break; - case BOX: - if (state == sylvan_false){ - state = sylvan_not(sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - } - else { - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - } + case BOX: //010 + st_enc[tile_index] = 0; + tile_index++; + st_enc[tile_index] = 1; + tile_index++; + st_enc[tile_index] = 0; + tile_index++; break; - case TARGET: - if (state == sylvan_false){ - state = sylvan_not(sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - } - else { - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - } + case TARGET: //011 + st_enc[tile_index] = 0; + tile_index++; + st_enc[tile_index] = 1; + tile_index++; + st_enc[tile_index] = 1; + tile_index++; break; - case AGENT: - if (state == sylvan_false){ - state = sylvan_ithvar(tile_index); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - } - else { - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - } + case AGENT: //101 + st_enc[tile_index] = 1; + tile_index++; + st_enc[tile_index] = 0; + tile_index++; + st_enc[tile_index] = 1; + tile_index++; break; - case TARGAGENT: - if (state == sylvan_false){ - state = sylvan_ithvar(tile_index); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - } - else { - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - } + case TARGAGENT: //110 + st_enc[tile_index] = 1; + tile_index++; + st_enc[tile_index] = 1; + tile_index++; + st_enc[tile_index] = 0; + tile_index++; break; - case TARGBOX: - if (state == sylvan_false){ - state = sylvan_ithvar(tile_index); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - } - else { - state = sylvan_and(state, sylvan_ithvar(tile_index)); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - state = sylvan_and(state, sylvan_not(sylvan_ithvar(tile_index))); - tile_index++; - } + case TARGBOX: //100 + st_enc[tile_index] = 1; + tile_index++; + st_enc[tile_index] = 0; + tile_index++; + st_enc[tile_index] = 0; + tile_index++; break; } } - /* - xy_bddvar_map *map = NULL; - map = create_xy_bddvar_map(screen); - xy_bddvar_map *m = getxy(1, 1, map); - bddvar_xy_map *map2 = NULL; - map2 = create_bddvar_xy_map(screen); - bddvar_xy_map *m2 = getbdd(2, map2); - printf("Test1: %d %d\n", m->value.var[0], m->value.var[1]); - printf("Test2: %d %d\n", m2->value.x, m2->value.y); - */ - /* - bimap *bm = NULL; - bm = create_bimap_helper(screen); - xy_bddvar_map *m = getxy(1, 1, bm->f); - bddvar_xy_map *m2 = getbdd(2, bm->t); - printf("Test1: %d %d\n", m->value.var[0], m->value.var[1]); - printf("Test2: %d %d\n", m2->value.x, m2->value.y); - printf("%d tiles were encoded\n", tile_index); - if (bm != NULL) printf ("WORKS!\n"); - */ - return state; + s = sylvan_cube(varset, st_enc); + fullState->bdd = s; + printf("Initial state encoded\n"); + return fullState; } -BDD encode_rel(sokoban_screen *screen) +int +test_relprod() { - int num_tiles; - num_tiles = HASH_COUNT(screen); - printf("Number of tiles: %d\n", num_tiles); - return sylvan_true; + LACE_ME; + + BDDVAR vars[] = {0,2,4}; + BDDVAR all_vars[] = {4,5}; + + BDDSET vars_set = sylvan_set_fromarray(vars, 3); + BDDSET all_vars_set = sylvan_set_fromarray(all_vars, 2); + + BDD s, t, next, prev; + BDD zeroes, ones; + + // transition relation: 000 --> 111 and !000 --> 000 + t = sylvan_false; + //t = sylvan_union_cube(t, all_vars_set, ((uint8_t[]){0,1,0,1,0,1})); + //t = sylvan_union_cube(t, all_vars_set, ((uint8_t[]){1,0,2,0,2,0})); + //t = sylvan_union_cube(t, all_vars_set, ((uint8_t[]){2,0,1,0,2,0})); + t = sylvan_union_cube(t, all_vars_set, ((uint8_t[]){1,0})); + + s = sylvan_cube(vars_set, (uint8_t[]){0,0,1}); + zeroes = sylvan_cube(vars_set, (uint8_t[]){0,0,0}); + ones = sylvan_cube(vars_set, (uint8_t[]){0,0,1}); + + next = sylvan_relnext(s, t, all_vars_set); + prev = sylvan_relprev(t, next, all_vars_set); + if (next == zeroes) printf("Pass 1\n"); + if (prev == ones || prev == zeroes) printf("Pass 2\n"); + + return 0; } -void test() +BDD create_single_rel(sokoban_screen *screen, direction dir) { + LACE_ME; + BDD t = sylvan_false; + bimap *bm = create_bimap_helper(screen); + int x = 0; + int y = 0; + bddvar_xy_map *bddxy = NULL; + int xdelta = 0; + int ydelta = 0; + int xgamma = 0; + int ygamma = 0; + switch(dir){ + case LEFT: + xdelta = -1; + ydelta = 0; + xgamma = -2; + ygamma = 0; + break; + case UP: + xdelta = 0; + ydelta = -1; + xgamma = 0; + ygamma = -2; + break; + case RIGHT: + xdelta = 1; + ydelta = 0; + xgamma = 2; + ygamma = 0; + break; + case DOWN: + xdelta = 0; + ydelta = 1; + xgamma = 0; + ygamma = 2; + break; + } - printf("Test!\n"); - BDD a = sylvan_true; - BDD b = sylvan_not(a); - if (b == sylvan_false){ - printf("BDD works!\n"); - } else { - printf("BDD does not work!\n"); + for (unsigned int i = 0; i < HASH_COUNT(screen); i++){ + bddxy = getbdd(i*3, bm->t); + x = bddxy->value.x; + y = bddxy->value.y; + if (check_space(x, y, dir, 1, bm) == 0){ + sokoban_screen *tmp_scr = get_coord(x, y, screen); + if (tmp_scr->tile == AGENT){ + //1 1 0 0 1 1 (1 0 1 -> 1 0 1) + BDDVAR relvars[6] = {i * 3, i * 3 + 1, i * 3 + 2, i * 3 + 3, i * 3 + 4, i * 3 + 5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 6); + uint8_t rel_enc[6] = {1, 1, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT){ + //1 1 1 1 0 0 (1 1 0 -> 1 1 0) + BDDVAR relvars[6] = {i * 3, i * 3 + 1, i * 3 + 2, i * 3 + 3, i * 3 + 4, i * 3 + 5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 6); + uint8_t rel_enc[6] = {1, 1, 1, 1, 0, 0}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + } + else if (check_space(x, y, dir, 1, bm) == 1 && check_space(x, y, dir, 2, bm) == 0){ + sokoban_screen *tmp_scr = get_coord(x, y, screen); + sokoban_screen *tmp_scr_d = get_coord(x + xdelta, y + ydelta, screen); + xy_bddvar_map *bddvar = getxy(x + xdelta, y + ydelta, bm->f); + int deltai = bddvar->value.var[0]; + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == FREE){ + //(0 1 0 0 1 1 1 0 0 0 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == TARGET){ + //(0 1 1 0 1 1 1 0 0 1 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == FREE){ + //(0 1 0 1 1 0 1 0 1 0 0 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == TARGET){ + //(0 1 1 1 1 0 1 0 1 1 0 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == BOX){ + //(0 0 1 1 0 0 1 1 0 0 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == TARGBOX){ + //(1 1 0 0 0 0 1 1 0 0 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == BOX){ + //(0 0 1 1 0 0 1 1 1 1 0 0) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == TARGBOX){ + //(1 1 0 0 0 0 1 1 1 1 0 0) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + } + else if (check_space(x, y, dir, 1, bm) == 1 && check_space(x, y, dir, 2, bm) == 1){ + sokoban_screen *tmp_scr = get_coord(x, y, screen); + sokoban_screen *tmp_scr_d = get_coord(x + xdelta, y + ydelta, screen); + sokoban_screen *tmp_scr_g = get_coord(x + xgamma, y + ygamma, screen); + xy_bddvar_map *bddvar = getxy(x + xdelta, y + ydelta, bm->f); + int deltai = bddvar->value.var[0]; + bddvar = getxy(x + xgamma, y + ygamma, bm->f); + int gammai = bddvar->value.var[0]; + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == FREE){ + //(0 1 0 0 1 1 1 0 0 0 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == TARGET){ + //(0 1 1 0 1 1 1 0 0 1 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == FREE){ + //(0 1 0 1 1 0 1 0 1 0 0 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == TARGET){ + //(0 1 1 1 1 0 1 0 1 1 0 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d-> tile == BOX && tmp_scr_g->tile == BOX){ + //(0 0 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d-> tile == BOX && tmp_scr_g->tile == TARGBOX){ + //(1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d-> tile == BOX && tmp_scr_g->tile == BOX){ + //(0 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 0 0) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d-> tile == BOX && tmp_scr_g->tile == TARGBOX){ + //(1 1 0 0 0 0 0 0 1 1 0 0 1 1 1 1 0 0) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == BOX && tmp_scr_g->tile == FREE){ + //free box agent -> box agent free + //(0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == TARGBOX && tmp_scr_g->tile == FREE){ + //(free targbox agent -> box targagent free) + //(0 0 0 1 1 0 1 1 0 1 0 0 1 0 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == BOX && tmp_scr_g->tile == TARGET){ + //(target box agent -> targbox agent free) + //(0 1 1 0 1 0 0 1 1 0 0 1 1 0 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == TARGBOX && tmp_scr_g->tile == TARGET){ + //(target targbox agent -> targbox targagent free) + //(0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == BOX && tmp_scr_g->tile == FREE){ + //(free box targagent -> box agent target) + //(0 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == TARGBOX && tmp_scr_g->tile == FREE){ + //(free targbox targagent -> box targagent target) + //(0 0 0 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == BOX && tmp_scr_g->tile == TARGET){ + //(target box targagent -> targbox agent target) + //(0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 1 0 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == TARGBOX && tmp_scr_g->tile == TARGET){ + //(target targbox targagent -> targbox targagent target) + //(0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + } } + return t; +} + +rels *encode_rel(sokoban_screen *screen) +{ LACE_ME; - BDD c = sylvan_ithvar(1); - if (sylvan_high(c) == sylvan_true && sylvan_low(c) == sylvan_false) printf("VAR works 1\n"); - if (sylvan_var(c) == 1) printf("Var works 2\n"); + + BDD tl = sylvan_false; + + //left relation + tl = create_single_rel(screen, LEFT); + /* + for (unsigned int i = 0; i < HASH_COUNT(screen); i++){ + printf("i:%d\n", i); + bddxy = getbdd(i*3, bm->t); + x = bddxy->value.x; + y = bddxy->value.y; + if (check_space(x, y, LEFT, 1, bm) == 0){ + sokoban_screen *tmp_scr = get_coord(x, y, screen); + if (tmp_scr->tile == AGENT){ + //1 1 0 0 1 1 (1 0 1 -> 1 0 1) + BDDVAR relvars[6] = {i * 3, i * 3 + 1, i * 3 + 2, i * 3 + 3, i * 3 + 4, i * 3 + 5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 6); + uint8_t rel_enc[6] = {1, 1, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT){ + //1 1 1 1 0 0 (1 1 0 -> 1 1 0) + BDDVAR relvars[6] = {i * 3, i * 3 + 1, i * 3 + 2, i * 3 + 3, i * 3 + 4, i * 3 + 5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 6); + uint8_t rel_enc[6] = {1, 1, 1, 1, 0, 0}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + } + else if (check_space(x, y, LEFT, 1, bm) == 1 && check_space(x, y, LEFT, 2, bm) == 0){ + sokoban_screen *tmp_scr = get_coord(x, y, screen); + sokoban_screen *tmp_scr_d = get_coord(x - 1, y, screen); + xy_bddvar_map *bddvar = getxy(x - 1, y, bm->f); + int deltai = bddvar->value.var[0]; + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == FREE){ + //(0 1 0 0 1 1 1 0 0 0 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == TARGET){ + //(0 1 1 0 1 1 1 0 0 1 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == FREE){ + //(0 1 0 1 1 0 1 0 1 0 0 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == TARGET){ + //(0 1 1 1 1 0 1 0 1 1 0 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == BOX){ + //(0 0 1 1 0 0 1 1 0 0 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == TARGBOX){ + //(1 1 0 0 0 0 1 1 0 0 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == BOX){ + //(0 0 1 1 0 0 1 1 1 1 0 0) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == TARGBOX){ + //(1 1 0 0 0 0 1 1 1 1 0 0) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + } + else if (check_space(x, y, LEFT, 1, bm) == 1 && check_space(x, y, LEFT, 2, bm) == 1){ + sokoban_screen *tmp_scr = get_coord(x, y, screen); + sokoban_screen *tmp_scr_d = get_coord(x - 1, y, screen); + sokoban_screen *tmp_scr_g = get_coord(x - 2, y, screen); + xy_bddvar_map *bddvar = getxy(x - 1, y, bm->f); + int deltai = bddvar->value.var[0]; + bddvar = getxy(x - 2, y, bm->f); + int gammai = bddvar->value.var[0]; + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == FREE){ + //(0 1 0 0 1 1 1 0 0 0 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == TARGET){ + //(0 1 1 0 1 1 1 0 0 1 1 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == FREE){ + //(0 1 0 1 1 0 1 0 1 0 0 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == TARGET){ + //(0 1 1 1 1 0 1 0 1 1 0 1) + BDDVAR relvars[12] = {deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 12); + uint8_t rel_enc[12] = {0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d-> tile == BOX && tmp_scr_g->tile == BOX){ + //(0 0 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d-> tile == BOX && tmp_scr_g->tile == TARGBOX){ + //(1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d-> tile == BOX && tmp_scr_g->tile == BOX){ + //(0 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 0 0) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d-> tile == BOX && tmp_scr_g->tile == TARGBOX){ + //(1 1 0 0 0 0 0 0 1 1 0 0 1 1 1 1 0 0) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == BOX && tmp_scr_g->tile == FREE){ + //free box agent -> box agent free + //(0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == TARGBOX && tmp_scr_g->tile == FREE){ + //(free targbox agent -> box targagent free) + //(0 0 0 1 1 0 1 1 0 1 0 0 1 0 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == BOX && tmp_scr_g->tile == TARGET){ + //(target box agent -> targbox agent free) + //(0 1 1 0 1 0 0 1 1 0 0 1 1 0 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == AGENT && tmp_scr_d->tile == TARGBOX && tmp_scr_g->tile == TARGET){ + //(target targbox agent -> targbox targagent free) + //(0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == BOX && tmp_scr_g->tile == FREE){ + //(free box targagent -> box agent target) + //(0 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == TARGBOX && tmp_scr_g->tile == FREE){ + //(free targbox targagent -> box targagent target) + //(0 0 0 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == BOX && tmp_scr_g->tile == TARGET){ + //(target box targagent -> targbox agent target) + //(0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 1 0 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + if (tmp_scr->tile == TARGAGENT && tmp_scr_d->tile == TARGBOX && tmp_scr_g->tile == TARGET){ + //(target targbox targagent -> targbox targagent target) + //(0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1) + BDDVAR relvars[18] = {gammai*3, gammai*3+1, gammai*3+2, gammai*3+3, gammai*3+4, gammai*3+5, deltai*3, deltai*3+1, deltai*3+2, deltai*3+3, deltai*3+4, deltai*3+5, i*3, i*3+1, i*3+2, i*3+3, i*3+4, i*3+5}; + BDDSET relvarset = sylvan_set_fromarray(relvars, 18); + uint8_t rel_enc[18] = {0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1}; + t = sylvan_union_cube(t, relvarset, rel_enc); + } + } + } + */ + + //up relation + BDD tu = create_single_rel(screen, UP); + + //right relation + BDD tr = create_single_rel(screen, RIGHT); + + //down relation + BDD td = create_single_rel(screen, DOWN); + + rels *rls = NULL; + rls = (rels *)malloc(sizeof(rels)); + rls->rell = &tl; + rls->relu = &tu; + rls->relr = &tr; + rls->reld = &td; + + return rls; }