* It seems that the move variable is not necessary since non-deterministic moves can be emvedded
* directly in transition relations.
*/
-
state *encode_screen(sokoban_screen *screen)
{
LACE_ME;
fullState->vars.varset = varset;
fullState->vars.size = HASH_COUNT(screen) * 3;
int tile_index = 0;
- sokoban_screen *r;
- for(r=screen; r != NULL; r = (sokoban_screen *)(r->hh.next)){
+ for(sokoban_screen *r=screen; r != NULL; r = r->hh.next){
switch(r->tile){
case FREE: //001
- st_enc[tile_index] = 0;
- tile_index++;
- st_enc[tile_index] = 0;
- tile_index++;
- st_enc[tile_index] = 1;
- tile_index++;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 1;
break;
case WALL: //000
- st_enc[tile_index] = 0;
- tile_index++;
- st_enc[tile_index] = 0;
- tile_index++;
- st_enc[tile_index] = 0;
- tile_index++;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 0;
break;
case BOX: //010
- st_enc[tile_index] = 0;
- tile_index++;
- st_enc[tile_index] = 1;
- tile_index++;
- st_enc[tile_index] = 0;
- tile_index++;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 1;
+ st_enc[tile_index++] = 0;
break;
case TARGET: //011
- st_enc[tile_index] = 0;
- tile_index++;
- st_enc[tile_index] = 1;
- tile_index++;
- st_enc[tile_index] = 1;
- tile_index++;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 1;
+ st_enc[tile_index++] = 1;
break;
case AGENT: //101
- st_enc[tile_index] = 1;
- tile_index++;
- st_enc[tile_index] = 0;
- tile_index++;
-
- st_enc[tile_index] = 1;
- tile_index++;
+ st_enc[tile_index++] = 1;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 1;
break;
case TARGAGENT: //110
- st_enc[tile_index] = 1;
- tile_index++;
- st_enc[tile_index] = 1;
- tile_index++;
- st_enc[tile_index] = 0;
- tile_index++;
+ st_enc[tile_index++] = 1;
+ st_enc[tile_index++] = 1;
+ st_enc[tile_index++] = 0;
break;
case TARGBOX: //100
- st_enc[tile_index] = 1;
- tile_index++;
- st_enc[tile_index] = 0;
- tile_index++;
- st_enc[tile_index] = 0;
- tile_index++;
+ st_enc[tile_index++] = 1;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 0;
break;
}
}
s = sylvan_cube(varset, st_enc);
fullState->bdd = s;
- printf("Initial state encoded\n");
return fullState;
}
-//test
-int countTrans(trans_t *trs);
+state *encode_goal(sokoban_screen *screen){
+ 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;
+ for(sokoban_screen *r=screen; r != NULL; r=r->hh.next){
+ switch(r->tile){
+ case FREE: //001 -> any
+ st_enc[tile_index++] = 2;
+ st_enc[tile_index++] = 2;
+ st_enc[tile_index++] = 2;
+ break;
+ case WALL: //000 -> stays the same
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 0;
+ break;
+ case BOX: //010 -> any
+ st_enc[tile_index++] = 2;
+ st_enc[tile_index++] = 2;
+ st_enc[tile_index++] = 2;
+ break;
+ case TARGET: //011 -> targbox
+ st_enc[tile_index++] = 1;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 0;
+ break;
+ case AGENT: //101 -> any
+ st_enc[tile_index++] = 2;
+ st_enc[tile_index++] = 2;
+ st_enc[tile_index++] = 2;
+ break;
+ case TARGAGENT: //110 -> targbox
+ st_enc[tile_index++] = 1;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 0;
+ break;
+ case TARGBOX: //100 -> stays the same
+ st_enc[tile_index++] = 1;
+ st_enc[tile_index++] = 0;
+ st_enc[tile_index++] = 0;
+ break;
+ }
+ }
+ s = sylvan_cube(varset, st_enc);
+ fullState->bdd = s;
+ return fullState;
+}
trans_t *create_single_rel(sokoban_screen *screen, direction dir)
{
trs_current->next_rel = trs;
trs = trs_current;
- }
- else if (check_space(x, y, dir, 1, bm) == 1 && check_space(x, y, dir, 2, bm) == 0){
+ } else if (check_space(x, y, dir, 1, bm) == 1 && check_space(x, y, dir, 2, bm) == 0){
xy_bddvar_map *bddvar = getxy(x + xdelta, y + ydelta, bm->f);
unsigned int deltai = bddvar->value.var[0];
//Agent Free -> Free Agent
BDDVAR relvars[12] = {i*6, i*6+1, i*6+2, i*6+3, i*6+4, i*6+5, deltai, deltai+1, deltai+2, deltai+3, deltai+4, deltai+5};
BDDSET relvarset = sylvan_set_fromarray(relvars, 12);
uint8_t rel_enc[12];
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc0[12] = {1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1};
memcpy(rel_enc, rel_enc0, 12*sizeof(uint8_t));
}
//or
//(0 1 1 1 1 0 1 0 0 0 1 1)
relvarset = sylvan_set_fromarray(relvars, 12);
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc2[12] = {1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0};
memcpy(rel_enc, rel_enc2, 12*sizeof(uint8_t));
}
//or
//(0 1 0 0 1 1 1 0 1 1 0 1)
relvarset = sylvan_set_fromarray(relvars, 12);
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc3[12] = {1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1};
memcpy(rel_enc, rel_enc3, 12*sizeof(uint8_t));
}
//or
//(0 1 1 1 1 0 1 0 1 1 0 1)
relvarset = sylvan_set_fromarray(relvars, 12);
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc4[12] = {1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0};
memcpy(rel_enc, rel_enc4, 12*sizeof(uint8_t));
}
//or
//(0 0 1 1 0 0 1 1 0 0 1 1)
relvarset = sylvan_set_fromarray(relvars, 12);
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc5[12] = {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc, rel_enc5, 12*sizeof(uint8_t));
}
//
//(1 1 0 0 0 0 1 1 0 0 1 1)
relvarset = sylvan_set_fromarray(relvars, 12);
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc6[12] = {1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0};
memcpy(rel_enc, rel_enc6, 12*sizeof(uint8_t));
}
//or
//(0 0 1 1 0 0 1 1 1 1 0 0)
relvarset = sylvan_set_fromarray(relvars, 12);
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc7[12] = {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc, rel_enc7, 12*sizeof(uint8_t));
}
//or
//(1 1 0 0 0 0 1 1 1 1 0 0)
relvarset = sylvan_set_fromarray(relvars, 12);
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc8[12] = {1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0};
memcpy(rel_enc, rel_enc8, 12*sizeof(uint8_t));
}
trs_current->varset.size = 12;
trs_current->next_rel = trs;
trs = trs_current;
-
-
- }
- else if (check_space(x, y, dir, 1, bm) == 1 && check_space(x, y, dir, 2, bm) == 1){
+ } else if (check_space(x, y, dir, 1, bm) == 1 && check_space(x, y, dir, 2, bm) == 1){
xy_bddvar_map *bddvar = getxy(x + xdelta, y + ydelta, bm->f);
unsigned int deltai = bddvar->value.var[0];
bddvar = getxy(x + xgamma, y + ygamma, bm->f);
BDDVAR relvars[12] = {i*6, i*6+1, i*6+2, i*6+3, i*6+4, i*6+5, deltai, deltai+1, deltai+2, deltai+3, deltai+4, deltai+5};
BDDSET relvarset = sylvan_set_fromarray(relvars, 12);
uint8_t rel_enc[12];
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc_[12] = {1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1};
memcpy(rel_enc, rel_enc_, 12*sizeof(uint8_t));
}
//or
//(0 1 1 1 1 0 1 0 0 0 1 1)
relvarset = sylvan_set_fromarray(relvars, 12);
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc9[12] = {1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0};
memcpy(rel_enc, rel_enc9, 12*sizeof(uint8_t));
}
//or
//(0 1 0 0 1 1 1 0 1 1 0 1)
relvarset = sylvan_set_fromarray(relvars, 12);
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc10[12] = {1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1};
memcpy(rel_enc, rel_enc10, 12*sizeof(uint8_t));
}
//or
//(0 1 1 1 1 0 1 0 1 1 0 1)
relvarset = sylvan_set_fromarray(relvars, 12);
- if (i < deltai){
+ if (i*6 < deltai){
uint8_t rel_enc11[12] = {1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0};
memcpy(rel_enc, rel_enc11, 12*sizeof(uint8_t));
}
BDDVAR relvars1[18] = {i*6, i*6+1, i*6+2, i*6+3, i*6+4, i*6+5, deltai, deltai+1, deltai+2, deltai+3, deltai+4, deltai+5, gammai, gammai+1, gammai+2, gammai+3, gammai+4, gammai+5};
BDD relvarset1 = sylvan_set_fromarray(relvars1, 18);
uint8_t rel_enc1[18];
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
//or
//(1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 1 1) (gamma delta i)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
//or
//(0 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 0 0)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
//or
//(1 1 0 0 0 0 0 0 1 1 0 0 1 1 1 1 0 0)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
//or
//(0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
uint8_t rel_enc__[18] = {0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
+
trs_current = (trans_t *)malloc(sizeof(trans_t));
+
trs_current->bdd = sylvan_cube(relvarset1, rel_enc1);
trs_current->varset.varset = relvarset1;
trs_current->varset.size = 18;
//or
//(0 0 0 1 1 0 1 1 0 1 0 0 1 0 0 0 1 1)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
//or
//(0 1 1 0 1 0 0 1 1 0 0 1 1 0 0 0 1 1)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
//or
//(0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 1)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
//or
//(0 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 1)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
//or
//(0 0 0 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1 ,1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
//or
//(0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 1 0 1)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
//or
//(1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 0 1 0)
relvarset1 = sylvan_set_fromarray(relvars1, 18);
- if (i < deltai && deltai < gammai){
+ if (i*6 < deltai && deltai < gammai){
uint8_t rel_enc__[18] = {1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < gammai && gammai < i){
+ else if (deltai < gammai && gammai < i*6){
uint8_t rel_enc__[18] = {1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (gammai < i && i < deltai){
+ else if (gammai < i*6 && i*6 < deltai){
uint8_t rel_enc__[18] = {0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (i < gammai && gammai < deltai){
+ else if (i*6 < gammai && gammai < deltai){
uint8_t rel_enc__[18] = {1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
- else if (deltai < i && i < gammai){
+ else if (deltai < i*6 && i*6 < gammai){
uint8_t rel_enc__[18] = {1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0};
memcpy(rel_enc1, rel_enc__, 18*sizeof(uint8_t));
}
trs_current->next_rel = trs;
trs = trs_current;
}
+
}
trs_current = trs;
-
- //test
- /*
- switch(dir){
- case LEFT:
- if (trs_current != NULL) printf("LEFT ok!\n");
- else printf ("LEFT is empty\n");
- printf("Num of trans relations:%d\n", countTrans(trs));
- break;
- case UP:
- if (trs_current != NULL) printf("UP ok!\n");
- else printf ("UP is empty\n");
- printf("Num of trans relations:%d\n", countTrans(trs));
- break;
- case RIGHT:
- if (trs_current != NULL) printf("RIGHT ok!\n");
- else printf ("RIGHT is empty\n");
- printf("Num of trans relations:%d\n", countTrans(trs));
- break;
- case DOWN:
- if (trs_current != NULL) printf("DOWN ok!\n");
- else printf ("DOWN is empty\n");
- printf("Num of trans relations:%d\n", countTrans(trs));
- break;
- }
- */
return trs;
}
-//test
-int countTrans(trans_t *trs)
-{
- int counter = 0;
- while (trs != NULL){
- counter++;
- trs = trs->next_rel;
- }
- return counter;
-}
-
rels *encode_rel(sokoban_screen *screen)
{
LACE_ME;
//left relation
tl = create_single_rel(screen, LEFT);
-
- //up relation
trans_t *tu = create_single_rel(screen, UP);
-
- //right relation
trans_t *tr = create_single_rel(screen, RIGHT);
-
- //down relation
trans_t *td = create_single_rel(screen, DOWN);
rels *rls = NULL;
return rls;
}
-
-int test_trans(state *s, trans_t *t)
-{
- LACE_ME;
- int counter = 0;
- BDD next = sylvan_false;
- while (t != NULL){
- next = sylvan_relnext(s->bdd, t->bdd, t->varset.varset);
- if (next == s->bdd) printf("Same\n");
- if (next != s->bdd && next != sylvan_false) printf("Different\n");
- if (next == sylvan_false) printf("False\n");
- t = t->next_rel;
- }
- printf("Trans:%d\n", counter);
- return 1;
-}