It figures that the second I mention my implementation as working, and have a meeting with my supervisor organised, that something goes horribly, horribly, wrong. Coarsening now only works at one level. This is due to the way in which I compare edges against other edges as memory as opposed to an ID number.
For example, a section of memory looks like: name.Class@XXXXX, where an edge will point to the memory of its vertices as opposed to holding information about its ID (my attempt at avoiding memory usage). So two edges sharing a vertex would look like:
v(1) | v(2) name.Class@00002 | name.Class@00003
Somewhere within my algorithm (during matching and creation of edges), the vertices use different segments of memory closer to:
v(1) | v(2) name.Class@0000C | name.Class@0000D
To fix this, I just need to change how the matches are created (so point to existing memory blocks for vertices). What is more worrying is that this working previously, and therefore something has changed (without me realising), fortunately I have a fairly secure versioning process so I can always roll back to a previous point and modify that.
On a different but unrelated note, here is the perfect explanation for this, courtesy of Piled Higher & Deeper:
Sorry - I meant to turn off the negation field last week.
ReplyDeleteChris