https://github.com/kul-optec/abstractoperators.jl

Abstract operators for large scale optimization in Julia

https://github.com/kul-optec/abstractoperators.jl

Science Score: 13.0%

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

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

Keywords

automatic-differentiation back-propagation derivatives julia-language large-scale optimization

Keywords from Contributors

nonlinear-programming optimization-algorithms
Last synced: 4 months ago · JSON representation

Repository

Abstract operators for large scale optimization in Julia

Basic Info
  • Host: GitHub
  • Owner: kul-optec
  • License: other
  • Language: Julia
  • Default Branch: master
  • Homepage:
  • Size: 950 KB
Statistics
  • Stars: 30
  • Watchers: 3
  • Forks: 9
  • Open Issues: 2
  • Releases: 9
Topics
automatic-differentiation back-propagation derivatives julia-language large-scale optimization
Created over 8 years ago · Last pushed almost 2 years ago
Metadata Files
Readme License

README.md

AbstractOperators.jl

Build status codecov

Description

Abstract operators extend the syntax typically used for matrices to linear mappings of arbitrary dimensions and nonlinear functions. Unlike matrices however, abstract operators apply the mappings with specific efficient algorithms that minimize memory requirements. This is particularly useful in iterative algorithms and in first order large-scale optimization algorithms.

Installation

To install the package, hit ] from the Julia command line to enter the package manager, then

julia pkg> add AbstractOperators

Usage

With using AbstractOperators the package imports several methods like multiplication * and adjoint transposition ' (and their in-place methods mul!).

For example, one can create a 2-D Discrete Fourier Transform as follows:

julia julia> A = DFT(3,4) ℱ ℝ^(3, 4) -> ℂ^(3, 4) Here, it can be seen that A has a domain of dimensions size(A,2) = (3,4) and of type domainType(A) = Float64 and a codomain of dimensions size(A,1) = (3,4) and type codomainType(A) = Complex{Float64}.

This linear transformation can be evaluated as follows:

```julia julia> x = randn(3,4); #input matrix

julia> y = A*x 3×4 Array{Complex{Float64},2}: -1.11412+0.0im 3.58654-0.724452im -9.10125+0.0im 3.58654+0.724452im -0.905575+1.98446im 0.441199-0.913338im 0.315788+3.29666im 0.174273+0.318065im -0.905575-1.98446im 0.174273-0.318065im 0.315788-3.29666im 0.441199+0.913338im

julia> mul!(y, A, x) == A*x #in-place evaluation true

julia> all(A'y - *(size(x)...)x .< 1e-12) true

julia> mul!(x, A',y) #in-place evaluation 3×4 Array{Float64,2}: -2.99091 9.45611 -19.799 1.6327 -11.1841 11.2365 -26.3614 11.7261 5.04815 7.61552 -6.00498 6.25586

```

Notice that inputs and outputs are not necessarily Vectors.

It is also possible to combine multiple AbstractOperators using different calculus rules.

For example AbstractOperators can be concatenated horizontally:

```julia julia> B = Eye(Complex{Float64},(3,4)) I ℂ^(3, 4) -> ℂ^(3, 4)

julia> H = [A B] [ℱ,I] ℝ^(3, 4) ℂ^(3, 4) -> ℂ^(3, 4) ```

In this case H has a domain of dimensions size(H,2) = ((3, 4), (3, 4)) and type domainType(H) = (Float64, Complex{Float64}).

When an AbstractOperators have multiple domains, this must be multiplied using an ArrayPartition (using RecursiveArrayTools with corresponding size and domain, for example:

```julia julia> using RecursiveArrayTools

julia> H*ArrayPartition(x, complex(x)) 3×4 Array{Complex{Float64},2}: -16.3603+0.0im 52.4946-8.69342im -129.014+0.0im 44.6712+8.69342im -22.051+23.8135im 16.5309-10.9601im -22.5719+39.5599im 13.8174+3.81678im -5.81874-23.8135im 9.70679-3.81678im -2.21552-39.5599im 11.5502+10.9601im ```

Similarly, when an AbstractOperators have multiple codomains, this will return an ArrayPartition, for example: ```julia julia> V = VCAT(Eye(3,3),FiniteDiff((3,3))) [I;δx] ℝ^(3, 3) -> ℝ^(3, 3) ℝ^(2, 3)

julia> V*ones(3,3) ([1.0 1.0 1.0; 1.0 1.0 1.0; 1.0 1.0 1.0], [0.0 0.0 0.0; 0.0 0.0 0.0])

```

A list of the available AbstractOperators and calculus rules can be found in the documentation.

Related packages

Credits

AbstractOperators.jl is developed by Niccolò Antonello and Lorenzo Stella at KU Leuven, ESAT/Stadius,

Owner

  • Name: OPTEC
  • Login: kul-optec
  • Kind: organization

KU Leuven Center of Excellence: Optimization in Engineering

GitHub Events

Total
  • Watch event: 1
  • Member event: 1
  • Issue comment event: 4
  • Pull request event: 2
Last Year
  • Watch event: 1
  • Member event: 1
  • Issue comment event: 4
  • Pull request event: 2

Committers

Last synced: 5 months ago

All Time
  • Total Commits: 184
  • Total Committers: 8
  • Avg Commits per committer: 23.0
  • Development Distribution Score (DDS): 0.223
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
nantonel n****l@e****e 143
Lorenzo Stella l****a@g****m 27
Lorenzo Stella s****o@a****m 5
nantonel n****l@i****h 5
Eviatar Bach e****h@p****m 1
Julia TagBot 5****t@u****m 1
Oliver Lylloff o****f@g****m 1
Tamás Hakkel h****t@u****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 12
  • Total pull requests: 14
  • Average time to close issues: 6 months
  • Average time to close pull requests: about 1 month
  • Total issue authors: 9
  • Total pull request authors: 6
  • Average comments per issue: 5.0
  • Average comments per pull request: 2.93
  • Merged pull requests: 12
  • Bot issues: 0
  • Bot pull requests: 0
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: 4.0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • lostella (2)
  • 1oly (2)
  • nantonel (2)
  • rfourquet (1)
  • dhanak (1)
  • hakkelt (1)
  • JuliaTagBot (1)
  • Benoit9 (1)
  • JeffBezanson (1)
Pull Request Authors
  • hakkelt (6)
  • nantonel (4)
  • lostella (4)
  • eviatarbach (1)
  • 1oly (1)
  • JuliaTagBot (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • julia 1 total
  • Total dependent packages: 1
  • Total dependent repositories: 5
  • Total versions: 5
juliahub.com: AbstractOperators

Abstract operators for large scale optimization in Julia

  • Versions: 5
  • Dependent Packages: 1
  • Dependent Repositories: 5
  • Downloads: 1 Total
Rankings
Dependent repos count: 4.6%
Forks count: 14.4%
Average: 15.3%
Stargazers count: 18.3%
Dependent packages count: 24.0%
Last synced: 5 months ago

Dependencies

.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
.github/workflows/ci.yml actions
  • actions/checkout v2 composite
  • julia-actions/julia-buildpkg latest composite
  • julia-actions/julia-runtest latest composite
  • julia-actions/julia-uploadcodecov latest composite
  • julia-actions/setup-julia v1 composite