Skip to content

Generation Process

This section provides a deep technical dive into how PASSAGE generates its scenes, from the sampling of each scene and the cost models to obstacle placement and the exact reference solver. It describes the generator that built PASSAGE v1.0: what passage generate runs with the shipped config/config.yaml.


Pipeline Overview

flowchart TD
    subgraph Input
        T["JAXA AW3D30 tiles<br>1°×1°, 3600×3600 cells of 30 m"]
        C["Calibration<br>global min/max: −430.0 / 8767.0 m"]
        K["Config<br>splits, objectives, obstacles"]
    end

    subgraph Sampling
        S1["1. Draw a center tile<br>among the split's candidates"]
        S2["2. Draw a target elevation;<br>nearest cell = start"]
        S3["3. Place the R×R crop around the start<br>(split, guard ring, nodata, range checks)"]
        S4["4. Draw the goal<br>among the other cells"]
    end

    subgraph Obstacles
        O1["5. Superellipse mask<br>coverage ≤ target ≤ 30 %, markers kept free"]
    end

    subgraph Solving
        P1["6. Write the float32 tensor<br>and metadata"]
        P2["7. Exact float64 A* reference:<br>3 objectives × free / obstacles blocked"]
    end

    subgraph Output
        OUT["8. Write routes and the scene receipt"]
    end

    T --> S1
    C --> S2
    K --> S1
    S1 --> S2 --> S3 --> S4
    S4 --> O1
    O1 --> P1 --> P2
    P2 --> OUT

    style S1 fill:#1565C0,color:#fff
    style O1 fill:#D32F2F,color:#fff
    style P2 fill:#2E7D32,color:#fff
    style OUT fill:#42A5F5,color:#fff

Each scene yields six route variants, each an exact optimal route, never an approximation. A crop whose obstacles disconnect the start from the goal is rejected before any label is computed, and the scene draws its next candidate crop (see Blocked Cells and Connected Endpoints).


Sections

Sampling Procedure

How each scene is drawn: center tile, start cell, crop, goal and normalization, plus the geographic split rules (test-only South America hold-out, 5°×5° blocks, one-tile guard ring).

Cost Models

Five crop-relative step-cost functions. PASSAGE v1.0 uses three of them: elevation, slope_uphill and energy.

Obstacle Generation

Superellipse obstacles with random shape, size and rotation, covering up to 30 % of the crop. Obstacle cells are blocked.

Solvers & Heuristics

The exact float64 A* reference solver that labels v1.0, and three alternative backends (NetworkX, pathfinding, Numba grid) not used by the release.

Interactive Notebooks

Explore released scenes in Jupyter notebooks: the three objectives, obstacle masks and detours, and exact re-solves of the stored labels.