Wave front

from Nets import Network
def TestAcy():
    N = Network()
    N.addNode('A'); N.addNode('B'); N.addNode('C')
    N.addNode('D'); N.addNode('E'); N.addNode('F')
    N.addArc('A','C',{'w':2}); N.addArc('A','D',{'w':3})
    N.addArc('B','C',{'w':3}); N.addArc('B','F',{'w':5})
    N.addArc('C','D',{'w':2}); N.addArc('C','E',{'w':3})
    N.addArc('D','E',{'w':1}); N.addArc('E','F',{'w':1})
    N.setNode('A','T',0); N.setNode('B','T',0)
    N.onCircle()
    print(N)
    N.draw(800,800,"Cornsilk")
    N.savePajek('testAcy.net')
    return N
N = TestAcy()
>>> def CPM(N,v):
  return max([ N.getNode(N.initNode(a),'T')+N.getLink(a,'w')\
               for a in N.inStar(v) ] + [0])
>>> CPM(N,'C')
3
>>> CPM(N,'A')
0
>>> CPM(N,'B')
0
>>> N.setNode('C','T',CPM(N,'C'))
>>> N._nodes['C']
[{}, {'A': [1], 'B': [3]}, {'D': [5], 'E': [6]}, {'x': 0.8897114, 'y': 0.275, 'T': 3}]
>>> N._nodes['D']
[{}, {'A': [2], 'C': [5]}, {'E': [7]}, {'x': 0.5, 'y': 0.05}]
>>> N.setNode('D','T',CPM(N,'D'))
>>> N._nodes['D']
[{}, {'A': [2], 'C': [5]}, {'E': [7]}, {'x': 0.5, 'y': 0.05, 'T': 5}]
>>> N.topologicalOrder()
['B', 'A', 'C', 'D', 'E', 'F']
>>> for v in N.topologicalOrder(): N.setNode(v,'T',CPM(N,v))
>>> for v in N.nodes(): print(v,N.getNode(v,'T'))
A 0
B 0
C 3
D 5
E 6
F 7
>>> 

Or, even better: CPM is a subprogram - more than one quantity can be changed in a node v

def CPM(N,v):
  T = max([ N.getNode(N.initNode(a),'T')+N.getLink(a,'w')\
    for a in N.inStar(v) ] + [0])
  N.setNode(v,'T',T)
N = TestAcy()
for v in N.topologicalOrder(): CPM(N,v)
for v in N.nodes(): print(v,N.getNode(v,'T'))

And to count the number of paths into a vertex

>>> def CNT(N,v):
  L = [ N.getNode(N.initNode(a),'C') for a in N.inStar(v) ]
  C = sum(L if len(L)>0 else [1])
  N.setNode(v,'C',C)
>>> for v in N.topologicalOrder(): CNT(N,v)
>>> for v in N.nodes(): print(v,N.getNode(v,'C'))
A 1
B 1
C 2
D 3
E 5
F 6
>>> 
notes/net/exe/wave.txt · Last modified: 2017/08/14 23:18 by vlado
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki