(Please note that the following description, while being algorithmically correct, does not necessarily represent the actual order of execution and computational efficiencies employed in NetWeaver. Rather it is described in this fashion to facilitate understanding of the principles used.)
Target node is the goal (dependency network) or goal group (group of dependency networks) of interest of which we are testing the data link against to determine the data link's influence upon the target node.
In practice all nodes are reset so that they are all dirty and then the target node is evaluated. In the process of evaluation, evaluate messages are sent down through the networks undirtying nodes along the way. Only nodes that are being used are undirtied. Others that have not been reached stay dirty.
For each place a given data link is used, a get impact message is sent and the results are summed for the data link. Basically, each path (branch) between a data link and target node is evaluated for its impact and then the impacts for each branch are added together to give a composite impact for the data link.
Each branch can have an impact of 0-1. Each node along the path has an impact factor of 0-1 based on the node type and current value with a number closer to 1 representing more impact and closer to zero representing less impact. The branch's impact is then the product of the impact factors of all the nodes along the path.
The node impact factor is a product of two other factors. The first factor deals with the local topology. The topology factor is calculated as the node's fraction of weight of the total sibling weight. In other words, the topology factor is the node's weight divided by the sum of the weights of all the nodes directly connected to the node above it. The topology factor is one if the node is the only child of its parent (it is the only node hanging from the one above) and something less than one otherwise. The more competition, the less the topology factor.
The second impact factor deals with the node's capability to be changed (influenced) by the data link (actually the data link's branch to the node). For example, an already true OR node cannot be changed by considering additional information. The same is true for an already false AND node. The factor then is a function of the current value and dirtiness of the node.
A node that is dirty has an influenceability factor of zero. Being dirty indicates that the node is not being used in the current evaluation, in effect stating that this branch has no influence. Forced and Ignored nodes are treated similarly (they also have a factor of zero influence).
For non-dirty nodes, we are currently using a simple linear function that is one when the current node value indicates it can be maximally changed (a value of false for an OR node and true for an AND node) and goes to zero as the node's value indicates it cannot be changed (a value of true for an OR node and false for an AND node). Currently, only OR and AND nodes have this sort of influenceability factor, the others are given a factor of one as a default. We probably will want to change this as we figure out how.
Data Link Influence = Branch_1 Inf + Branch_2 Inf +…+ Branch_n Inf
Branch_i Influence = Node_1 Inf * Node_2 Inf *…* Node_n Inf
Node_i Influence = Local_Topology_Factor * Local_Influenceability_Factor
Local_Topology_Factor = Node_Weight/Total_Cohort_Weight
Local_Influenceability_Factor = f(dirtiness, trueness_level)
Because along a branch all factors are 0-1 and are multiplied, the resultant influence for a branch can range only 0-1. Therefore, the influence of a data link can range 0-number_of_branches.
Influence is dependent on current states and topology. Current states change with data applied. “More” topology tends toward smaller influences.