QPALM main
Proximal Augmented Lagrangian method for Quadratic Programs
Loading...
Searching...
No Matches
iteration.h
Go to the documentation of this file.
1/**
2 * @file iteration.h
3 * @author Ben Hermans
4 * @brief QPALM main solver routines.
5 * @details This file contains the functions that make up the qpalm algorithm (the functions that qpalm_solve will use).
6 * These include the computation of the residuals at the start of the iteration,
7 * the update of the primal variables in an inner iteration,
8 * the update of the penalty factors and dual variables in an outer iteration,
9 * the computation of the primal and dual objective values, etc.
10 */
11
12#ifndef ITERATION_H
13#define ITERATION_H
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19#include <qpalm/types.h>
20#include <qpalm/global_opts.h>
21
22/**
23 * Compute the residuals (in vector form)
24 *
25 * This routine is called at the start of every QPALM iteration. It computes the current residual vectors,
26 * which are required by the termination routines and by the other iteration routines.
27 * @param work Workspace
28 * @param c Linear systems solver environment
29 */
31 solver_common *c);
32
33/**
34 * Initialize penalty factors from initial x.
35 *
36 * The formula used here can be found in \cite birgin2014practical.
37 * @param work Workspace
38 * @param c Linear systems solver environment
39 */
41 solver_common *c);
42
43/**
44 * Update the penalty factors.
45 *
46 * Constraints that are active are penalized in proportion to their constraint violation.
47 * If the number of changed penalty parameters is low, and the proximal penalty need not be further updated,
48 * then the factor LD is updated using a low-rank update based on the changed penalty factors.
49 * @param work Workspace
50 * @param c Linear systems solver environment
51 */
52void update_sigma( QPALMWorkspace *work,
53 solver_common *c);
54
55/**
56 * Update the proximal penalty.
57 *
58 * The proximal penalty parameter is increased by a constant factor at every outer update,
59 * until a certain maximum value is reached.
60 * @param work Workspace
61 */
63
64/**
65 * Maximize the proximal penalty.
66 *
67 * The proximal penalty parameter can be increased when the primal residual is low and the number
68 * of active constraints no longer changes. Increasing the proximal penalty will significantly speed
69 * up the convergence of the dual residual in that case. First, the maximum allowed value is computed,
70 * based on the fact that @f$Q+A^T \Sigma A + \frac{1}{\gamma}I@f$ should be sufficiently positive
71 * definite for the factorization routines.
72 * @param work Workspace
73 * @param c Linear systems solver environment
74 */
75void boost_gamma( QPALMWorkspace *work,
76 solver_common *c);
77
79 solver_common *c,
80 c_int iter_out);
81
82void update_proximal_point_and_penalty(QPALMWorkspace *work, solver_common *c, c_int iter_out, c_float *eps_k_abs, c_float *eps_k_rel);
83
84void update_dual_iterate_and_parameters(QPALMWorkspace *work, solver_common *c, c_int iter_out, c_float *eps_k_abs, c_float *eps_k_rel);
85
86
87/**
88 * Update the primal iterate.
89 *
90 * This function calls the functions that compute the newton direction and stepsize from exact linesearch,
91 * and applies the update.
92 * @param work Workspace
93 * @param c Linear systems solver environment
94 */
96 solver_common *c);
97
98/**
99 * Compute the (unscaled) primal objective value at the current iterate.
100 * @return The value of the primal objective at the current iterate.
101 * @param work Workspace
102 */
104
105/**
106 * Compute the (unscaled) dual objective value at the current iterate.
107 * @return The value of the dual objective at the current iterate.
108 * @param work Workspace
109 * @param c Linear systems solver environment
110 */
112 solver_common *c);
113
114
115# ifdef __cplusplus
116}
117# endif
118
119#endif
Custom memory allocation, print and utility functions, and data types for floats and ints.
ladel_int c_int
type for integer numbers
Definition global_opts.h:42
ladel_double c_float
type for floating point numbers
Definition global_opts.h:41
void initialize_sigma(QPALMWorkspace *work, solver_common *c)
Initialize penalty factors from initial x.
Definition iteration.c:48
c_float compute_dual_objective(QPALMWorkspace *work, solver_common *c)
Compute the (unscaled) dual objective value at the current iterate.
Definition iteration.c:328
void update_dual_iterate_and_parameters(QPALMWorkspace *work, solver_common *c, c_int iter_out, c_float *eps_k_abs, c_float *eps_k_rel)
Definition iteration.c:249
void update_gamma(QPALMWorkspace *work)
Update the proximal penalty.
Definition iteration.c:126
void update_proximal_point_and_penalty(QPALMWorkspace *work, solver_common *c, c_int iter_out, c_float *eps_k_abs, c_float *eps_k_rel)
Definition iteration.c:209
void update_sigma(QPALMWorkspace *work, solver_common *c)
Update the penalty factors.
Definition iteration.c:73
void update_or_boost_gamma(QPALMWorkspace *work, solver_common *c, c_int iter_out)
Definition iteration.c:184
void update_primal_iterate(QPALMWorkspace *work, solver_common *c)
Update the primal iterate.
Definition iteration.c:269
c_float compute_objective(QPALMWorkspace *work)
Compute the (unscaled) primal objective value at the current iterate.
Definition iteration.c:287
void boost_gamma(QPALMWorkspace *work, solver_common *c)
Maximize the proximal penalty.
Definition iteration.c:138
void compute_residuals(QPALMWorkspace *work, solver_common *c)
Compute the residuals (in vector form)
Definition iteration.c:22
QPALM Workspace.
Definition types.h:204
Internal data structures used in QPALM.
ladel_work solver_common
Definition types.h:25