Advertisement
avogatro

CPM Buffer Timer calculation

Oct 4th, 2014
403
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.03 KB | None | 0 0
  1. #!/usr/bin/env python
  2. __author__ = "Jiezheng Zhang"
  3. __copyright__ = "Copyright 2014, Jiezheng Zhang"
  4. __credits__ = ["Jiezheng (Sebastian) Zhang", "Altan Karakul", "Yusuf Azal","Wassilij Mikheyev"]
  5. __license__ = "GPL"
  6. __version__ = "1.0.0"
  7. __email__ = "jiezheng.zhang@gmail.com" 
  8.            
  9. import math,sys
  10.  
  11. D ={0:{1:8,5:16},
  12. 1:{2:8,3:16,4:16},
  13. 2:{8:20},
  14. 3:{8:12},
  15. 4:{7:16},
  16. 5:{6:36},
  17. 6:{7:0,8:0},
  18. 7:{9:12},
  19. 8:{9:12},
  20. 9:{10:8},
  21. 10:{11:8},
  22. 11:{12:2},
  23. 12:{}
  24. }
  25.  
  26. T = sys.maxint
  27. Debug = True
  28. #####################################
  29. #Schritt 1 Init
  30. M = [0]
  31. FZ = [0 for x in xrange(len(D))]
  32. DeltaPlus = [0 for x in xrange(len(D))]
  33. DeltaMinus = [0 for x in xrange(len(D))]
  34. for i in D:
  35.     DeltaPlus[i]=len(D[i].keys())
  36. DeltaPlus[0]=0
  37.  
  38.    
  39. for k in D.keys():
  40.     for i in D[k]:
  41.         DeltaMinus [i] +=1  
  42. if Debug:
  43.     print "DeltaMinus", DeltaMinus
  44.     print "DeltaPlus", DeltaPlus
  45.  
  46. #invertiere D zu Vorgaenger Dictionary P
  47. #P[j][i] == Z[i][j]
  48. P={0:{}}
  49. for i in D:
  50.     for j in D[i]:
  51.         if not P.has_key(j):
  52.             P[j] = {}
  53.         P[j][i] = D[i][j]
  54.        
  55. #Schritt 2 (Vorwaertsrechnung):
  56. while M:
  57.     k = M.pop()
  58.     #print k
  59.     zyklen = True
  60.     for i in D[k].keys():
  61.         DeltaMinus[i]-=1
  62.         if DeltaMinus[i] == 0:
  63.                 M.append(i)
  64.                 zyklen = False
  65.         if FZ[k]+D[k][i]> FZ[i]:
  66.                 FZ[i] = FZ[k]+D[k][i]
  67.     #print FZ                
  68.     if zyklen == True:
  69.         print "Zyklen! k:{}\t D[k]:{}\t DeltaMinus[k]:{}".format( k,D[k],DeltaMinus[k])
  70.         #sys.exit()
  71.  
  72. for fzn in FZ:
  73.     if T< fzn:
  74.         print "Projektendtermin kann nicht gehalten werden."
  75.         sys.exit()
  76.  
  77. print "FZ", FZ
  78. #Schritt 3 (Rueckwaertsrechnung):
  79. M=[len(D)-1]
  80. SZ = [ FZ[-1] for x in xrange(len(D))]
  81.  
  82. while M:
  83.     k = M.pop()
  84.     #print k
  85.     zyklen = True
  86.     for i in D.keys():
  87.         if k in D[i]:
  88.             DeltaPlus[i]-=1
  89.             if DeltaPlus[i] == 0:
  90.                     M.append(i)
  91.                    
  92.             if SZ[k]-D[i][k]< SZ[i]:
  93.                     SZ[i] = SZ[k]-D[i][k]
  94.     #print SZ                
  95.         #sys.exit()
  96. print "SZ", SZ
  97.  
  98. ####################################################
  99. #Puffer
  100.  
  101. #Init
  102. FAZ = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
  103. FEZ = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
  104. SAZ = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
  105. SEZ = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
  106. GP  = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
  107. FP  = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
  108. FRP = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
  109. UP  = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
  110.  
  111. #calc
  112. for i in D.keys():
  113.     for j in D[i].keys():
  114.         FAZ[i][j] = FZ[i]
  115.         FEZ[i][j] = FZ[i]+D[i][j]
  116.         SAZ[i][j] = SZ[j]-D[i][j]
  117.         SEZ[i][j] = SZ[j]
  118.         GP[i][j] = SAZ[i][j] -  FAZ[i][j]
  119.         FP[i][j] = FZ[j]  -  FEZ[i][j]    
  120.         FRP[i][j] = SAZ[i][j] -  SZ[i]
  121.         UP[i][j] =max(0,FZ[j]-SZ[i]-D[i][j])
  122.  
  123. #Output
  124. print ("FZ:")
  125. for i in FZ:
  126.     print i
  127. print ("SZ:")
  128. for i in SZ:
  129.     print i
  130. print ("Pfad\tD\tFAZ\tFEZ\tSAZ\tSEZ\tGP\tFP\tFRP\tUP")
  131.  
  132. for i in D.keys():
  133.     for j in D[i].keys():
  134.         print "<{},{}>\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}".format(i,j,D[i][j],
  135.                                                                 max(0,FAZ[i][j]),
  136.                                                                 max(0,FEZ[i][j]),
  137.                                                                 max(0,SAZ[i][j]),
  138.                                                                 max(0,SEZ[i][j]),
  139.                                                                 max(0,GP[i][j]),
  140.                                                                 max(0,FP[i][j]),
  141.                                                                 max(0,FRP[i][j]),
  142.                                                                 max(0,UP[i][j])
  143.                                                                 )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement