# OOD Object Position Generalization Experiments

## Dataset
- 16×16 grid of (dx, dy) object positions = 256 trajectories
- dx: [-0.15, 0.0], dy: [-0.1, 0.1]
- Natural-start servo replay, clean scene, zero rotation
- Path: `/data/libero/ood_objpos_task0/`

## Fixed Test Set
20 positions uniformly sampled across the full grid (used for ALL experiments):
- Mix of center, edges, corners, interior — covers the full space

## Experiments

### Exp 1: Inner Square (spatial sparsity)
- **Train**: 4×4 inner square, grid indices [6,7,8,9]×[6,7,8,9] = 16 positions
- **Test**: fixed 20 positions across full grid
- **Question**: Can the model learn from a small central region and generalize outward?

### Exp 2: Random 10 (data efficiency)
- **Train**: 10 randomly sampled positions from the full grid
- **Test**: fixed 20 positions across full grid
- **Question**: How few demonstrations are needed?

### Exp 3: Left → Right (extrapolation)
- **Train**: left half, dx indices [0,7] = 128 positions
- **Test**: right half, dx indices [8,15] = separate 20 test positions from right half
- **Question**: Can the model extrapolate to unseen spatial regions?

### Exp 4: Corner Scaling (N = 4, 8, 16, 32, 64)
- **Train**: N positions from corners/edges/grid
  - N=4: 4 grid corners
  - N=8: 4 corners + 4 edge midpoints
  - N=16: 4×4 evenly spaced
  - N=32: ~6×6 evenly spaced (36 positions)
  - N=64: 8×8 evenly spaced
- **Test**: fixed 20 positions
- **Question**: How does performance scale with spatial coverage?

## Training Setup
- 10 min per model, skip rotation, EMA loss weighting
- Eval: teleport + zero rotation + clean scene + 600 max steps
- 5 episodes per test position

## Checklist
- [ ] Create all train splits + fixed test set
- [ ] Exp 1: Inner square — PARA & ACT
- [ ] Exp 2: Random 10 — PARA & ACT
- [ ] Exp 3: Left → Right — PARA & ACT
- [ ] Exp 4: Corner scaling — PARA & ACT × 5 sizes
- [ ] Compile results table
- [ ] Verify results make sense (debug if not)
