Splitting this out from #1189 at @marcelolafleur's suggestion.
While working on initial-wealth anchoring in #1189, @marcelolafleur found that when the anchor is updated inside the outer loop, the initial cohorts' root-finding can land on infeasible negative-consumption solutions that nonetheless pass the constraint check. From the PR description:
rescaling the households' initial wealth between outer-loop iterations -- even damped -- drives the initial cohorts' root-finding into infeasible negative-consumption roots that satisfy the extended FOCs and pass the constraint checker.
The gist: a root can satisfy the extended FOCs while implying negative consumption, and the constraint checker watches a different consumption object than the one that goes negative, so these roots are not caught. That means an infeasible solution can slip through silently.
This came up as a side effect of the anchoring work rather than something #1189 needs to fix, but it seems worth a dedicated look. @marcelolafleur offered to add more detail here.
Splitting this out from #1189 at @marcelolafleur's suggestion.
While working on initial-wealth anchoring in #1189, @marcelolafleur found that when the anchor is updated inside the outer loop, the initial cohorts' root-finding can land on infeasible negative-consumption solutions that nonetheless pass the constraint check. From the PR description:
The gist: a root can satisfy the extended FOCs while implying negative consumption, and the constraint checker watches a different consumption object than the one that goes negative, so these roots are not caught. That means an infeasible solution can slip through silently.
This came up as a side effect of the anchoring work rather than something #1189 needs to fix, but it seems worth a dedicated look. @marcelolafleur offered to add more detail here.