===== Optimize.py ===== # -*- coding: utf8 -*- from __future__ import division, print_function import scipy, scipy.stats import numpy as np from GraphFunctions import * from MapFunctions import * def optimize(karte=None, money=9000): if karte==None: karte = load("Graph.save") #karte.inodes=karte.loadNodeList("inodes.dat") #karte.vinodes=karte.loadNodeList("vinodes.dat") karte.defineINodesRandom(100) karte.defineVINodesRandom(5) Exp=loadExpenses() arate=rateGraph(karte, False, karte.inodes, karte.vinodes) print(arate) print("BEGINN DES OPTIMIERUNGSPROZESSES") optBackbone(karte, 0.5*money) #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): explist=loadExpenses() oldmoney=-1 while money>0 and money!=oldmoney: oldmoney=money print(money) karte.clearEdges() print(rateGraph(karte, False, karte.vinodes, karte.vinodes)) iedges=karte.mostNImportantNMEdges(2000) bedges=findNBuildEdges(iedges, 600, explist) for e in bedges: money-=build(e[0], e[0].typ+1, explist) def splitGraph(karte=None, startnode=None, maxEntf=500): if karte==None: print("Loading Graph...") karte = load("Graph.save") print("Graph loaded") if startnode==None: startnode=karte.nodes[0] print("Building new Graph...") newMap=[] startnode.dist=0 nrvisited=1 tovisit=Queue.PriorityQueue(len(karte.nodes)) tovisit.put((0,startnode)) lastdist=0 while(not tovisit.empty() and lastdist=typ: return edge.entf*i[1]-back+isend(edge, typ)*100*i[1] def findNBuildEdges(elist, n=1, expenses=None): if expenses==None: expenses=loadExpenses() es = [] for i in range(0, n): es.append((Edge(None, None, None, 1, 0, -1), 0)) for e in elist: if(upgradeGoodness(e) > es[-1][1]): i = 0 while(es[i][1] > upgradeGoodness(e, expenses)): i = i + 1 shiftList(es, i) es[i] = (e, upgradeGoodness(e, expenses)) return es def rateGraph(g=None, undefined=True, inodes=None, vinodes=None): if g==None: g = ModMap.load("Graph.save") if undefined: g.defineINodesRandom(1000) g.defineVINodesRandom(50) if inodes==None: inodes=g.inodes if vinodes==None: vinodes=g.vinodes distsum=0 distprod=1 numList =[] dist=[] counter=0 for snode in vinodes: dist.append(dijkstra(g, snode, inodes)) g.clearNodes() counter+=1 print(counter) counter=0 if dist!=None: for i in dist: if i!=None: for numb in i: if numb != -1: numList.append(numb) arithmetic=np.mean(numList) geometric=scipy.stats.mstats.gmean(numList) g.saveAllNodeLists() g.saverate() return (geometric, arithmetic) if __name__ == "__main__": optimize()