| Documentation | Linux/macOS/Windows/FreeBSD | Coverage | DOI |
|---|---|---|---|
If you use PartitionedStructures.jl in your work, please cite using the format given in CITATION.bib.
Julia ≥ 1.6.
pkg> add PartitionedStructures
pkg> test PartitionedStructuresMethods 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
where:
-
$f_i$ is the$i$ -th element function whose dimension is smaller than$f$ ; -
$U_i$ 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.
- the elemental variables represent the subset of variables that parametrizes
$f_i$ , i.e. the rows of$U_i$ 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
$f_i$ , i.e.$U_i$ may be a dense matrix.
The implementation of the linear-operator
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.
Check the tutorial.
| 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 |
| 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_pvto makePartitionedVector <: AbstractVector; - PartitionedKnetNLPModels.jl to train a classification neural network with a stochastic limited-memory partitioned quasi-Newton method.
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.