PartitionedStructures

Partitioned derivatives storage and partitioned quasi-Newton updates

https://github.com/juliasmoothoptimizers/partitionedstructures.jl

Science Score: 28.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: zenodo.org
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.6%) to scientific vocabulary

Keywords from Contributors

preconditioner nlpmodels nonlinear-programming linear-maps linear-operators matrices numerical
Last synced: 11 months ago · JSON representation ·

Repository

Partitioned derivatives storage and partitioned quasi-Newton updates

Basic Info
  • Host: GitHub
  • Owner: JuliaSmoothOptimizers
  • License: other
  • Language: Julia
  • Default Branch: main
  • Homepage:
  • Size: 1.53 MB
Statistics
  • Stars: 10
  • Watchers: 3
  • Forks: 1
  • Open Issues: 14
  • Releases: 0
Created over 5 years ago · Last pushed about 1 year ago
Metadata Files
Readme License Citation

README.md

PartitionedStructures.jl: Partitioned derivatives storage and partitioned quasi-Newton updates

| Documentation | Linux/macOS/Windows/FreeBSD | Coverage | DOI | |:-----------------:|:-------------------------------:|:------------:|:-------:| | docs-stable docs-dev | build-gh build-cirrus | codecov | doi |

How to cite

If you use PartitionedStructures.jl in your work, please cite using the format given in CITATION.bib.

Compatibility

Julia ≥ 1.6.

How to install

julia pkg> add PartitionedStructures pkg> test PartitionedStructures

Philosophy

Methods exploiting the derivatives of partially-separable functions require specific data structures to store partitioned derivatives. There are several types of partial separability. We write a partially-separable function $f: \mathbb{R}^n \to \mathbb{R}$ in the form

$$
f(x) = \sum{i=1}^N fi (Ui(x)), fi : \mathbb{R}^{ni} \to \mathbb{R}, Ui \in \mathbb{R}^{ni \times n}, ni \ll n, $$

where: * $fi$ is the $i$-th element function whose dimension is smaller than $f$; * $Ui$ the linear operator selecting the linear combinations of variables that parametrize $f_i$.

In the case of partitioned quasi-Newton methods, they require storing partitioned gradients and the partitioned Hessian approximation. PartitionedStructures.jl facilitates the definition of those partitioned structures and defines methods to manipulate them.

Features

$Ui$ may be based on the elemental variables or the internal variables of $fi$: - the elemental variables represent the subset of variables that parametrizes $fi$, i.e. the rows of $Ui$ are vectors from the Euclidean basis; Ui = [1,3,5] # i.e. [1 0 0 0 0; 0 0 1 0 0; 0 0 0 0 1] - the internal variables are linear combinations of the variables that parametrize $fi$, i.e. $Ui$ may be a dense matrix.

The implementation of the linear-operator $U_i$, which describe entirely the partially-separable structure of $f$, changes depending on wether we use internal or elemental variables.

At the moment, we only developed the elemental partitioned structures, but we left the door open to the development of internal partitioned structures in the future.

How to use

Check the tutorial.

Partitioned structures available

Structure | Description -----------------------|------------ AbstractPartitionedStructure| The supertype of every partitioned structures Elemental_pm | An elemental partitioned matrix, each element-matrix is dense Elemental_plo_bfgs | A limited-memory elemental partitioned matrix, each element limited-memory operator is a LBFGSOperator Elemental_plo_sr1 | A limited-memory elemental partitioned matrix, each element limited-memory operator is a LSR1Operator Elemental_plo | A limited-memory elemental partitioned matrix, each element limited-memory operator is a LBFGSOperator or a LSR1Operator Elemental_pv | An elemental partitioned vector

Methods available

Method | Description -----------------------|------------ identity_epm | Create a partitioned matrix with identity element-matrices identity_eplo_LBFGS | Create a PLBFGS limited-memory partitioned matrix identity_eplo_LSR1 | Create a PLSR1 limited-memory partitioned matrix identity_eplo_LOSE | Create a PLSE limited-memory partitioned matrix update | Performs a partitioned quasi-Newton update on a partitioned matrix eplo_lbfgs_from_epv | Create an Elemental_plo_bfgs from the partitioned structure of an Elemental_pv eplo_lsr1_from_epv | Create an Elemental_plo_sr1 from the partitioned structure of an Elemental_pv eplo_lose_from_epv | Create an Elemental_plo from the partitioned structure of an Elemental_pv epm_from_epv | Create an Elemental_pm from the partitioned structure of an Elemental_pv epv_from_epm | Create an Elemental_pv from the partitioned structure of an Elemental_pm epv_from_eplo | Create an Elemental_pv from the partitioned structure of an Elemental_plo, an Elemental_plo_bfgs or an Elemental_plo_sr1 mul_epm_epv | Return a partitioned vector from an elementwise product between a partitioned matrix and a partitioned vector mul_epm_vector | Return the vector resulting from a partitioned matrix-vector product build_v! | Build a vector accumulating the element contributions of a partitioned vector set_epv! | Set the value of every element-vector minus_epv! | Apply a unary minus on every element-vector of a partitioned vector add_epv! | Perform elementwise addition between two partitioned vectors

Modules using PartitionedStructures.jl

The structures defined here are used in the modules: - PartiallySeparableSolvers.jl inside a trust-region method using partitioned quasi-Newton operators; - PartitionedVectors.jl, which relies on Elemental_pv to make PartitionedVector <: AbstractVector; - PartitionedKnetNLPModels.jl to train a classification neural network with a stochastic limited-memory partitioned quasi-Newton method.

Bug reports and discussions

If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.

If you want to ask a question not suited for a bug report, feel free to start a discussion here. This forum is for general discussion about this repository and the JuliaSmoothOptimizers, so questions about any of our packages are welcome.

Owner

  • Name: JuliaSmoothOptimizers
  • Login: JuliaSmoothOptimizers
  • Kind: organization
  • Location: DOI: 10.5281/zenodo.2655082

Infrastructure and Solvers for Continuous Optimization in Julia

Citation (CITATION.bib)

@Misc{raynaud-orban-bigeon-PartitionedStructures-2022,
  author = {Raynaud, P. and Orban, D. and Bigeon, J.},
  title = {{PartitionedStructures.jl}: Partitioned derivatives storage and partitioned quasi-{N}ewton updates},
  month = {Month},
  howpublished = {\url{https://github.com/JuliaSmoothOptimizers/PartitionedStructures.jl}},
  year = {2022},
  DOI = {10.5281/zenodo.6940310}
}

GitHub Events

Total
  • Delete event: 1
  • Issue comment event: 1
  • Push event: 10
  • Pull request review event: 1
  • Pull request review comment event: 4
  • Pull request event: 3
  • Create event: 2
Last Year
  • Delete event: 1
  • Issue comment event: 1
  • Push event: 10
  • Pull request review event: 1
  • Pull request review comment event: 4
  • Pull request event: 3
  • Create event: 2

Committers

Last synced: about 1 year ago

All Time
  • Total Commits: 251
  • Total Committers: 4
  • Avg Commits per committer: 62.75
  • Development Distribution Score (DDS): 0.147
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
RAYNAUD Paul (raynaudp) r****p@g****n 214
Paul Raynaud p****6@h****r 24
Dominique d****n@g****m 7
CompatHelper Julia c****y@j****g 6
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: about 1 year ago

All Time
  • Total issues: 17
  • Total pull requests: 70
  • Average time to close issues: 4 months
  • Average time to close pull requests: about 1 month
  • Total issue authors: 3
  • Total pull request authors: 4
  • Average comments per issue: 0.71
  • Average comments per pull request: 1.36
  • Merged pull requests: 59
  • Bot issues: 0
  • Bot pull requests: 18
Past Year
  • Issues: 0
  • Pull requests: 1
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 1
  • Average comments per issue: 0
  • Average comments per pull request: 1.0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • paraynaud (15)
  • tmigot (1)
  • JuliaTagBot (1)
Pull Request Authors
  • paraynaud (50)
  • github-actions[bot] (18)
  • dpo (3)
  • tmigot (2)
Top Labels
Issue Labels
documentation (1)
Pull Request Labels
formatting (12) automated pr (12) no changelog (12)

Packages

  • Total packages: 1
  • Total downloads: unknown
  • Total dependent packages: 3
  • Total dependent repositories: 0
  • Total versions: 7
juliahub.com: PartitionedStructures

Partitioned derivatives storage and partitioned quasi-Newton updates

  • Versions: 7
  • Dependent Packages: 3
  • Dependent Repositories: 0
Rankings
Dependent repos count: 9.9%
Dependent packages count: 13.2%
Average: 25.8%
Stargazers count: 39.8%
Forks count: 40.4%
Last synced: 11 months ago

Dependencies

.github/workflows/Documentation.yml actions
  • actions/checkout v2 composite
  • julia-actions/setup-julia latest composite
.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
.github/workflows/ci.yml actions
  • actions/cache v1 composite
  • actions/checkout v2 composite
  • codecov/codecov-action v1 composite
  • julia-actions/julia-buildpkg v1 composite
  • julia-actions/julia-processcoverage v1 composite
  • julia-actions/julia-runtest v1 composite
  • julia-actions/setup-julia v1 composite
.github/workflows/format_pr.yml actions
  • actions/checkout v2 composite
  • peter-evans/create-pull-request v3 composite