Skip to main content

A collection of inverse design challenges

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

invrs-gym - A collection of inverse design challenges

v0.3.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)
    distance = challenge.distance_to_target(response)
    metrics = challenge.metrics(response, params, aux)
    return loss, (response, distance, 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, distance, metrics, aux)), grad = value_and_grad_fn(params)
    state = opt.update(grad=grad, value=value, params=params, state=state)

With some plotting (see the example notebook), this code will produce the following waveguide bend:

Animated evolution of waveguide bend design

Challenges

The current list of challenges is below. Check out the notebooks for ready-to-go examples of each.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

invrs_gym-0.3.1.tar.gz (36.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

invrs_gym-0.3.1-py3-none-any.whl (45.9 kB view details)

Uploaded Python 3

File details

Details for the file invrs_gym-0.3.1.tar.gz.

File metadata

  • Download URL: invrs_gym-0.3.1.tar.gz
  • Upload date:
  • Size: 36.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for invrs_gym-0.3.1.tar.gz
Algorithm Hash digest
SHA256 316d7585acd96b39834d13326c8950fc9991ca0782d0fdc99406fc5ef2033dea
MD5 c2f10b5f14922a1db8b8a64b7c00d375
BLAKE2b-256 935ee4ea2fe9a68849ed73d46bcb7c12a33924a61734fdb3259a72df264992e0

See more details on using hashes here.

File details

Details for the file invrs_gym-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: invrs_gym-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 45.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for invrs_gym-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b0464eda20b75783af196827a53492bba0bbbebe3e389592078d01af79e0baab
MD5 c805d29f0b8fd1f9ea74cc6eabe9b795
BLAKE2b-256 c6965dc3430669976dd5ab12537a5414aad58bfd528fd1cb48a5d55348737e94

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page