solver: select skyline candidate policy

Make candidate ordering an explicit deterministic policy and benchmark ascending, descending, and exact-width-first choices. Keep ascending as the default because it produces the best measured time to first solution despite best-fit's slightly smaller tree.

Retain the benchmark v1 interface and document why randomized and duplicate-work portfolio policies are deferred.

Tests: Release and Debug CTest (10 passed each)

Refs: #12
This commit was merged in pull request #24.
This commit is contained in:
Codex instance
2026-07-30 18:07:29 +01:00
parent d751d1b13e
commit 74bde266d0
6 changed files with 141 additions and 49 deletions
+12 -8
View File
@@ -12,14 +12,18 @@ ctest --test-dir build --output-on-failure
The tests independently check board dimensions, square multiplicities, bounds,
overlap, and complete coverage. They cover small unsatisfiable solver inputs, a
known order-8 solution, invalid placement diagnostics, and construction of an
order-9 solution from the order-8 fixture. The routed order-9 solver test
checks that its search counters exactly match order 8. The skyline tests check
smallest-width valley selection and deterministic tie-breaking, validate an
order-8 result with descending candidates, and independently validate a direct
order-9 search with ascending candidates. That direct test is deliberately
separate from the public order-9 route, which uses even-predecessor
construction. The rendering test also formats the known order-8 solution and
checks the resulting grid dimensions and coverage.
order-9 solution from the order-8 fixture. The routed best-fit order-9 solver
test checks that its search counters exactly match order 8. The skyline tests
check smallest-width valley selection and deterministic tie-breaking, validate
an order-8 result with descending candidates, and independently validate a
direct order-9 search with ascending candidates. An
exhaustive infeasible order also checks that all three policies visit the same
search space. The direct order-9 test is deliberately separate from the
public order-9 route, which uses even-predecessor construction. Orders 10 and
11 are not routine tests because both public routes require the same long
direct order-10 search; the route-boundary test still checks that order 11
selects odd construction. The rendering test also formats the known order-8
solution and checks the resulting grid dimensions and coverage.
When Python is available, `reference-support` also tests the dependency-free
placement JSON validator. If the optional OR-Tools package is present, it