diff options
| author | Sebastiano Tronto <sebastiano.tronto@gmail.com> | 2021-12-26 19:38:28 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano.tronto@gmail.com> | 2021-12-26 19:38:28 +0100 |
| commit | 975e3eafbae15b93a1a4f160dd781d359a6c717b (patch) | |
| tree | dc6b05fcb57a64014c260ce43baa222386e5140f /src/solve.c | |
| parent | b82df53eb461506984eb2b6a9b53e445b75e46af (diff) | |
| download | nissy-975e3eafbae15b93a1a4f160dd781d359a6c717b.tar.gz nissy-975e3eafbae15b93a1a4f160dd781d359a6c717b.zip | |
Added two-phase solver
Diffstat (limited to '')
| -rw-r--r-- | src/solve.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/solve.c b/src/solve.c index 5a72bba..cfb2bd3 100644 --- a/src/solve.c +++ b/src/solve.c | |||
| @@ -438,3 +438,54 @@ solve(Cube cube, Step *step, SolveOptions *opts) | |||
| 438 | 438 | ||
| 439 | return sols; | 439 | return sols; |
| 440 | } | 440 | } |
| 441 | |||
| 442 | /* TODO: make more general! */ | ||
| 443 | Alg * | ||
| 444 | solve_2phase(Cube cube, int nthreads) | ||
| 445 | { | ||
| 446 | int bestlen, newb; | ||
| 447 | Alg *bestalg; | ||
| 448 | AlgList *sols1, *sols2; | ||
| 449 | AlgListNode *i; | ||
| 450 | Cube c; | ||
| 451 | SolveOptions opts1, opts2; | ||
| 452 | |||
| 453 | opts1.min_moves = 0; | ||
| 454 | opts1.max_moves = 13; | ||
| 455 | opts1.max_solutions = 100; | ||
| 456 | opts1.nthreads = nthreads; | ||
| 457 | opts1.optimal = 3; | ||
| 458 | opts1.can_niss = false; | ||
| 459 | opts1.verbose = false; | ||
| 460 | opts1.all = true; | ||
| 461 | |||
| 462 | opts2.min_moves = 0; | ||
| 463 | opts2.max_moves = 19; | ||
| 464 | opts2.max_solutions = 1; | ||
| 465 | opts2.nthreads = nthreads; | ||
| 466 | opts2.can_niss = false; | ||
| 467 | opts2.verbose = false; | ||
| 468 | |||
| 469 | sols1 = solve(cube, &drany_HTM, &opts1); | ||
| 470 | bestalg = new_alg(""); | ||
| 471 | bestlen = 999; | ||
| 472 | for (i = sols1->first; i != NULL; i = i->next) { | ||
| 473 | c = apply_alg(i->alg, cube); | ||
| 474 | sols2 = solve(c, &dranyfin_DR, &opts2); | ||
| 475 | |||
| 476 | if (sols2->len > 0) { | ||
| 477 | newb = i->alg->len + sols2->first->alg->len; | ||
| 478 | if (newb < bestlen) { | ||
| 479 | bestlen = newb; | ||
| 480 | copy_alg(i->alg, bestalg); | ||
| 481 | compose_alg(bestalg, sols2->first->alg); | ||
| 482 | } | ||
| 483 | } | ||
| 484 | |||
| 485 | free_alglist(sols2); | ||
| 486 | } | ||
| 487 | |||
| 488 | free_alglist(sols1); | ||
| 489 | |||
| 490 | return bestalg; | ||
| 491 | } | ||
