586095fb08384998567433b89a9b17612b5dba7e
10 #include <gperftools/profiler.h>
22 * Each coordinate has three related boolean variables. The combination of those boolean variables
30 * 110: Agent on target
31 * In the BDD representation, the state is represented by n * 3 variables, where n is the number of
32 * tiles in the shrinked screen.
33 * It seems that the move variable is not necessary since non-deterministic moves can be emvedded
34 * directly in transition relations.
37 BDD
encode_screen(sokoban_screen
*screen
)
39 BDD state
= sylvan_false
;
43 for(r
=screen
; r
!= NULL
; r
= (sokoban_screen
*)(r
->hh
.next
)){
46 if (state
== sylvan_false
){
47 state
= sylvan_not(sylvan_ithvar(tile_index
));
49 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
51 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
55 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
57 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
59 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
64 if (state
== sylvan_false
){
65 state
= sylvan_not(sylvan_ithvar(tile_index
));
67 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
69 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
73 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
75 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
77 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
82 if (state
== sylvan_false
){
83 state
= sylvan_not(sylvan_ithvar(tile_index
));
85 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
87 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
91 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
93 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
95 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
100 if (state
== sylvan_false
){
101 state
= sylvan_not(sylvan_ithvar(tile_index
));
103 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
105 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
109 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
111 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
113 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
118 if (state
== sylvan_false
){
119 state
= sylvan_ithvar(tile_index
);
121 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
123 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
127 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
129 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
131 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
136 if (state
== sylvan_false
){
137 state
= sylvan_ithvar(tile_index
);
139 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
141 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
145 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
147 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
149 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
154 if (state
== sylvan_false
){
155 state
= sylvan_ithvar(tile_index
);
157 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
159 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
163 state
= sylvan_and(state
, sylvan_ithvar(tile_index
));
165 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
167 state
= sylvan_and(state
, sylvan_not(sylvan_ithvar(tile_index
)));
173 printf("%d tiles were encoded\n", tile_index
);
177 BDD
encode_rel(sokoban_screen
*screen
)
180 num_tiles
= HASH_COUNT(screen
);
181 printf("Number of tiles: %d\n", num_tiles
);
190 BDD b
= sylvan_not(a
);
191 if (b
== sylvan_false
){
192 printf("BDD works!\n");
194 printf("BDD does not work!\n");
197 BDD c
= sylvan_ithvar(1);
198 if (sylvan_high(c
) == sylvan_true
&& sylvan_low(c
) == sylvan_false
) printf("VAR works 1\n");
199 if (sylvan_var(c
) == 1) printf("Var works 2\n");