-
Notifications
You must be signed in to change notification settings - Fork 77
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
TD3: non-incremental reluctant destabilization at all variables #365
Conversation
Helmut and I were discussing just now. He thought that there might be a problem with destabilize leading to calls to |
@sim642 @vesalvojdani |
I think we never did because we didn't even get it to pass our tests properly, so performance wasn't the primary concern. And we haven't looked at this for a while since it's not part of #391. |
We tried this, and it fixes the termination issues, but this leads to all nodes in loops to become widening points, severely worsening the precision. An idea might be to have a separate |
I tried this now, but this does not fix the termination issues on e.g. |
What do we want to do with this? Any interest in fixing it up and merging or should we close this issue? |
I think there was no clear way to make this work because it drastically changes the dynamics of the solver, especially w.r.t. side effects. So I'll just close it. |
This is an attempt (or two) to generalize the reluctant function return node destabilization during incremental loading to general use in TD3. This was discussed briefly during GobCon, but the draft PR is here to demonstrate exactly what was tried and where it mysteriously fails.
In the simplest (uncommented) form, this is as simple as replacing the recursive
destabilize x
call withsolve x Widen
. If the value changes,solve
will do the recursivedestabilize
call. If it doesn't change, it won't.This almost works on our regression suite:
01/37 div
is unknown at an assertion.22/13 was_problematic_3
,24/05 previously_problematic_c
,24/08 previously_problematic_f
,24/10 previously_problematic_h
time out in 10s.Our belief is that this is somehow due to the multiple recursive
solve
s potentially "intersecting": side effects in solving of one destabilize and thus attempt to resolve a part of another, which then would also be destabilized and resolved differently from the directsolve
call fromdestabilize
. But this is just a hypothesis.There is a commented out attempt to hopefully bypass the issue by destabilizing everything normally until certain cutoff nodes (function return nodes in this case) and then call
solve
only on those afterwards. But the same sort of problem can still occur between functions via side effects.TODO