MergeAgent
An Agent which serves as the merge engine for the topic map
Core Algorithm
We are given a node, "myNode", and asked to find all the nodes in the topic map with which it might merge, the reasons given for the suggested merge, and votes associated with those reasons.
reasons, votes, and nodes are a triple { reasons, vote, node }
a reason is a proxy (explanation) of a given merge test, for instance "same label" where, for
instance, that node might have several labels which are the same,
which must be federated along the lines of reason-node pairs
var totalVotes
for each merge candidate node
for each reason given -- where reason == merge test
totalVotes += votes for the reason
submit those results {all reasons, total vote, node} to merge decision process
When a merge happens, the merge tuple (topic which connects merged nodes) is given the total vote, and list of votes.
Might be interesting to give the {vote, reason} pair
Merge Decisions
A merge decision is that the total of all votes crosses some threshold.
- Votes are doubles in the range from 0 to some positive number; there are no negative votes.
- A decision is made when the votes are summed: that is, for each reason's vote, sum them into a total.
- How one does that is open for experiment.
- Possible approach is to normalize votes against the maximum vote, then add those
- Where does that threshold come from?
- Is there a lessor threshold in which a merge suggestion is indicated?
- That would entail a new kind of merge relation type
- This would not entail the creation of a virtual merge, just an assertion of a possible merge with reasons and votes and total vote
- That would be followed by some sort of notification somewhere which advises on a possible merge