# Starting Point for IPOPT

What is a Starting Point?
Putting this into Practice
Associated Options
## What is a Starting Point?

In general, given a point, an iteration of an optimisation algorithm will consist of two steps:

- check if the current point is optimal, and, if not,
- use the information provided by that point to generate a new one that is closer to the optimal solution.

Then, to start the algorithm it is necessary to provide an initial/starting point. Of course, the closer to an optimal solution the initial point is, the more likely it is that the algorithm will find an optimal point quickly. Therefore, the selection of the starting point plays an important role in the optimisation process.

## Putting this into Practice

In this section, we describe the different options that Octeract Engine uses to generate starting points when IPOPT is called to solve a problem.
Consider the optimisation problem:
\begin{equation}
\begin{aligned}
\min_{x \in \mathbb{R}^n} & f(x)\\
\text{s.t. } & g_j(x) = 0, \text{ } j=1,\dots,m \\
& l_i \leq x_i \leq u_i, text{ } i = 1,\dots,n.
\end{aligned}
\end{equation}
IPOPT requires an initial point \((x^0, \lambda^0, z_l^0, z_u^0) \in \mathbb{R}^{n \times m \times n\times n}\), where \(x^0\) is the initial guess for the (primal) variables in the problem above, and \(\lambda^0\), \(z_l^0\) and \(z_u^0\) are the starting points corresponding to the dual variables for the constraints, lower and upper bounds respectively.

Currently, the strategy for the initial dual variables is unique: set the vector \(\lambda^0\) equal to zero, and the vectors \(z_l^0\) and \(z_u^0\) equal to one. On the other hand, Octeract Engine offers 5 strategies to set the initial primal point \(x^0\). We will assume that if a variable \(x_i\) does not have a lower bound then \(l_i= -\infty\) (similarly \(u_i = \infty\) if \(x_i\) is unbounded above).

`CONSTANT_VALUE_ONE`

Sets \(x_i^0\) to the closest number to 1 in the range of the variable.

`VARIABLE_MIN_POINT`

Sets \(x_i^0\) to \(l_i\) or to the closest number to 1 in the range of the variable if \(l_i = -\infty\).

`VARIABLE_MAX_POINT`

Sets \(x_i^0\) to \(u_i\) or to the closest number to 1 in the range of the variable if \(u_i = \infty\).

`VARIABLE_MID_POINT`

Sets \(x_i^0\) to \(\frac{l_i+u_i}{2}\) if both \(l_i\) and \(u_i\) are finite, otherwise it sets \(x_i^0\) according to the â€˜Constantâ€™ strategy.

`CUSTOM_CONSTANT_VALUE`

Sets \(x_i^0\) to the closest number assigned to the option `IPOPT_INITIAL_VALUE`

in the range of the variable. Note that certain values of IPOPT_INITIAL_VALUE may be mathematically inappropriate (e.g., division by zero).

## Associated Options