Skip to content

Is the watchdog procedure implemented as described in the paper? #851

@johannahaffner

Description

@johannahaffner

Going through the code, I believe that there is a discrepancy between the description of the logic in the implementation paper in section 3.2 and the actual code. In the implementation paper, iterations in which no full-length step can be taken are counted, and then either of two heuristics are activated:

  • the filter is reset if the current constraint violation does not exceed the maximum constraint violation by a factor of ten (and the maximum constraint violation is decreased)
  • OR the watchdog procedure is triggered

Going through the code, these do not seem to be mutually exclusive, and the mechanisms that trigger them do appear to be separate and also not exactly as described in the paper. If I understand them correctly, then in IpBacktrackingLineSearch the watchdog

if( watchdog_shortened_iter_trigger_ > 0 && !in_watchdog_ && !goto_resto && !tiny_step && !in_soft_resto_phase_

is triggered (excluding certain other phases) when watchdog_shortened_iter_ exceeds some number, and this counter is incremented whenever a shorter step size is taken (in particular for every backtracking step), here

watchdog_shortened_iter_++;

rather than whenever the full step size $\alpha_{max}$, which is the result of the fraction to the boundary rule computed after factorising the KKT system cannot be taken.

The filter reset trigger appears to have been decoupled from this counter, and in IpFilterLSAcceptor, count_successive_filter_rejections_ appears to also not be special-cased to apply only in the case of not yet having backtracked

count_successive_filter_rejections_++;

I might miss where the coupling of these two heuristics occurs. If they can be triggered independently of one another by a succession of backtracking steps, then this would be valuable information for us to have. If so, for what reason was the behaviour altered here? Did you find it beneficial to trigger these heuristics more frequently? Do you believe the current approach to be more theoretically sound, given that it avoids special-casing the full-length step after factorisation?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions