Retaining a better valid plan reconciled its optimization provenance, which evaluated every active objective once per credited placement with that placement released. Only the credited objectives are compared, so the released plan now evaluates just those and skips observing the others. Retention also stops computing quality metrics that nothing read. The retained plan and what Cancel returns are unchanged. Part of #302. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
62 lines
3.2 KiB
Markdown
62 lines
3.2 KiB
Markdown
# Issue #302: plan from the best-ranked obligation solution
|
|
|
|
Step-by-step record for [issue #302](https://gitea.nessar.fr/nessar/vac-optimizer/issues/302).
|
|
The exact steps keep planning outcomes, stable explanations and final states
|
|
identical to the frozen engine at `a871f8f`. The
|
|
[frozen-engine differential check](README.md#frozen-engine-differential-check),
|
|
including its cancelled asynchronous comparisons, passes after every step.
|
|
|
|
## Per-step measurements
|
|
|
|
Each step was timed against its parent in the same session, on the development
|
|
machine (AMD Ryzen 7 7800X3D, WSL2, Bun 1.4.3), with no other test, build or
|
|
profiling workload running. Both commits' cores were bundled with the
|
|
frozen-engine build command and called through `calculatePlanningAsyncInternal`
|
|
in one Bun process, with `calculationDate: '2024-01-01'`. This is the
|
|
benchmark's in-thread asynchronous path, without the planning-calculation
|
|
service. For every scenario, each engine ran one warm-up and then one measured
|
|
calculation, alternating engines. Outcomes, explanations and final states were
|
|
hashed; every pair below matched. Only same-session pairs are comparable.
|
|
|
|
### Reuse the donor ranking across public-holiday weeks
|
|
|
|
For every public-holiday week, the holiday-week stage ranked every placement as
|
|
a potential donor by releasing it and evaluating the active objectives. That
|
|
ranking depends only on the plan, so the weeks of one plan now share each
|
|
placement's released objectives. Each week still skips its own dates and walks
|
|
the placements in the same order with the same yields.
|
|
|
|
| Scenario | Before (s) | After (s) |
|
|
| --------------------------- | ---------: | --------: |
|
|
| representative year | 0.66 | 0.66 |
|
|
| typed obligations | 5.11 | 4.89 |
|
|
| chained earned entitlements | 0.02 | 0.02 |
|
|
| deliberate conflict | 0.01 | 0.01 |
|
|
| loaded year | 58.26 | 57.75 |
|
|
| two years | 2.27 | 1.82 |
|
|
| three years | 7.45 | 5.52 |
|
|
|
|
### Retain the best valid plan more cheaply
|
|
|
|
Retaining a better valid plan for cancellation reconciled its optimization
|
|
provenance. For every placement credited by an optimization rule, that
|
|
evaluated all active objectives with the placement released. Only the credited
|
|
objectives are compared, so the released plan now evaluates just those, and
|
|
the calendar observations of the other objectives are no longer computed.
|
|
Retention also no longer computes quality metrics that nothing read. An
|
|
instrumented three-year run spent 1.16 of its 1.22 retention seconds in that
|
|
reconciliation; afterwards retention took 0.26 seconds.
|
|
|
|
| Scenario | Before (s) | After (s) |
|
|
| --------------------------- | ---------: | --------: |
|
|
| representative year | 0.45 | 0.37 |
|
|
| typed obligations | 4.76 | 5.03 |
|
|
| chained earned entitlements | 0.02 | 0.02 |
|
|
| deliberate conflict | 0.01 | 0.01 |
|
|
| loaded year | 55.59 | 53.58 |
|
|
| two years | 1.68 | 1.22 |
|
|
| three years | 5.29 | 3.85 |
|
|
|
|
The typed-obligations difference is run-to-run noise; its retention cost was
|
|
22 milliseconds.
|