Skip to main content

Root-finding and optimization on polyhedral fans

Project description

fanroots

Original author: Nate MacFadden, Liam McAllister Group, Cornell

Contributors: —

Root-finding and optimization for vector-valued functions defined piecewise over the secondary fan of a point or vector configuration. Designed for Kähler moduli stabilization (KMS) in string compactifications, where it delivers order-of-magnitude speedups over prior methods (i.e., those in arXiv:2406.13751).

The Problem

Given a vector/point configuration with $N$ elements, the secondary fan partitions $\mathbb{R}^N$ (or, for vector configurations, a convex subregion of this space) into convex 'secondary' cones. Call $\mathbb{R}^N$ 'height space'. This software is designed for continuous, differentiable functions whose analytic form may vary chamber-by-chamber. One example is K"ahler moduli stabilization, which depends on the intersection numbers of the toric variety associated to each triangulation. These numbers change discretely as one crosses walls of the secondary fan, but the function remains smooth.

The major complication in practice is the moderate-to-high dimension $\mathbb{R}^N$ ($N\approx 200$) as well as the large number of chambers (depending roughly exponentially on N - see arXiv:2008.01730, arXiv:2309.10855, and arXiv:2602.16909). At $N$ of interest, there are far too many chambers to enumerate, so operations are instead taken locally.

Algorithm

fanroots solves this by moving through the fan adaptively:

  • Large steps (JumpStep): jump directly to target heights, recomputing the triangulation from scratch. Effective when the function varies slowly chamber-by-chamber, as is typical for finding locations in Kähler moduli space where the divisors take certain volumes.
  • Small steps (FlopStep): walk along the step direction via CYTools' flip_linear — a wrapper of regfans' flip routines that additionally tracks intersection numbers — flipping through chamber walls one at a time. Efficient for fine-grained convergence once near a solution.

A schedule can mix both strategies dynamically based on step size. Step proposals include Newton's method, Gauss-Newton, gradient descent, and Levenberg-Marquardt. Step sizes are tuned via backtracking line search, ternary search, or 'shrinking'.

For functions depending on the intersection numbers, performance is further boosted by a recently developed fast intersection number kernel in CYTools, since computation of the intersection numbers typically becomes the bottleneck for such cases.

Installation

pip install -e .

Requires CYTools, whose cytools.vector_config module supplies the VectorConfiguration/Fan types fanroots operates on. These wrap regfans' flip/flop routines, adding toric capabilities.

Usage

This operates via an optimization class FanRoots:

from fanroots import FanRoots

optimizer = FanRoots(
    vc=my_vector_configuration,
    fct=fct,
    jac=jac,
    step_proposal="newton",       # "newton", "gauss_newton", "grad", "lma"
    step_size_optimizer="shrink", # "shrink", "bls", "ternary", "naive"
    step_taking_method="jump",    # "jump", "flop"
    tolerance=1e-6,
)
optimizer.optimize()

Key arguments (see help(FanRoots) for the full list):

Argument Options Description
step_proposal "newton", "gauss_newton", "grad", "lma" Step direction method
step_size_optimizer "shrink", "bls", "ternary", "naive" Step size tuning
step_taking_method "jump", "flop" How to move through the fan; overridden by step_taking_schedule for mixed strategies
learning_rate float Scales the proposed step before size optimization
tolerance float Halt when |fct(h)|_2 < tolerance
min_step_size float Halt if step shrinks below this
verbosity int Controls diagnostic output

See the VolumeFinder class in fanroots/applications/volume_finder.py for a complete example finding Kähler parameters that realize prescribed divisor volumes.

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

fanroots-0.1.0.tar.gz (39.2 kB view details)

Uploaded Source

Built Distribution

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

fanroots-0.1.0-py3-none-any.whl (46.9 kB view details)

Uploaded Python 3

File details

Details for the file fanroots-0.1.0.tar.gz.

File metadata

  • Download URL: fanroots-0.1.0.tar.gz
  • Upload date:
  • Size: 39.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fanroots-0.1.0.tar.gz
Algorithm Hash digest
SHA256 95ea7dcafb5e82cb277122ed5131f39d6208abcb6d8344450c7ce1a5da4862ca
MD5 e94e15df03cb761f84765e497e9f1e40
BLAKE2b-256 b364f7f6cde897753240f6470966f34b932c808b31a638d9658c660832a0a1ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for fanroots-0.1.0.tar.gz:

Publisher: publish.yml on LiamMcAllisterGroup/fanroots

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fanroots-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: fanroots-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 46.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fanroots-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 db0eee287182cefc694aac51d8e6d48a99974a69bde528a80f06d481c55166d6
MD5 b76b5d24d412e6c3abe4c612acfd2f1c
BLAKE2b-256 ec3027a6f859148c5209c20f85832a9a8cfe10a2fd8f3d122b3a7b28da53b10d

See more details on using hashes here.

Provenance

The following attestation bundles were made for fanroots-0.1.0-py3-none-any.whl:

Publisher: publish.yml on LiamMcAllisterGroup/fanroots

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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