# EndgameTracker

`EndgameTracker`

is a data structure to track for a given `AbstractHomotopy`

$H(x,t)$ a solution $x$ from $t₁ > 0$ to $0$, i.e., $H(x,t₁) = 0$ and $x'$ with $H(x',0) = 0$ is returned. This is done by following an implicitly defined path $x(t)$ using `Tracker`

. In contrast to `Tracker`

this also has an *endgame* to handle diverging paths and singular solutions.

`HomotopyContinuation.AbstractPathTracker`

— Type`AbstractPathTracker`

Supertype for path trackers.

## Constructor and Options

`HomotopyContinuation.EndgameTracker`

— Type```
EndgameTracker(tracker::Tracker; options = EndgameOptions())
EndgameTracker(H::AbstractHomotopy; options = EndgameOptions())
```

A `EndgameTracker`

combines a `Tracker`

with an endgame. That is, while a `Tracker`

assumes that the solution path is non-singular and convergent, the endgame allows to handle singular endpoints as well as diverging paths. To compute singular solutions the *Cauchy endgame* used, for divering paths a strategy based on the valuation of local Puiseux series expansion of the path is used. By convention, a `EndgameTracker`

always tracks from $t=1$ to $t = 0$. See `EndgameOptions`

for the possible options.

`HomotopyContinuation.EndgameOptions`

— Type`EndgameOptions(; options...)`

Options controlling the behaviour of a `EndgameTracker`

.

**Options**

`at_infinity_check = true`

: Whether divering paths should be truncated.`endgame_start = 0.1`

: The point`t`

in time where the endgame starts. Set it to`0.0`

to disable the endgame.`only_nonsingular = false`

: If`true`

don't run the Cauchy endgame to handle singular solutions.`zero_is_at_infinity = false`

: Whether paths going to a solution where at least one coordinates is zero should also be considered diverging.

**Parameters**

These parameters control the behaviour during the endgame.

`max_endgame_steps = 2000`

: The maximal number of steps performed during the endgame.`max_winding_number = 6`

: The maximal winding number which is attempted in the Cauchy endgame.`min_cond = 1e6`

: The minimal condition number after which an endgame strategy is considered to be applied.`min_cond_growth = 1e4`

: The minimal condition number growth after which an endgame strategy is considered to be applied.`min_coord_growth = 100`

: The minimal relative growth of a coordinate necessary to to be considered going to infininity (resp. zero).`val_at_infinity_tol = 1e-3`

: Tolerance on the valuation which has to be satisfied before a path is considered to diverge / go to infinity.`val_finite_tol = 1e-3`

: Tolerance on the valuation which has to be satisfied before the endgame is started.`sing_cond = 1e14`

: value for the condition number above which a solution is considered singular.`sing_accuracy = 1e-12`

: value for the accuracy number above which a solution is considered singular.`scaling_threshold = -30.0`

: Row scaling of matrices is only applied to rows with`e < scaling_threshold`

, where is the norm of the row is estimated to be`2^e`

. See`skeel_row_scaling`

for details.`refine_steps = 3`

: number of steps for refining solutions at the end.

## Tracking

`HomotopyContinuation.track`

— Method```
track(endgame_tracker::EndgameTracker, x::AbstractVector, t::Real = 1.0;
path_number = nothing, debug = false)
```

Track the given start solution `x`

from `t`

towards `0`

using the given `endgame_tracker`

. Returns a `PathResult`

.

```
track(endgame_tracker::EndgameTracker, r::PathResult, t::Real = 1.0;
path_number = nothing, debug = false)
```

Track `solution(r)`

from `t`

towards `0`

using the given `endgame_tracker`

.