Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Scale-Invariant Ergodic MMD (Scale-EMMD)

"Search at Scale: Improving Numerical Conditioning of Ergodic Coverage Optimization for Multi-Scale Domains"

Code repository for the paper Search at Scale: Improving Numerical Conditioning of Ergodic Coverage Optimization for Multi-Scale Domains.


Overview

This repository implements trajectory optimization algorithms for scale-invariant ergodic coverage on 3D domains. Trajectories are optimized to match a target information distribution (defined over a point cloud or mesh) while respecting a velocity constraint, using Maximum Mean Discrepancy (MMD) as the coverage objective.

Three techniques are provided to improve numerical conditioning across multi-scale domains:

Method Script Key Feature
SI-EMMD scale_invariance/example.py Normalizes domain extent prior to optimization
Annealing annealing/example.py Cosine-anneals bandwidth from coarse to fine resolution
LSE-MMD lse/example.py Replaces sums with log-sum-exp for numerical stability

Repository Structure

scale_emmd/
├── methods/
│   ├── emmd_lib.py          # Core Scale_EMMD solver class
│   └── solver_anneal.py     # Augmented Lagrangian optimizer
├── annealing/
│   └── example.py           # Bandwidth annealing demo
├── lse/
│   └── example.py           # LSE loss vs. standard MMD demo
├── scale_invariance/
│   └── example.py           # Scale-invariant solver demo
├── obj_files/
│   └── bunny_mesh.obj       # Stanford Bunny mesh (test geometry)
├── LICENSE
└── README.md

Installation

Requirements: Python 3.9+

pip install jax jaxopt numpy matplotlib open3d trimesh

GPU acceleration: For large trajectories or meshes, JAX with GPU support is recommended. See the JAX installation guide for CUDA setup.


Quick Start

All examples run from the repository root. Each script contains a clearly marked configuration block at the top of __main__ — edit those variables to change behavior.

1. Scale-Invariant EMMD

Compares standard EMMD against the scale-invariant variant on a scaled 3D mesh.

python scale_invariance/example.py

Configuration block (scale_invariance/example.py):

method = 'si-emmd'  # Options: 'emmd', 'si-emmd'
scale = 5.0         # mesh scale
h = 0.05            # kernel bandwidth
T = 800             # trajectory length

2. Bandwidth Annealing

Solves coverage on a 3D mesh by annealing the bandwidth from a broad initial value down to one matched to the sensor radius, using a cosine schedule.

python annealing/example.py

Configuration block (annealing/example.py):

method = 'anneal'   # Options: 'emmd', 'anneal'
h = 0.05            # initial bandwidth
sensor_rad = 1.5    # target sensing radius
scale = 10.0        # mesh scale
T = 1000            # trajectory length

The target bandwidth is derived automatically as h_target = sensor_rad² / |log(ε)| with ε = 0.05.


3. LSE Loss Variant

Runs the annealing solver with a log-sum-exp (numerically stable) loss in place of the standard MMD sum.

python lse/example.py

Configuration block (lse/example.py):

lse = True          # True: log-sum-exp loss;  False: standard MMD
scale = 100.0       # mesh scale
h = 0.05            # starting bandwidth for annealing
sensor_rad = 1.5    # target sensing radius
T = 1000            # trajectory length

Citation

If you use this code in your research, please cite:

@article{scale_emmd_2026,
  title   = {Search at Scale: Improving Numerical Conditioning of Ergodic
             Coverage Optimization for Multi-Scale Domains},
  author  = {},
  year    = {2026},
  note    = {Intelligent Autonomy Robotics Lab}
}

License

MIT License — Copyright (c) 2026 Intelligent Autonomy Robotics Lab. See LICENSE for details.

About

Code repository for paper "Search at Scale: Improving Numerical Conditioning of Ergodic Coverage Optimization for Multi-Scale Domains"

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages