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 (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 KMS, 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$ 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 regfans' flip_linear, 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 regfans. For string-theoretic applications (AKA all of them lol), CYTools is also required.

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", "backtracking", "ternary", "naive"
    step_taking_method="jump",    # "jump", "flop"
    tolerance=1e-6,
)
optimizer.run()

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", "backtracking", "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 demo/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.0.2.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.

fanroots-0.0.2-py3-none-any.whl (44.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for fanroots-0.0.2.tar.gz
Algorithm Hash digest
SHA256 925e2b1d865481625bffb0733df9a0f453a56c40c0a78ef5435e37494a269c72
MD5 ca94a8970f4f5c2d69e46680179eb151
BLAKE2b-256 5e3c76563f334aaba6d7ce3a368232665e49b345f08057050fa75ea820bbf0b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for fanroots-0.0.2.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.0.2-py3-none-any.whl.

File metadata

  • Download URL: fanroots-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 44.5 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.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 59f4dc24c31fb21aae3c35c15962e573901f2b348bb5e0343756125c20ba7ef1
MD5 90b09d914cd9b4ab3b89fa13fb1b7ff4
BLAKE2b-256 4c02993bbefb0a532878e560aef02e2076ffc4c3a98090718ca2ce2b0db3dfd2

See more details on using hashes here.

Provenance

The following attestation bundles were made for fanroots-0.0.2-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