Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
ss16:radwege:dateistruktur:optimize [2016/09/27 17:49] fence angelegt |
ss16:radwege:dateistruktur:optimize [2016/09/28 20:44] (aktuell) fence |
||
---|---|---|---|
Zeile 19: | Zeile 19: | ||
karte.defineVINodesRandom(5) | karte.defineVINodesRandom(5) | ||
Exp=loadExpenses() | Exp=loadExpenses() | ||
+ | arate=rateGraph(karte, False, karte.inodes, karte.vinodes) | ||
+ | print(arate) | ||
+ | print("BEGINN DES OPTIMIERUNGSPROZESSES") | ||
optBackbone(karte, 0.5*money) | optBackbone(karte, 0.5*money) | ||
#0.5 das beste??? | #0.5 das beste??? | ||
+ | |||
+ | for n in karte.vinodes: | ||
+ | optsubnet(money*0.1, karte, n, 500) | ||
+ | print("ENDE DES OPTIMIERUNGSPROZESSES") | ||
+ | arate=rateGraph(karte, False, karte.inodes, karte.vinodes) | ||
+ | print(arate) | ||
+ | |||
+ | def optsubnet(money=0, karte=None, node=None, maxEntf=500): | ||
+ | explist=loadExpenses() | ||
+ | if karte==None: | ||
+ | print("Loading Graph...") | ||
+ | karte = load("Graph.save") | ||
+ | print("Graph loaded") | ||
+ | inodeslist=splitGraph(karte, node, maxEntf) | ||
+ | inodes=chooserandom(inodeslist, 200) | ||
+ | oldmoney=-1 | ||
+ | while money>0 and money!=oldmoney: | ||
+ | oldmoney=money | ||
+ | print(money) | ||
+ | karte.clearEdges() | ||
+ | print(rateGraph(karte, False, inodes, [node])) | ||
+ | iedges=karte.mostNImportantNMEdges(2000) | ||
+ | bedges=findNBuildEdges(iedges, 600, explist) | ||
+ | for e in bedges: | ||
+ | money-=build(e[0], e[0].typ+1, explist) | ||
+ | |||
+ | def chooserandom(liste, number): | ||
+ | returnlist=[] | ||
+ | numberofnodes=len(liste) | ||
+ | for i in range(number): | ||
+ | returnlist.append(liste[random.randint(0,numberofnodes-1)]) | ||
+ | return returnlist | ||
def optBackbone(karte, money): | def optBackbone(karte, money): | ||
explist=loadExpenses() | explist=loadExpenses() | ||
- | while money>0: | + | oldmoney=-1 |
+ | while money>0 and money!=oldmoney: | ||
+ | oldmoney=money | ||
print(money) | print(money) | ||
Zeile 44: | Zeile 81: | ||
startnode=karte.nodes[0] | startnode=karte.nodes[0] | ||
print("Building new Graph...") | print("Building new Graph...") | ||
- | newMap= Graph() | + | newMap=[] |
startnode.dist=0 | startnode.dist=0 | ||
nrvisited=1 | nrvisited=1 | ||
Zeile 63: | Zeile 100: | ||
t[1].ancestor=node | t[1].ancestor=node | ||
tovisit.put((t[1].dist, t[1])) | tovisit.put((t[1].dist, t[1])) | ||
- | newMap.addNodeSafe(t[1].name, t[1].gnb, t[1].gel) | + | if not isin(t,newMap): |
- | newnode=newMap.addNodeSafe(node.name, node.gnb, node.gel) | + | newMap.append(t) |
- | + | if not isin(node,newMap): | |
- | for nedge in node.cEdges: | + | newnode=newMap.append(node) |
- | if not newMap.existEdge(nedge): | + | |
- | newMap.addEdge(newnode, newMap.findNode(nedge.getSecondNode(node).name), nedge.typ) | + | |
lastdist=node.dist | lastdist=node.dist | ||
- | printMap(newMap, "splitted.osm") | + | |
+ | #printMap(newMap, "splitted.osm") | ||
karte.clearNodes() | karte.clearNodes() | ||
+ | print("Subnet building process finished") | ||
return newMap | return newMap | ||
- | + | ||
+ | def isin(item, li): | ||
+ | for l in li: | ||
+ | if l==item: | ||
+ | return True | ||
+ | return False | ||
+ | |||
def build(edge, typ, expenses): | def build(edge, typ, expenses): | ||
oldtype=edge.typ | oldtype=edge.typ | ||
Zeile 82: | Zeile 125: | ||
if i[0]<=oldtype: | if i[0]<=oldtype: | ||
back=edge.entf*i[1] | back=edge.entf*i[1] | ||
+ | |||
+ | |||
for i in expenses: | for i in expenses: | ||
if i[0]>=typ: | if i[0]>=typ: | ||
- | return edge.entf*i[1]-back | + | return edge.entf*i[1]-back+isend(edge, typ)*100*i[1] |
def findNBuildEdges(elist, n=1, expenses=None): | def findNBuildEdges(elist, n=1, expenses=None): |