Add continuous OFF ON OFF VIV video research driver

This commit is contained in:
Frank14f
2026-11-02 21:23:38 +08:00
parent 73d3f6214e
commit 76873d911c
4 changed files with 676 additions and 0 deletions
+86
View File
@@ -0,0 +1,86 @@
# Continuous VIV videos
Research-only, two separate settings, each one uninterrupted OFF -> ON -> OFF
fluid/oscillator trajectory. No production changes, topology switching, moving
checkpoint feature, retraining, force filtering, or parameter search.
The user selected separate videos because runtime topology changes are unsupported
with translating circles. This is deliberately different from the old Legacy
multi-setting video, which rebuilt solvers and transferred full state.
## Frozen physical and control contract
- Source baseline `73d3f6214e0d28ced4744665aa3bb05522aa2fa8`; D40, U=.005,
nu=.004, MRT/FP32/unshifted double-buffer. Same parabolic regularized inlet,
NEQ outlet and bounce-back walls as the retained m*=4 pair.
- Common transverse assembly: m*=4 (all three disks), fn D/U=.2, zeta=0.
Structure uses previous native-step sum CME_y+Wen_y. No policy-force averaging
is applied to this RHS. Same +/-D travel, speed, finite-state and no-donor stops.
- Each phase: Karman400 complete SI of3200, steady320 SI of4000 native steps
=160 D/U. Steady's SI follows the actual old video1000-step interval under
diffusive D40 scaling, rather than borrowing PPO's800-step interval. Total480 D/U.
No extension, retuning or replacement if steady motion/control is weak.
- Steady: canonical new-reproduce constant surface velocities
(0,-5.1,+5.1) U. This is NOT a PPO transfer. No model/normalizer is loaded.
Existing 2,048,000-step at-rest warmup precedes the free response.
- Karman: actual pinball Re_D50, historically named `karman_re100`, frozen
model `148240c1dcb8b11d8e5a0a9e991f6874c4e799c9744707bf0fb32a8efeb0468d`
and norm `534fda818c030a56960e95d0f3ac1e350d887d03db7f80f1d6453195a502b7f0`.
Use the verified static release once, at video start (clock4576000).
- Both switches occur on SI boundaries. The oscillator y/v, previous RHS,
both DDF buffers, moving geometry and solver clock are never reset. OFF still
gathers sensor/CME observations. First PPO action uses the immediately previous
complete OFF interval, unlike an independent arm's initial all-zero observation.
Deterministic feed-forward PPO has no recurrent state. EMA resets to zero each
SI, as in training/reproduction; original video's SplitAdvance also reset the
constant-steady actuation every interval. Physical OFF is exactly zero wall speed.
There is no extra transition blend. The first1 D/U after either switch is
explicitly labeled a switch transient. ON from an already moving state differs
from the previous independent pair; +/-D stops are retained without retuning.
A visual ON label means enabled control,
not a proven suppression/cloaking result.
## Video provenance and presentation
Read-only source: DynamisLab `src/drl_pinball/reproduce/continuous_video.py`, SHA256
`3bd9c777171c9e8932c78298accbb6f61a8323b0eed5938e0f56e167b3df0743`.
Approved original MP4 SHA256
`578d2cf5113429006b6919bbb8ef8ff6ce65ebcd0c056ac478f8ce2515e4cbab`.
The actual new-reproduce conversation confirms fixed-position plain-language
labels, white bars, OFF/ON toggle, rotation sectors, and 1/2/5/10/5/2/1 gears.
Only the display idiom/gear schedule are reused. Legacy population decoding,
physics, topology handoff and policy runner are not imported. Modern macroscopic
fields feed centered vorticity with all stencil nodes fluid. Fixed color limits
[-3,+3], 21 RdBu_r bins; per-frame clipping fraction retained. Box downsampling
is display-only. Both main field and enlarged inset have fixed lab coordinates;
the inset shows the equilibrium line. Actual moving centers and applied surface
speeds drive the body overlays. y/D trace has fixed +/-1 limits. No motion gain.
1280x800,30fps; first80 D/U of each phase uses the original display gear ramps,
last80 D/U uses normal cadence (800 native steps/frame =.1D/U). Every native
step and every SI is still executed. Streaming ffmpeg avoids stored PNG sequences.
Keep raw scalar histories, SI observations/actions, per-frame time/motion records,
selected keyframes, source/input hashes and terminal status. These are new
continuous runs, not an exact replay of the old independent paired histories.
## Gates and limits
CPU: switch-state/clock continuity, first ON observation, exactly zero OFF action,
SI timing despite sampling, physical scaling, schedule monotonicity, vorticity
sign/mask, fixed-coordinate mapping. Real smoke:32 warmup +3x32 response steps
on D40 (smoke SI32), all switches/encoder; not a physical comparison. Grok reviews
the exact research diff before full runs. Capture no-donor, finite state, native
RHS and all stop outcomes. Report per-phase late-half motion statistics and
raw-force limits; appearance and successful duration are not physics qualification.
Example (outputs must be new, outside checkout; select a safe GPU):
```sh
CUDA_VISIBLE_DEVICES=0 PYTHONPATH=src python research/continuous_viv/run.py --scene steady --out /tmp/celeris-results-continuous-viv/steady
CUDA_VISIBLE_DEVICES=0 PYTHONPATH=src python research/continuous_viv/run.py --scene karman --model /tmp/celeris-karman-viv-assets/model.zip --norm /tmp/celeris-karman-viv-assets/norm.json --release-dir /tmp/celeris-results-karman-viv-516975e/pair --out /tmp/celeris-results-continuous-viv/karman
```
Append `--smoke` and use separate output directories for the bounded gates.
The Karman smoke does not read/install the physical release. Source and review
SHA, interpreter/version and GPU resource readings belong in the execution receipt.