A collection of inverse design challenges
Project description
invrs-gym
v1.4.1
Overview
The invrs_gym
package is an open-source gym containing a diverse set of photonic design challenges, which are relevant for a wide range of applications such as AR/VR, optical networking, LIDAR, and others.
Each of the challenges consists of a high-dimensional problem in which a physical structure (the photonic device) is optimized. The structure includes typically >10,000 degrees of freedom (DoF), generally including one or more arrays representing the structure or patterning of a layer, and may also include scalar variables representing e.g. layer thickness. In general, the DoF must satisfy certain constraints to be physical: thicknesses must be positive, and layer patterns must be manufacturable---they must not include features that are too small, or too closely spaced.
In general, we seek optimization techniques that reliably produce manufacturable, high-quality solutions and require reasonable compute resources. Among the techniques that could be applied are topology optimization, inverse design, and AI-guided design.
invrs_gym
is intended to facilitate research on such methods within the jax ecosystem. It includes several challenges that have been used in previous works, so that researchers may directly compare their results to those of the literature. While some challenges are test problems (e.g. where the structure is two-dimensional, which is unphysical but allows fast simulation), others are actual problems that are relevant e.g. for quantum computing or 3D sensing.
Key concepts
The key types of the challenge are the Challenge
and Component
objects.
The Component
represents the physical structure to be optimized, and has some intended excitation or operating condition (e.g. illumination with a particular wavelength from a particular direction). The Component
includes methods to obtain initial parameters, and to compute the response of a component to the excitation.
Each Challenge
has a Component
as an attribute, and also has a target that can be used to determine whether particular parameters "solve" the challenge. The Challenge
also provides functions to compute a scalar loss for use with gradient-based optimization, and additional metrics.
Example
# Select the challenge.
challenge = invrs_gym.challenges.ceviche_lightweight_waveguide_bend()
# Define loss function, which also returns auxilliary quantities.
def loss_fn(params):
response, aux = challenge.component.response(params)
loss = challenge.loss(response)
eval_metric = challenge.eval_metric(response)
metrics = challenge.metrics(response, params, aux)
return loss, (response, eval_metric, metrics, aux)
value_and_grad_fn = jax.value_and_grad(loss_fn, has_aux=True)
# Select an optimizer.
opt = invrs_opt.density_lbfgsb(beta=4)
# Generate initial parameters, and use these to initialize the optimizer state.
params = challenge.component.init(jax.random.PRNGKey(0))
state = opt.init(params)
# Carry out the optimization.
for i in range(steps):
params = opt.params(state)
(value, (response, eval_metric, metrics, aux)), grad = value_and_grad_fn(params)
state = opt.update(grad=grad, value=value, params=params, state=state)
With some plotting, this code will produce the following waveguide bend:
Challenges
The current list of challenges is below. Check out the notebooks for ready-to-go examples of each.
- The bayer sorter chhallenge involves the design of metasurface that replaces the color filter in an image sensor, and is based on "Pixel-level Bayer-type colour router based on metasurfaces" by Zou et al.
- The diffractive splitter challenge involves designing a non-paraxial diffractive beamsplitter useful for 3D sensing, as discussed in LightTrans documentation.
- The ceviche challenges are jax-wrapped versions of the Ceviche Challenges open-sourced by Google, with defaults matching "Inverse Design of Photonic Devices with Strict Foundry Fabrication Constraints" by Schubert et al. These were also studied by Ferber et al. in "SurCo: Learning Linear SURrogates for COmbinatorial Nonlinear Optimization Problems" by Ferber et al.
- The meta-atom library challenge is baed on "Dispersion-engineered metasurfaces reaching broadband 90% relative diffraction efficiency" by Chen et al., and involves the design of 8 meta-atoms for
- The metagrating challenge is a re-implementation of the Metagrating3D problem using the fmmax simulator.
- The metalens challenge is a re-implemenation of the RGB Metalens problem using the fmmax simulator. constructing a broadband, polarization-insensitive grating.
- The photon extractor challenge is based on "Inverse-designed photon extractors for optically addressable defect qubits" by Chakravarthi et al., and aims to create structures that increase photon extraction efficiency for quantum applications.
Install
pip install invrs_gym
Testing
Some tests are marked as slow and are skipped by default. To run these manually, use
pytest --runslow
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file invrs_gym-1.4.1.tar.gz
.
File metadata
- Download URL: invrs_gym-1.4.1.tar.gz
- Upload date:
- Size: 61.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1360a35821b744dd288c790c1b5828f73afc53b525dee043c208c750df69b82a |
|
MD5 | 80dccddeca063b0f593ecb3b00f7af69 |
|
BLAKE2b-256 | c104471fd727ec8f723ea543b2b2ce0cd6ad27263f56b8b98f5bc6987b64b9c9 |
File details
Details for the file invrs_gym-1.4.1-py3-none-any.whl
.
File metadata
- Download URL: invrs_gym-1.4.1-py3-none-any.whl
- Upload date:
- Size: 72.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0643958f65a76f9c16b8d9d53db149d39b219c974bf10346bb6a1a7882b03323 |
|
MD5 | b051fd42e9427650cfe638eae24ce2e5 |
|
BLAKE2b-256 | 7c9da89cfbc149d3b04a69e6fd7a5074b3b3ea8d0affb1f3051441f84ebd184a |