{"id":26049524,"url":"https://github.com/emmt/amors.jl","last_synced_at":"2026-03-10T13:05:51.206Z","repository":{"id":279829449,"uuid":"615415088","full_name":"emmt/AMORS.jl","owner":"emmt","description":"Framework to apply the AMORS algorithm in Julia","archived":false,"fork":false,"pushed_at":"2025-11-28T17:00:46.000Z","size":82,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-11-30T22:12:58.564Z","etag":null,"topics":["amors","bilinear-model"],"latest_commit_sha":null,"homepage":"","language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emmt.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-17T16:32:40.000Z","updated_at":"2025-11-28T17:00:43.000Z","dependencies_parsed_at":"2025-03-08T01:44:23.073Z","dependency_job_id":null,"html_url":"https://github.com/emmt/AMORS.jl","commit_stats":null,"previous_names":["emmt/amors.jl"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/emmt/AMORS.jl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FAMORS.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FAMORS.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FAMORS.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FAMORS.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emmt","download_url":"https://codeload.github.com/emmt/AMORS.jl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FAMORS.jl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30334412,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T12:41:07.687Z","status":"ssl_error","status_checked_at":"2026-03-10T12:41:06.728Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amors","bilinear-model"],"created_at":"2025-03-08T01:44:14.550Z","updated_at":"2026-03-10T13:05:51.201Z","avatar_url":"https://github.com/emmt.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The AMORS algorithm in Julia\n\n[![Build Status](https://github.com/emmt/AMORS.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/emmt/AMORS.jl/actions/workflows/CI.yml?query=branch%3Amain) [![Coverage](https://codecov.io/gh/emmt/AMORS.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/emmt/AMORS.jl)\n\n## Description\n\nThis Julia package provides an implementation of the `AMORS` algorithm (for *Alternated\nMinimization using Optimal ReScaling*) for estimating the components `x` and `y` of a\n*bilinear model* denoted by `x⊗y` and which has the following fundamental invariance\nproperty:\n\n``` julia\n(α*x)⊗(y/α) = x⊗y\n```\n\nfor any scalar factor `α \u003e 0`.\n\nThe objective of `AMORS` is to minimize in `x ∈ 𝕏` and `y ∈ 𝕐` an objective function of\nthe form:\n\n``` julia\nF(x, y, μ, ν) = G(x⊗y) + μ*J(x) + ν*K(y)\n```\n\nwhere `G` is a function of the *bilinear model* `x⊗y`, `J` and `K` are positive\nhomogeneous functions of the respective variables `x` and `y`, `μ \u003e 0` and `ν \u003e 0` are\nhyperparameters.\n\nAn *homogeneous function*, say `J: 𝕏 → ℝ`, of degree `q` is such that `J(α*x) =\nabs(α)^q*J(x)` for any `α ∈ ℝ` and for any `x ∈ 𝕏` with `𝕏` the domain of `J`. It can be\nnoted that the following property must hold `∀ α ∈ ℝ`: `x ∈ 𝕏` implies that `α*x ∈ 𝕏`. In\nother words, `𝕏` must be a cone.\n\nTypically, `AMORS` is suitable to solve estimation problems where the unknowns, `x` and\n`y`, are the components of a bilinear model given some observations of this model and\n`G(x⊗y)` is a data-fidelity term (the lower the better is the agreement of the model with\nthe observations) while `J(x)` and `K(y)` are regularization terms implementing a priori\nconstraints in the components.\n\nThe `AMORS` algorithm has the following benefits over other methods such as alternating\noptimization in the variables `x` and `y`:\n\n- `AMORS` is not slower and usually much faster than the alternating method and its\n  convergence rate does not depend on the scaling of the initial variables (`x` or `y`);\n\n- With `AMORS` the tuning of the hyperparameters `μ` and `ν` is easier since the result\n  only depend on some averaging of `μ` and `ν` so only one hyperparameter really needs to\n  be tuned.\n\nTo benefit from `AMORS` algorithm, the user mostly has to provide code to solve the\nfollowing two sub-problems:\n\n``` julia\nx⁺ ≈ argmin_{x ∈ 𝕏} G(x⊗y) + μ*J(x)\ny⁺ ≈ argmin_{y ∈ 𝕐} G(x⊗y) + ν*K(y)\n```\n\n\n## References\n\nThe `AMORS` algorithm is described in:\n\n1. Samuel Thé, Éric Thiébaut, Loïc Denis, and Ferréol Soulez, \"*Exploiting the scaling\n   indetermination of bi-linear models in inverse problems*\", in 28th European Signal\n   Processing Conference (EUSIPCO), pp. 2358–2362 (2021)\n   [DOI](https://doi.org/10.23919/Eusipco47968.2020.9287593).\n\n2. Samuel Thé, Éric Thiébaut, Loïc Denis, and Ferréol Soulez, \"*Unsupervised\n   blind-deconvolution with optimal scaling applied to astronomical data*\", in Adaptive\n   Optics Systems VIII, International Society for Optics and Photonics (SPIE), Vol. 12185\n   (2022) [DOI](https://doi.org/10.1117/12.2630245).\n\n\n## Examples\n\nAn example of usage with a rank-1 bilinear model is provided in\n[`src/rank1.jl`](src/rank1.jl) and is tested in [`test/rank1tests.jl`](test/rank1tests.jl).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femmt%2Famors.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femmt%2Famors.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femmt%2Famors.jl/lists"}