Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- __author__ = "Jiezheng Zhang"
- __copyright__ = "Copyright 2014, Jiezheng Zhang"
- __credits__ = ["Jiezheng (Sebastian) Zhang", "Altan Karakul", "Yusuf Azal","Wassilij Mikheyev"]
- __license__ = "GPL"
- __version__ = "1.0.0"
- __email__ = "jiezheng.zhang@gmail.com"
- import math,sys
- D ={0:{1:8,5:16},
- 1:{2:8,3:16,4:16},
- 2:{8:20},
- 3:{8:12},
- 4:{7:16},
- 5:{6:36},
- 6:{7:0,8:0},
- 7:{9:12},
- 8:{9:12},
- 9:{10:8},
- 10:{11:8},
- 11:{12:2},
- 12:{}
- }
- T = sys.maxint
- Debug = True
- #####################################
- #Schritt 1 Init
- M = [0]
- FZ = [0 for x in xrange(len(D))]
- DeltaPlus = [0 for x in xrange(len(D))]
- DeltaMinus = [0 for x in xrange(len(D))]
- for i in D:
- DeltaPlus[i]=len(D[i].keys())
- DeltaPlus[0]=0
- for k in D.keys():
- for i in D[k]:
- DeltaMinus [i] +=1
- if Debug:
- print "DeltaMinus", DeltaMinus
- print "DeltaPlus", DeltaPlus
- #invertiere D zu Vorgaenger Dictionary P
- #P[j][i] == Z[i][j]
- P={0:{}}
- for i in D:
- for j in D[i]:
- if not P.has_key(j):
- P[j] = {}
- P[j][i] = D[i][j]
- #Schritt 2 (Vorwaertsrechnung):
- while M:
- k = M.pop()
- #print k
- zyklen = True
- for i in D[k].keys():
- DeltaMinus[i]-=1
- if DeltaMinus[i] == 0:
- M.append(i)
- zyklen = False
- if FZ[k]+D[k][i]> FZ[i]:
- FZ[i] = FZ[k]+D[k][i]
- #print FZ
- if zyklen == True:
- print "Zyklen! k:{}\t D[k]:{}\t DeltaMinus[k]:{}".format( k,D[k],DeltaMinus[k])
- #sys.exit()
- for fzn in FZ:
- if T< fzn:
- print "Projektendtermin kann nicht gehalten werden."
- sys.exit()
- print "FZ", FZ
- #Schritt 3 (Rueckwaertsrechnung):
- M=[len(D)-1]
- SZ = [ FZ[-1] for x in xrange(len(D))]
- while M:
- k = M.pop()
- #print k
- zyklen = True
- for i in D.keys():
- if k in D[i]:
- DeltaPlus[i]-=1
- if DeltaPlus[i] == 0:
- M.append(i)
- if SZ[k]-D[i][k]< SZ[i]:
- SZ[i] = SZ[k]-D[i][k]
- #print SZ
- #sys.exit()
- print "SZ", SZ
- ####################################################
- #Puffer
- #Init
- FAZ = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
- FEZ = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
- SAZ = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
- SEZ = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
- GP = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
- FP = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
- FRP = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
- UP = [[0 for x in xrange(len(D))] for x in xrange(len(D))]
- #calc
- for i in D.keys():
- for j in D[i].keys():
- FAZ[i][j] = FZ[i]
- FEZ[i][j] = FZ[i]+D[i][j]
- SAZ[i][j] = SZ[j]-D[i][j]
- SEZ[i][j] = SZ[j]
- GP[i][j] = SAZ[i][j] - FAZ[i][j]
- FP[i][j] = FZ[j] - FEZ[i][j]
- FRP[i][j] = SAZ[i][j] - SZ[i]
- UP[i][j] =max(0,FZ[j]-SZ[i]-D[i][j])
- #Output
- print ("FZ:")
- for i in FZ:
- print i
- print ("SZ:")
- for i in SZ:
- print i
- print ("Pfad\tD\tFAZ\tFEZ\tSAZ\tSEZ\tGP\tFP\tFRP\tUP")
- for i in D.keys():
- for j in D[i].keys():
- print "<{},{}>\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}".format(i,j,D[i][j],
- max(0,FAZ[i][j]),
- max(0,FEZ[i][j]),
- max(0,SAZ[i][j]),
- max(0,SEZ[i][j]),
- max(0,GP[i][j]),
- max(0,FP[i][j]),
- max(0,FRP[i][j]),
- max(0,UP[i][j])
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement