The VMCON Algorithm¶
VMCON aims to solve a nonlinearly constrained problem (general nonlinear programming problem), specifically, minimising an objective function subject to several nonlinear constraints.
The Problem¶
Also called the general non-linear programming problem, we want to minimise an objective function (figure of merit), \(f(\vec{x})\), subject to some non-linear constraints:
where the objective and constraint functions are all \(n\)-dimensional.
Several facts are worth noting about problem formulation:
To maximise some function \(g(\vec{x})\) we would minimise the objective \(f(\vec{x}) = -g(\vec{x})\).
To constrain the solution such that \(h(\vec{x}) = a\) we would apply the constraint \(h(\vec{x}) - a = 0\).
To constrain the solution such that \(h(\vec{x}) \geq a\) we would apply the constraint \(h(\vec{x}) - a \geq 0\).
To constrain the solution such that \(h(\vec{x}) \leq 0\) we would apply the constraint \(-h(\vec{x}) \geq 0\).
To constrain the solution such that \(h(\vec{x}) \leq a\) we would apply the constraint \(a-h(\vec{x}) \geq 0\).
The Lagrangian¶
VMCON is a sequential quadratic programming solver, meaning it solves a quadratic sub-problem at each iteration to find the search direction; a line-search is used along this direction to determine an appropriate step length, reducing the impact of poor starting conditions. The quadratic program solved at each iteration attempts to find the search direction that will minimise a quadratic approximation of the Lagrangian (i.e. the search direction that balances minimising the objective function while satisfying the linearised constraints).
Of specific note is the Lagrangian function:
and the derivative of the Lagrangian function, with respect to \(\vec{x}\):
Initialisation of VMCON¶
VMCON is initialised with:
The objective function to minimise, \(f(\vec{x})\), as described above.
The constraints \(c_i(\vec{x}), i = 1,...,m\), as described above.
An initial sample point \(\vec{x}_0\).
\(\mathbf{B}\): the initial Hessian approximation matrix, usually the identity matrix (\(n\times n\)).
\(\epsilon\): the “user-supplied error tolerance”.
We also set the iteration number to 1, \(j=1\).
The Quadratic Programming Problem¶
The Quadratic Programming Problem (QPP) will also be known as the Quadratic Sub-Problem (QSP) because it forms only a part of the VMCON algorithm.
The function \(Q(\delta)\) is a quadratic approximation of the Lagrangian function. Minimising \(Q(\delta)\) subject to a linearisation of our constraints about \(\vec{x}_{j-1}\) (aka solving the QPP) provides the search direction \(\delta_j\) from \(\vec{x}_{j-1}\) upon which \(\vec{x}_j\) will lay. Solving the QPP also provides the Lagrange multipliers (\(\lambda_{j}\)).
The quadratic program to be minimised on iteration \(j\) is:
subject to
The Convergence Test¶
The convergence test is performed on the \(j\)’th iteration after the QSP. The convergence test is the sum of two terms:
The predicted change in magnitude of the objective function.
The complementary error; where the complementary error being 0 would mean that a specific constraint is at equality or the Lagrange multipliers are 0.
This is encapsulated in the equation:
The Line Search¶
The line search helps to mitigate poor initial conditions. It does this by searching in a line along the ‘search direction’ \(\delta\) such that:
\(\alpha\) is found via the minimisation of:
On the \(j\) th iteration, \(\vec{\mu}_{j,i}\) is a 1D vector which contains \(i = 1,...,m\) elements. On the first iteration:
On subsequent iterations:
The line search iterates for a maximum of 10 steps and exits if the chosen value of \(\alpha\) satisfies either the Armijo condition:
or the so-called Kovari condition, which was an ad-hoc break condition in the PROCESS implementation of VMCON, therefore does not appear in the paper:
Once the line search exits, we have found our optimal value and \(\alpha_j = \alpha\).
On each iteration of the line search, we revise \(\alpha\) using a quadratic approximation:
The Broyden-Fletcher-Goldfarb-Shanno (BFGS) Quasi-Newton Update¶
The final stage of an iteration of the VMCON optimiser is to update the Hessian approximation via a BFGS update.
For an unconstrained problem, we use the following differences to update \(\mathbf{B}\):
which is calculated using (1).
Since we have a constrained problem, we define a further quantity:
where
The definition of \(\vec{\eta}\) ensures \(\mathbf{B}\) remains positive semi-definite, which is a prerequisite to solving the QSP.
We can then perform the BFGS update:
The VMCON Algorithm¶
This page covers the mathematics and theory behind the VMCON algorithm. For completeness, the following flow diagram demonstrates how the algorithm is implemented at a high level.
flowchart
setup("Initialisation of VMCON") --> j1("j = 1")
j1 --> qsp("The Quadratic Programming Problem (Lagrange multipliers and search direction)")
qsp --> convergence_test(["Convergence criterion met?"])
convergence_test -- "Yes" --> exit[["Exit"]]
convergence_test -- "No" --> linesearch("Line search (next evaluation point)")
linesearch --> bfgs("BFGS update")
bfgs --> incrementj("j = j + 1")
incrementj --> qsp