Account for BP edge case where network evaluates to 0 #178
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.
This PR fixed the
bp
edge case where the network contracts to the scalar0
which would previously yieldNan
.This is achieved by:
default_message_update
function to only divide by thenorm
if its not zero -> avoiding the creating of message tensors withnan
in them.logscalar(alg::Algorithm"bp", tn::AbstractITensorNetwork)
a check if any of the denominators terms are zero. If this is the case thenlog(tn)
should be-Inf
. This is because, on a tree, if the product ofmessage(pe)
andmessage(reverse(pe)
on anypartitionedge
is zero then the contraction of the tree must be zero (assuming the messages are converged).A quick test is added.
@ryanlevy this should fix the issue with
bp
inITensorNumericalAnalysis.jl