You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When the result of reifier is unused elsewhere in the config it cannot affect the outcome of a search. As such those propagators should not be part of the solve space. The operation being checked is only enforced if the boolean is solved and if that never happens, the reifier will never do anything.
Note that while this appears to be worthwhile for or main case, it's unsafe to do so because you don't really know how the boolean vars are used externally. For example, they are used in markov matrix conditions and we can't really detect that easily. Let alone use cases really outside of finitedomain in a callback or something. So for now this vector is not pursued and must be fixed at call sites.
When the result of a reifier is declared as solved immediately, a regular propagator for given operation or inverse operation should be added depending on the solve value. The reifier itself should not become a propagator as it's only an extra layer of overhead. This layer can only affect the result var and since that's already done it is no longer needed.
When the either operand var is declared solved, the reifier should compile a propagator that matches the expected outcome. For example, an isEq(A, 1) is equal to isEq(A, 1, [0,1]) and means C=A==1?1:0, which we could simplify with an eq. Some mapping is in order for non-boolean-bound values.
The text was updated successfully, but these errors were encountered:
This ticket has multiple parts;
Note that while this appears to be worthwhile for or main case, it's unsafe to do so because you don't really know how the boolean vars are used externally. For example, they are used in markov matrix conditions and we can't really detect that easily. Let alone use cases really outside of finitedomain in a callback or something. So for now this vector is not pursued and must be fixed at call sites.
isEq(A, 1)
is equal toisEq(A, 1, [0,1])
and meansC=A==1?1:0
, which we could simplify with aneq
. Some mapping is in order for non-boolean-bound values.The text was updated successfully, but these errors were encountered: