Skip to main content

pyomo-cvp

PyPI Python versions CI License

Control vector parameterization for pyomo.dae.

pyomo.dae makes control profiles piecewise-constant by adding linking equality constraints (reduce_collocation_points), which keeps every collocation-point copy of the control in the model plus one equation per tied copy. pyomo-cvp does it by elimination: after any DAE discretization, each declared control keeps only its profile's free values, every other copy is substituted out of the model, and the component is replaced under its own name. The model you solve is the model you meant: no extra variables, no linking constraints.

On the classic race car problem (nfe=15, ncp=3, Lagrange-Radau):

control vars linking constraints
reduce_collocation_points 46 30
cvp.parameterize 15 0

This matters for NLP solvers such as IPOPT, which have no presolve to strip redundant variables and equalities.

Install

pip install pyomo-cvp

Usage

import pyomo.environ as pyo
from pyomo_cvp import declare_profile, control_value

# ... build a pyomo.dae model with control m.u over ContinuousSet m.tau ...
declare_profile(m.u, wrt=m.tau, profile="piecewise_constant")

pyo.TransformationFactory("dae.collocation").apply_to(
    m, nfe=15, ncp=3, scheme="LAGRANGE-RADAU")
pyo.TransformationFactory("cvp.parameterize").apply_to(m)

# m.u now has exactly nfe members, one per finite element
pyo.SolverFactory("ipopt").solve(m)
control_value(m.u, 0.5)   # evaluate the profile at any time

The explicit form (no declaration) is equivalent:

pyo.TransformationFactory("cvp.parameterize").apply_to(
    m, var=m.u, contset=m.tau, profile="piecewise_constant")

Works with any pyomo.dae discretization: Lagrange-Radau, Lagrange-Legendre (where it also eliminates the dangling element-boundary copies the constraint-based approach leaves unconstrained), or finite difference. Controls may carry additional (non-time) indices.

Profiles

  • 'piecewise_constant' --- one free value per finite element, indexed by the element's start time (u[t0] exists; the final time carries no control).
  • 'piecewise_linear' --- one free value per element boundary, continuous, interior points interpolated.
  • ('reduced_collocation', k) --- k free values per element (the last k collocation points), Lagrange interpolation elsewhere; the elimination form of reduce_collocation_points(ncp=k).

See examples/racecar_cvp.ipynb for a complete worked example showing both forms and all three profiles.

Citing

If you use this package, please also cite the pyomo.dae framework it builds on:

Nicholson, B., Siirola, J.D., Watson, J.-P., Zavala, V.M., Biegler, L.T. (2018). pyomo.dae: a modeling and automatic discretization framework for optimization with differential and algebraic equations. Mathematical Programming Computation 10(2), 187-223. doi:10.1007/s12532-017-0127-0

@article{nicholson2018pyomodae,
  author  = {Nicholson, Bethany and Siirola, John D. and Watson, Jean-Paul
             and Zavala, Victor M. and Biegler, Lorenz T.},
  title   = {pyomo.dae: a modeling and automatic discretization framework
             for optimization with differential and algebraic equations},
  journal = {Mathematical Programming Computation},
  volume  = {10},
  number  = {2},
  pages   = {187--223},
  year    = {2018},
  doi     = {10.1007/s12532-017-0127-0}
}

License

Apache License 2.0. See LICENSE.

Download files

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

Source Distribution

pyomo_cvp-0.4.0.tar.gz (154.5 kB view details)

Uploaded Source

Built Distribution

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

pyomo_cvp-0.4.0-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file pyomo_cvp-0.4.0.tar.gz.

File metadata

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

File hashes

Hashes for pyomo_cvp-0.4.0.tar.gz
Algorithm Hash digest
SHA256 fc652b6952bb42260849905399f6f4b0f6d3978d1e23c31933c99e52772a3c4e
MD5 173305c2cc412e6d333529a9310aa511
BLAKE2b-256 a61c2327c05d151f8fa4a99f8af0c518d6d841b5b3f22160bbd0e540182b39b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomo_cvp-0.4.0.tar.gz:

Publisher: publish.yml on devin-griff/pyomo-cvp

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

File details

Details for the file pyomo_cvp-0.4.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for pyomo_cvp-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cf1db5f5bf3059d9255d3301e73f7291f675051f3a6ba8eeacedac8c9b1daac8
MD5 9e60a6a02060aab66d2854646984e9d5
BLAKE2b-256 ba2682774f6c6370680ba6c4d68dea05671e65b4742e8c0f7f8bb8afe31876be

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomo_cvp-0.4.0-py3-none-any.whl:

Publisher: publish.yml on devin-griff/pyomo-cvp

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

Release history Release notifications | RSS feed

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.3.1

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.0

2 files

This release

0.4.0 This release

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page