SOME COMMON NET MANIPULATIONS

Here are some common manipulations in an inference net that are more than trivial addition and deletion. Some of them might be offered as direct operations in future versions of Istar.

Splitting a node: serial


WHAT:
         a     d                   a               d
          \   /                     \             /
      b --  X  -- e    becomes  b  --  X1 ----- X2  -- e
          /   \                     /             \
         c     f                   c               f

      a - X, b - X, c - X
      X - d, X - e, X - f

becomes

      a - X1, b - X1, c - X1
      X1 - X2
      X2 - d, X2 - e, X2 - f

HOW:
      Create X2
      Link X1 -- X2
      Redirect all consequent links of X1 (from d,e,f) into X2
      Rename X1 as needed
      (Sometimes it is more convenient to create X1 and redirect a,b,c
      links.)
      Weights:  With bayesians the second will behave differently because
      the effect of a,b,c on X2 and hence on d,e,f will now be filtered by
      the extra link X1 - X2.  You will have to alter weights to suit.  But
      presumably you wanted to change the behaviour anyway and, for
      instance, have extra links antecedent to X2.  So the pattern of
      weights would have to be reconsidered anyway.

WHY:
      Because you realise that what you thought was a single concept is in
fact two.

Splitting a node: parallel


WHAT:
         a     d       or:  a - X, b - X, c - X,
          \   /             X - d, X - e, X - f
      b --  X  -- e
          /   \
         c     f

becomes:

      a - X1, b - X1, c - X1
      X1 - d, X1 - e, X1 - f

      a - X2, b - X2, c - X2
      X2 - d, X2 - e, X2 - f

(That is, everything that connects to X1 is also made to connect to X2 in 
the same way.  Difficult to draw with character graphics).

HOW:

      Create X2
      Link a,b,c -- X2
      Link X2 -- d,e,f
      Rename X1 as needed
      Weights:  As for serial split.

Merging Nodes


Merging nodes is not so simple.

#  To merge any node X into another Y, that both exist, simply redirect all 
links that enter X as antecedent and over to Y, and then all those that 
leave it as consequent.

#  But this simple method is not always appropriate, as here, where we have 
the pattern:

      W --------------- Y
       \               /
        \----- X -----/

First, it would create two parallel links between W and Y - the direct link 
(WY), the one that was WX and now becomes WY - and this would probably 
create too strong an effect.  (If you want to check this out, set up a wee 
piece of KB like the above below your main one, then run it with W as -100 
and 100, and note the limits.

#  Second, it would create an error as we tried to make the one that was XY 
into YY.  Inference (and precedence) relationships cannot form a cycle 
(just as you find in a spreadsheet); they are part of a Directed Acyclic 
Graph (DAG).  In this case, trying to connect an item to itself, that 
is YY, is a (tiny) cycle and you would get an error.  (Try drawing a link 
from any of your items back into itself: start drawing the link an release 
it over itself, and you will see.)  But the real problem lies in longer 
cycles, say from A to B to C to D to E and back to A, which are not always 
easy to detect visually in a large and complex KB.

To be completed ...


Copyright (c) Andrew Basden 1997.