# TAOADMM
Alternating direction method of multipliers method fo solving linear problems with constraints. in a min_x f(x) + g(z)  s.t. Ax+Bz=c. This algorithm employs two sub Tao solvers, of which type can be specified by the user. User need to provide ObjectiveAndGradient routine, and/or HessianRoutine for both subsolvers. Hessians can be given boolean flag determining whether they change with respect to a input vector. This can be set via TaoADMMSet{Misfit,Regularizer}HessianChangeStatus. Second subsolver does support TAOSHELL. It should be noted that L1-norm is used for objective value for TAOSHELL type. There is option to set regularizer option, and currently soft-threshold is implemented. For spectral penalty update, currently there are basic option and adaptive option. Constraint is set at Ax+Bz=c, and A and B can be set with TaoADMMSet{Misfit,Regularizer}ConstraintJacobian. c can be set with TaoADMMSetConstraintVectorRHS. The user can also provide regularizer weight for second subsolver. 
## References

- **** -*** Xu, Zheng and Figueiredo, Mario A. T. and Yuan, Xiaoming and Studer, Christoph and Goldstein, Tom
"Adaptive Relaxed ADMM: Convergence Theory and Practical Implementation"
The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), July, 2017.



## Options Database Keys

- ***-tao_admm_regularizer_coefficient        -*** regularizer constant (default 1.e-6)
- ***-tao_admm_spectral_penalty               -*** Constant for Augmented Lagrangian term (default 1.)
- ***-tao_admm_relaxation_parameter           -*** relaxation parameter for Z update (default 1.)
- ***-tao_admm_tolerance_update_factor        -*** ADMM dynamic tolerance update factor (default 1.e-12)
- ***-tao_admm_spectral_penalty_update_factor -*** ADMM spectral penalty update curvature safeguard value (default 0.2)
- ***-tao_admm_minimum_spectral_penalty       -*** Set ADMM minimum spectral penalty (default 0)
- ***-tao_admm_dual_update                    -*** Lagrangian dual update policy ("basic","adaptive","adaptive-relaxed") (default "basic")
- ***-tao_admm_regularizer_type               -*** ADMM regularizer update rule ("user","soft-threshold") (default "soft-threshold")





## See Also
 `TaoADMMSetMisfitHessianChangeStatus()`, `TaoADMMSetRegHessianChangeStatus()`, `TaoADMMGetSpectralPenalty()`,
`TaoADMMGetMisfitSubsolver()`, `TaoADMMGetRegularizationSubsolver()`, `TaoADMMSetConstraintVectorRHS()`,
`TaoADMMSetMinimumSpectralPenalty()`, `TaoADMMSetRegularizerCoefficient()`,
`TaoADMMSetRegularizerConstraintJacobian()`, `TaoADMMSetMisfitConstraintJacobian()`,
`TaoADMMSetMisfitObjectiveAndGradientRoutine()`, `TaoADMMSetMisfitHessianRoutine()`,
`TaoADMMSetRegularizerObjectiveAndGradientRoutine()`, `TaoADMMSetRegularizerHessianRoutine()`,
`TaoGetADMMParentTao()`, `TaoADMMGetDualVector()`, `TaoADMMSetRegularizerType()`,
`TaoADMMGetRegularizerType()`, `TaoADMMSetUpdateType()`, `TaoADMMGetUpdateType()`

## Level
beginner

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/tao/constrained/impls/admm/admm.c.html#TAOADMM">src/tao/constrained/impls/admm/admm.c</A>

## Examples
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/tao/constrained/tutorials/tomographyADMM.c.html">src/tao/constrained/tutorials/tomographyADMM.c.html</A><BR>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/tao/constrained/impls/admm/admm.c)


[Index of all Tao routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
