fix: harden skyline solver inputs and convergence#864
Closed
ivan-aksamentov wants to merge 1 commit into
Closed
Conversation
Three robustness holes in the skyline optimizer: merger times were sorted with partial_cmp().expect(), which panics on a NaN time and departs from the OrderedFloat convention; a non-positive or non-finite stiffness was silently treated as no smoothing although the parameter is documented positive; and the Newton loop returned its last iterate whether or not the gradient tolerance was met, so a non-converged fit was indistinguishable from a converged one. Sort merger times with OrderedFloat and reject non-finite merger times; reject non-finite or non-positive stiffness, non-finite tolerance, and zero max_iter for multi-segment fits; and warn when Newton returns without reaching the gradient tolerance.
Member
|
this one makes sense. But interacts with the idea of folding the constant opt into the skyline. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fix/coalescent-skyline-solver-robustness->rustThe skyline optimizer had three robustness defects. Merger times were sorted with
partial_cmp().expect(), which panics on a NaN time and departs from the project'sOrderedFloatconvention. A non-positive or non-finite stiffness was silently treated as no smoothing although the parameter is documented positive. And the Newton loop returned its last iterate whether or not the gradient tolerance was met, so a non-converged fit was indistinguishable from a converged one.This sorts merger times with
OrderedFloatand rejects non-finite times, rejects non-finite or non-positive stiffness, non-finite tolerance, and a zero iteration budget for multi-segment fits, and warns when Newton returns without reaching the gradient tolerance [src].The input guards are hard errors because a non-finite or non-positive smoothing parameter has no valid interpretation and signals misconfiguration. Non-convergence is a warning rather than an error because the last iterate is still a usable estimate, and failing the run would discard an otherwise-progressing fit.
Work items
OrderedFloatand reject non-finite times [src]