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
Repository
Partitioned derivatives storage and partitioned quasi-Newton updates
Basic Info
Statistics
- Stars: 10
- Watchers: 3
- Forks: 1
- Open Issues: 14
- Releases: 0
Metadata Files
README.md
PartitionedStructures.jl: Partitioned derivatives storage and partitioned quasi-Newton updates
| Documentation | Linux/macOS/Windows/FreeBSD | Coverage | 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
- Website: https://juliasmoothoptimizers.github.io
- Repositories: 63
- Profile: https://github.com/JuliaSmoothOptimizers
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
Top Committers
| Name | 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
Pull Request Labels
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
- Documentation: https://docs.juliahub.com/General/PartitionedStructures/stable/
- License: MPL-2.0
-
Latest release: 0.1.6
published almost 3 years ago
Rankings
Dependencies
- actions/checkout v2 composite
- julia-actions/setup-julia latest composite
- JuliaRegistries/TagBot v1 composite
- 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
- actions/checkout v2 composite
- peter-evans/create-pull-request v3 composite