Imprint Dynamics¶
Model¶
Imprint tracks cumulative exposure per oscillator. The state vector m_k(t) evolves as:
Where exposure_k is the coherence (R) of the layer containing oscillator k.
Parameters¶
| Parameter | Type | Constraint | Source |
|---|---|---|---|
decay_rate |
float | >= 0 | binding_spec.imprint_model.decay_rate |
saturation |
float | > 0 | binding_spec.imprint_model.saturation |
Modulation¶
Imprint modulates the coupling matrix and phase lags before each UPDE step:
Coupling modulation — rows of K_nm scaled by accumulated exposure:
Oscillators with higher imprint receive stronger coupling from all neighbours.
Lag modulation — antisymmetric offset added to alpha:
Oscillators with asymmetric exposure histories develop phase lead/lag relative to each other.
State¶
ImprintState is a frozen dataclass:
| Field | Type | Description |
|---|---|---|
m_k |
NDArray (N,) | Per-oscillator imprint accumulation |
last_update |
float | Simulation time of last update |
attribution |
dict[str, float] | Optional provenance metadata |
Invariants¶
m_k >= 0always (clipped after update).m_k <= saturationalways (clipped after update).- Decay is exponential: without exposure,
m_k -> 0ast -> inf. - With constant exposure
e, steady state ism_k = min(e / decay_rate, saturation).
Operational impact¶
Imprint can be interpreted as a tunable memory prior:
decay_ratecontrols how quickly memory is forgotten.saturationcontrols how strongly long-running exposure can dominate coupling.
For production control, this gives a direct way to encode recency bias without modifying the primary UPDE equations. Teams typically validate imprint settings by:
- starting from zero imprint,
- increasing exposure on a known coherent segment,
- confirming expected coupling/lag shift direction before enabling actuation.
The same integration point works for both simulation experiments and hardware-adjacent dry runs, which is why it is documented here rather than embedded only in code comments.
Integration Point¶
When binding_spec.imprint_model is present, the CLI run loop:
- Initialises
ImprintModelfrom spec parameters andImprintState(m_k=zeros). - Before each UPDE step, applies
modulate_couplingandmodulate_lagto the effective K_nm and alpha. - After computing layer states, updates imprint with per-oscillator exposure derived from layer R values.
References¶
src/scpn_phase_orchestrator/imprint/update.py—ImprintModelclass.src/scpn_phase_orchestrator/imprint/state.py—ImprintStatedataclass.docs/concepts/memory_imprint.md— conceptual motivation.