aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pruning.c237
1 files changed, 116 insertions, 121 deletions
diff --git a/src/pruning.c b/src/pruning.c
index 2c6f348..40f273d 100644
--- a/src/pruning.c
+++ b/src/pruning.c
@@ -91,59 +91,6 @@ pd_khuge_HTM = {
91 .moveset = moveset_HTM, 91 .moveset = moveset_HTM,
92}; 92};
93 93
94/*
95void
96genptable(PruneData *pd)
97{
98 Move *ms;
99 uint64_t j, oldn;
100 DfsData dd;
101
102 if (pd->generated)
103 return;
104
105 pd->ptable = malloc(ptablesize(pd) * sizeof(uint8_t));
106
107 if (read_ptable_file(pd)) {
108 pd->generated = true;
109 return;
110 }
111 pd->generated = true;
112
113 fprintf(stderr, "Cannot load %s, generating it\n", pd->filename);
114
115 ms = malloc(NMOVES * sizeof(Move));
116 moveset_to_list(pd->moveset, ms);
117
118 for (j = 0; j < pd->coord->max; j++)
119 ptable_update_index(pd, j, 15);
120
121 dd = (DfsData) { .m = 0 };
122 dd.visited = malloc((ptablesize(pd)/4 + 1) * sizeof(uint8_t));
123 dd.sorted_moves = malloc(NMOVES * sizeof(Move));
124 moveset_to_list(pd->moveset, dd.sorted_moves);
125 oldn = 0;
126 pd->n = 0;
127
128 for (dd.d = 0; dd.d < 15 && pd->n < pd->coord->max; dd.d++) {
129 for (j = 0; j < pd->coord->max; j++)
130 dfs_set_visited_index(&dd, j, false);
131 genptable_dfs((Cube){0}, pd, &dd);
132 fprintf(stderr, "Depth %d done, generated %"
133 PRIu64 "\t(%" PRIu64 "/%" PRIu64 ")\n",
134 dd.d+1, pd->n - oldn, pd->n, pd->coord->max);
135 oldn = pd->n;
136 }
137
138 if (!write_ptable_file(pd))
139 fprintf(stderr, "Error writing ptable file\n");
140
141 free(ms);
142 free(dd.visited);
143 free(dd.sorted_moves);
144}
145*/
146
147void 94void
148genptable(PruneData *pd) 95genptable(PruneData *pd)
149{ 96{
@@ -194,74 +141,6 @@ genptable(PruneData *pd)
194 free(ms); 141 free(ms);
195} 142}
196 143
197/*
198static void
199genptable_dfs(Cube c, PruneData *pd, DfsData *dd)
200{
201 int i, j, pv;
202 Move mm;
203 Cube cc;
204
205 pv = ptableval(pd, c);
206
207 if (pv < dd->m || dd->m > dd->d)
208 return;
209
210 if (dfs_get_visited(pd, dd, c))
211 return;
212 dfs_set_visited(pd, dd, c, true);
213
214 if (pv != dd->m)
215 ptable_update(pd, c, dd->m);
216
217 for (i = 0; i < pd->coord->ntrans; i++) {
218 cc = i == 0 ? c :
219 apply_trans(pd->coord->trans[i], c);
220 for (j = 0; dd->sorted_moves[j] != NULLMOVE; j++) {
221 mm = dd->sorted_moves[j];
222 dd->m++;
223 genptable_dfs(apply_move(mm, cc), pd, dd);
224 dd->m--;
225 }
226 }
227}
228*/
229
230/*
231static bool
232dfs_get_visited(PruneData *pd, DfsData *dd, Cube c)
233{
234 return dfs_get_visited_index(dd, pd->coord->index(c));
235}
236*/
237
238/*
239static bool
240dfs_get_visited_index(DfsData *dd, uint64_t ind)
241{
242 return dd->visited[ind/8] & ((uint8_t)1 << (ind % 8));
243}
244*/
245
246/*
247static void
248dfs_set_visited(PruneData *pd, DfsData *dd, Cube c, bool b)
249{
250 dfs_set_visited_index(dd, pd->coord->index(c), b);
251}
252*/
253
254/*
255static void
256dfs_set_visited_index(DfsData *dd, uint64_t ind, bool b)
257{
258 if (b)
259 dd->visited[ind/8] |= ((uint8_t)1 << (ind % 8));
260 else
261 dd->visited[ind/8] &= ~((uint8_t)1 << (ind % 8));
262}
263*/
264
265static void 144static void
266genptable_bfs(PruneData *pd, int d, Move *ms) 145genptable_bfs(PruneData *pd, int d, Move *ms)
267{ 146{
@@ -397,3 +276,119 @@ write_ptable_file(PruneData *pd)
397 return written == ptablesize(pd); 276 return written == ptablesize(pd);
398} 277}
399 278
279/*
280 I'll put here all the leftover code from the genptable-dfs attempt.
281 Might be useful in the future.
282*/
283
284/*
285void
286genptable(PruneData *pd)
287{
288 Move *ms;
289 uint64_t j, oldn;
290 DfsData dd;
291
292 if (pd->generated)
293 return;
294
295 pd->ptable = malloc(ptablesize(pd) * sizeof(uint8_t));
296
297 if (read_ptable_file(pd)) {
298 pd->generated = true;
299 return;
300 }
301 pd->generated = true;
302
303 fprintf(stderr, "Cannot load %s, generating it\n", pd->filename);
304
305 ms = malloc(NMOVES * sizeof(Move));
306 moveset_to_list(pd->moveset, ms);
307
308 for (j = 0; j < pd->coord->max; j++)
309 ptable_update_index(pd, j, 15);
310
311 dd = (DfsData) { .m = 0 };
312 dd.visited = malloc((ptablesize(pd)/4 + 1) * sizeof(uint8_t));
313 dd.sorted_moves = malloc(NMOVES * sizeof(Move));
314 moveset_to_list(pd->moveset, dd.sorted_moves);
315 oldn = 0;
316 pd->n = 0;
317
318 for (dd.d = 0; dd.d < 15 && pd->n < pd->coord->max; dd.d++) {
319 for (j = 0; j < pd->coord->max; j++)
320 dfs_set_visited_index(&dd, j, false);
321 genptable_dfs((Cube){0}, pd, &dd);
322 fprintf(stderr, "Depth %d done, generated %"
323 PRIu64 "\t(%" PRIu64 "/%" PRIu64 ")\n",
324 dd.d+1, pd->n - oldn, pd->n, pd->coord->max);
325 oldn = pd->n;
326 }
327
328 if (!write_ptable_file(pd))
329 fprintf(stderr, "Error writing ptable file\n");
330
331 free(ms);
332 free(dd.visited);
333 free(dd.sorted_moves);
334}
335
336static void
337genptable_dfs(Cube c, PruneData *pd, DfsData *dd)
338{
339 int i, j, pv;
340 Move mm;
341 Cube cc;
342
343 pv = ptableval(pd, c);
344
345 if (pv < dd->m || dd->m > dd->d)
346 return;
347
348 if (dfs_get_visited(pd, dd, c))
349 return;
350 dfs_set_visited(pd, dd, c, true);
351
352 if (pv != dd->m)
353 ptable_update(pd, c, dd->m);
354
355 for (i = 0; i < pd->coord->ntrans; i++) {
356 cc = i == 0 ? c :
357 apply_trans(pd->coord->trans[i], c);
358 for (j = 0; dd->sorted_moves[j] != NULLMOVE; j++) {
359 mm = dd->sorted_moves[j];
360 dd->m++;
361 genptable_dfs(apply_move(mm, cc), pd, dd);
362 dd->m--;
363 }
364 }
365}
366
367static bool
368dfs_get_visited(PruneData *pd, DfsData *dd, Cube c)
369{
370 return dfs_get_visited_index(dd, pd->coord->index(c));
371}
372
373static bool
374dfs_get_visited_index(DfsData *dd, uint64_t ind)
375{
376 return dd->visited[ind/8] & ((uint8_t)1 << (ind % 8));
377}
378
379static void
380dfs_set_visited(PruneData *pd, DfsData *dd, Cube c, bool b)
381{
382 dfs_set_visited_index(dd, pd->coord->index(c), b);
383}
384
385static void
386dfs_set_visited_index(DfsData *dd, uint64_t ind, bool b)
387{
388 if (b)
389 dd->visited[ind/8] |= ((uint8_t)1 << (ind % 8));
390 else
391 dd->visited[ind/8] &= ~((uint8_t)1 << (ind % 8));
392}
393
394*/

Generated with cgit - Back to sebastiano.tronto.net