PAC model: improve robusteness of detection of non-optimising agents part
The method BinaryOpNode::getPacNonOptimizingPart()
is not sufficiently robust. It may fail for expressions of the form (1-optim_share)*A*B
, if the preprocessor reorders the factors.
This can be reproduced with tests/pac/trend-component-2-mce/example_det.mod
, by replacing (1-gamma)*(.5*diff(y1)-.7*diff(y2))
with (1-gamma)*beta*(.5*diff(y1)-.7*diff(y2))
(adding beta
as a 2nd factor) in equation eq:pac
.
The solution is probably to create a new method ExprNode::decomposeMultiplicativeFactors()
(similarly to ExprNode::decomposeAdditiveTerms()
), and use it for detecting the non-optimising part.