L4: engine doc for the research-selection capture
This commit is contained in:
parent
ca0de05e07
commit
c842d44d62
1 changed files with 30 additions and 0 deletions
|
|
@ -82,3 +82,33 @@ Lane L5 established this first and better, on VM146, and owns it
|
||||||
oracle, not this pair. What this lane adds is where the divergence lives: the differing value is in
|
oracle, not this pair. What this lane adds is where the divergence lives: the differing value is in
|
||||||
the **submitted command block**, in player 512's research-target gate, so the decision is made
|
the **submitted command block**, in player 512's research-target gate, so the decision is made
|
||||||
client-side before submission and the sim is not diverging on identical input.
|
client-side before submission and the sim is not diverging on identical input.
|
||||||
|
|
||||||
|
## Addendum — the research-selection tie set
|
||||||
|
|
||||||
|
`airesearch=on` adds three more register-transparent dump hooks: the per-player delimiter
|
||||||
|
(`SelectResearchTarget 0x006c8890`, which also prints the player's current target so a player that
|
||||||
|
returns immediately is distinguishable from one that walks an empty list), one line per candidate
|
||||||
|
(`TryResearchCandidate 0x006c8580`, in the order the selector sees them), and the outcome
|
||||||
|
(`cl_SetResearchTarget 0x00578f60`, which takes the tech's **name**, so the chosen tech is a string
|
||||||
|
in a register and needs no id table). Four reachability probes go with them: the two producers phase
|
||||||
|
18 tries before the walk, and the two halves of the fallback rotation.
|
||||||
|
|
||||||
|
Measured on one End Turn from `turn1-state.sav`:
|
||||||
|
|
||||||
|
* **Only one of the three AI players reaches the candidate walk.** The other two get their target
|
||||||
|
from a producer that runs first, which is why they are stable across every run of both lanes and
|
||||||
|
the third is not — they are on a different code path, not a luckier one.
|
||||||
|
* **The candidate stream has length one**, and the single entry is `{2, 12}` — small integers, a
|
||||||
|
*category*, not a tech. A vector of one has no order to scramble, so arrival order is not the
|
||||||
|
mechanism and the prediction that said it was is falsified.
|
||||||
|
* **The fallback never ran** (both probes zero), so it is not the three-arm rotation either.
|
||||||
|
|
||||||
|
The variation is therefore inside the resolver that turns a category into a tech. `k` is nameable
|
||||||
|
from the shipped tech data for the arm that was observed: `XNC_ROOT` allows six tier-1 techs at an
|
||||||
|
identical 2000 RP, one per species, and each allows exactly one tier-2 successor — the six
|
||||||
|
`XNC_Trns<Species>2`. Four of those six are among the five values observed across six runs between
|
||||||
|
lanes L4 and L5. **Their costs differ (13000–30000), so the resolver is not ranking by cost**; it is
|
||||||
|
taking whichever member of the available set it reaches first.
|
||||||
|
|
||||||
|
Full account, including the one observed value that is *not* in that family and what single run
|
||||||
|
would settle it, in `sots-re/findings/subsystems/ai-order-capture.md` §3.2.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue