示例#1
0
def req4(catalog):
    grf=catalog['connections']
    prim=pm.PrimMST(grf)
    weight=pm.weightMST(grf,prim)
    print('La distancia total de la red de expansion minima es de '+str(round(weight,2))+' km.')
    edges = pm.edgesMST(grf,prim)
    print('El tamano de la red de expansion minima es de '+str(edges['mst']['size'])+' landing points.')
示例#2
0
def minSpanTree(graph):
    search = prim.PrimMST(graph)
    vertices = gr.vertices(graph)
    mst = gr.newGraph(datastructure='ADJ_LIST',
                      directed=False,
                      size=14000,
                      comparefunction=compareStopIds)

    for vert in lt.iterator(vertices):
        gr.insertVertex(mst, vert)

    keys = m.keySet(search['edgeTo'])
    totalWeight = 0

    for key in lt.iterator(keys):
        edge = m.get(search['edgeTo'], key)
        gr.addEdge(mst, edge['value']['vertexA'], edge['value']['vertexB'],
                   edge['value']['weight'])
        totalWeight += edge['value']['weight']

    longest = longestPath(mst)
    sizeMst = (gr.numVertices(mst))
    results = (sizeMst, totalWeight, longest)

    return results
示例#3
0
def requerimiento4(catalog):
    pri = prim.PrimMST(catalog['connections'])
    peso = prim.weightMST(catalog['connections'], pri)
    mst = prim.edgesMST(catalog['connections'], pri)['mst']
    m = folium.Map(location=[4.6, -74.083333], tiles="Stamen Terrain")
    for st in lt.iterator(mst):
        cv = st['vertexA'].split("-", 1)
        ce = st['vertexB'].split("-", 1)
        infov = mp.get(catalog['points'], cv[0])['value']
        infoe = mp.get(catalog['points'], ce[0])['value']
        addPointConneMst(catalog, st['vertexA'], st['vertexB'], st['weight'])
        folium.PolyLine(locations=[(float(infov['latitude']), float(infov['longitude'])), (float(infoe['latitude']), float(infoe['longitude']))], tooltip=str(cv[1])).add_to(m)
        folium.Marker([float(infov['latitude']),  float(infov['longitude'])], popup=str(infov['name'])).add_to(m)
        folium.Marker([float(infoe['latitude']),  float(infoe['longitude'])], popup=str(infoe['name'])).add_to(m)
    m.save('mapa_req4.html')
    gramst = catalog['mst']
    vert = gr.vertices(gramst)
    num = lt.size(vert)
    primero = lt.firstElement(vert)
    mayor = 0
    camino = None
    dijta = djk.Dijkstra(catalog['mst'], primero)
    for v in lt.iterator(vert):
        ruta = djk.pathTo(dijta, v)
        x = lt.size(ruta)
        if x > mayor:
            mayor = x
            camino = ruta
    return num, peso, camino
示例#4
0
def MST(analyzer):
    #req 4
    analyzer['MST'] = prim.PrimMST(analyzer['connections'])
    peso = prim.weightMST(analyzer['connections'], analyzer['MST'])
    arcos = analyzer['MST']['mst']
    mincon = ['', '', -1]
    maxcon = ['', '', -1]
    x = 0
    for arco in lt.iterator(arcos):
        distance = arco['weight']
        landing_id1 = arco['vertexA'].split('~')[0]
        landing_name1 = m.get(analyzer['landing_points_info'],
                              landing_id1)['value']['name']
        landing_id2 = arco['vertexB'].split('~')[0]
        landing_name2 = m.get(analyzer['landing_points_info'],
                              landing_id2)['value']['name']
        if landing_name1 != landing_name2:
            if mincon[2] == -1 or distance < mincon[2]:
                mincon[2] = distance
                mincon[0] = landing_name1
                mincon[1] = landing_name2
            if maxcon[2] == -1 or distance > maxcon[2]:
                maxcon[2] = distance
                maxcon[0] = landing_name1
                maxcon[1] = landing_name2
    numvertices = gr.numVertices(analyzer['connections'])
    ans = numvertices, peso, mincon, maxcon
    return ans
示例#5
0
def getMinimumSpaningTree(analyzer):
    mst = prim.PrimMST(analyzer['connections'])
    distance = 0
    numberOfElements = lt.size(mp.valueSet(mst['marked']))
    for element in lt.iterator(mp.valueSet(mst['distTo'])):
        distance = distance + float(element)
    print ('La cantidad de elementos es: ' + str(numberOfElements) + ' la distancia total es ' + str(distance))
    return mst
示例#6
0
def minimumSpanningTrees(analyzer):
    """
    Retorna el árbol de expansión mínima
    del grafo
    """
    graph = analyzer['connections']
    analyzer['minimumspanningtrees'] = pm.PrimMST(graph)
    return analyzer
示例#7
0
def test_prim2(graph2):
    search = prim.PrimMST(graph2)
    weight = prim.weightMST(graph2, search)
    print('\n')
    path = search['mst']
    while not q.isEmpty(path):
        edge = q.dequeue(path)
        print(edge['vertexA'] + "-->" + edge['vertexB'] + " costo: " +
              str(edge['weight']))
    print(str(weight))
 def req_4(self):
     root = self.mas_grande[2]
     search = prim.PrimMST(self.connections_map)
     scan = prim.scan(self.connections_map, search, root)
     graph, total_dist = self.graph_mst_prim(scan)
     vertex, dist = self.prim_max_dist_vertex(graph)
     path = self.prim_path_to_root(vertex, root, scan['edgeTo'])
     graphing_helper(self).graph_path(path)
     path = self.path_str(path)
     return self.mas_grande[1], path, round(dist, 2), round(total_dist, 2)
示例#9
0
def expansionMin(macrostructure):
    mst = prm.PrimMST(macrostructure['connections'])
    camino = prm.edgesMST(macrostructure['connections'], mst)
    numero = mp.size(camino['edgeTo'])
    peso_total = 0
    keys = mp.keySet(camino['distTo'])
    for index in range(1, int(lt.size(keys)) + 1):
        data = lt.getElement(keys, index)
        peso = mp.get(camino['distTo'], data)['value']
        peso_total += int(peso)

    return numero, peso_total
示例#10
0
def findGraphMST(catalog):
    """Usa Prim para crear el MST"""
    mst_structure = prim.PrimMST(catalog['internet_graph'])
    mst_structure = prim.edgesMST(catalog['internet_graph'], mst_structure)
    mst = mst_structure['mst']
    edgesTo = mst_structure['edgeTo']
    mst_weight = prim.weightMST(catalog['internet_graph'], mst_structure)

    nodes = lt.size(mst)
    mst_graph = createMSTgraph(catalog, mst)
    path = getMSTroots(catalog, mst_graph)

    return nodes, mst_weight, path
示例#11
0
def arbolExpansionMinima(analyzer):
    """
    Encuentra el árbol de expansión mínima.

    Parámetros:
        analyzer: el catálogo donde está guardado todo.

    Return:
        el árbol de expansión mínima. Este se guarda en el catálogo
        asociado a la llave 'mst'.
    """
    analyzer['mst'] = prim.PrimMST(analyzer['connections'])
    return analyzer['mst']
示例#12
0
def criticalInfrastructure(analyzer):
    vertex = gr.numVertices(analyzer["connections"])
    tree = pr.PrimMST(analyzer["connections"])
    weight = pr.weightMST(analyzer["connections"], tree)
    branch = pr.edgesMST(analyzer["connections"], tree)
    branch = branch["edgeTo"]["table"]["elements"]
    max = 0

    for i in range(len(branch)):
        value = branch[i]["value"]
        if (value != None) and (float(value["weight"]) > max):
            max = value["weight"]

    return vertex, weight, max
示例#13
0
def criticalstructure(analyzer):
    analyzer["prim"] = pr.PrimMST(analyzer["cables"])
    vlist = gr.vertices(analyzer["cables"])
    randomvertex = lt.getElement(vlist, randint(0, lt.size(vlist)))
    mst = pr.prim(analyzer["cables"], analyzer["prim"], randomvertex)
    weight = pr.weightMST(analyzer["cables"], analyzer["prim"])
    nlps = 0
    totvertex = mp.keySet(mst["marked"])
    for i in lt.iterator(totvertex):
        a = mp.get(mst["marked"], i)
        value = me.getValue(a)
        if value == True:
            nlps += 1
    return (nlps, weight)
示例#14
0
def InfCrit(analyzer):
    inf = pr.PrimMST(analyzer['cables'])
    LPs = gr.vertices(analyzer['cables'])
    tree = lt.newList('ARRAY_LIST', cmpfunction=LPids)
    total = 0
    try:
        for vertex in lt.iterator(LPs):
            distance = bell.distTo(inf, vertex)
            if distance != 0: #El algoritmo prim pone 0, asumimos que los que se mantienen en 0 son porque no pertenecen al MST
                lt.addLast(tree, (vertex, distance))
                total += distance
        treeO = sortMaster(tree, cmpDeg)

        return lt.size(tree), total, lt.firstElement(treeO), lt.lastElement(treeO)

    except Exception as exp:
        error.reraise(exp, 'model:InfCrit')
示例#15
0
def minimumSpanningTree(ana):
    countries = ana['countries']
    countryKeys = m.keySet(countries)
    points = ana['points']
    search = prim.PrimMST(ana['connections'])
    relaxed = prim.prim(ana['connections'], search, 'Bogota')
    prim.edgesMST(ana['connections'], search)
    mst = relaxed['mst']
    size = lt.size(mst)
    weight = round(prim.weightMST(ana['connections'], relaxed), 2)
    M = folium.Map()
    for i in range(0, lt.size(mst)):
        camino = lt.getElement(mst, i)
        punto = camino['vertexB']
        code = punto.split('*')[0]
        try:
            int(code)
            lPoint = me.getValue(m.get(points, code))
            pointLat = lPoint['latitude']
            pointLon = lPoint['longitude']
            pointLoc = pointLat, pointLon
            name = str(i) + '. ' + lPoint['name']
            folium.Marker(pointLoc, name,
                          icon=folium.Icon(color='blue')).add_to(M)
        except:
            capital = code
            n = 0
            found = False
            while n < lt.size(countryKeys) and found == False:
                key = lt.getElement(countryKeys, n + 1)
                info = me.getValue(m.get(countries, key))
                Capital = info['CapitalName']
                if capital == Capital:
                    found = True
                    country = info['CountryName']
                    capLat = info['CapitalLatitude']
                    capLon = info['CapitalLongitude']
                    capLoc = capLat, capLon
                    capName = str(i) + '. ' + country + ', ' + capital
                    folium.Marker(capLoc,
                                  capName,
                                  icon=folium.Icon(color='pink')).add_to(M)
                n += 1
    M.save('MST.html')
    return weight, size
示例#16
0
def req4(analyzer):
    vertex= gr.numVertices(analyzer['connections'])
    arbol= pr.PrimMST(analyzer['connections'])
    weight= pr.weightMST(analyzer['connections'],arbol)
    branch= pr.edgesMST(analyzer['connections'],arbol)
    branch= branch['edgeTo']['table']['elements']
    maximo=0

    for a in range(len(branch)):
        valor= branch[a]['value']
        if (valor != None) and (float(value['weight'])> max):
            maximo = value['weight']
    
    print("Numero de nodos conectados a la red de expansión mínima: "+ str(vertex))
    print("Costo total de la red de expansión mínima: "+ str(weight))
    print("Rama más larga que hace parte de la red de expansión mínima: "+str(maximo))

    return vertex,weight,maximo
示例#17
0
def minExpansion(catalog):
    # numelements debería ser la mitad???
    # Se crea un mapa {"#componente": {v1: None, v2:None, ...}, ...}
    mapa_componentes = mp.newMap(numelements=113,
                                 maptype="PROBING",
                                 loadfactor=0.4)

    for vertice in lt.iterator(mp.keySet(catalog["components"]["idscc"])):
        numero_componente = mp.get(catalog["components"]["idscc"],
                                   vertice)["value"]
        addComponente(mapa_componentes, numero_componente, vertice)

    mayor = None
    conteo_mayor = 0
    for componente in lt.iterator(mp.keySet(mapa_componentes)):
        mapa_vertices = mp.get(mapa_componentes, componente)["value"]
        numero_vertices = mp.size(mapa_vertices)
        #print(componente, numero_vertices)
        if numero_vertices > conteo_mayor:
            #if numero_vertices == 10:
            mayor = componente
            conteo_mayor = numero_vertices
    #mayor = 106, conteo_mayor=1983
    #print(type(mayor))

    lista_vertices_mayor = mp.keySet(mp.get(mapa_componentes, mayor)["value"])
    #verts_mayor = mp.keySet(mp.get(mapa_componentes, 82)["value"])
    tamaño = lt.size(lista_vertices_mayor)
    tamaño, subgrafo = crearSubGrafo(catalog, lista_vertices_mayor, tamaño)

    search = prim.PrimMST(subgrafo)
    #print(search)

    peso = prim.weightMST(subgrafo, search)
    #print("peso",peso)

    mayor = buscarMayor(search)
    #print("mayor",mayor)

    menor = buscarMenor(search)
    #print("menor",menor)

    return tamaño, peso, mayor, menor
示例#18
0
def Requirement4(analyzer):

    tracemalloc.start()

    delta_time = -1.0
    delta_memory = -1.0

    start_time = getTime()
    start_memory = getMemory()

    mst = prim.PrimMST(analyzer['connections_origin_destination'])
    size = lt.size(mp.keySet(mst['edgeTo']))
    distance = prim.weightMST(analyzer['connections_origin_destination'], mst)

    stop_memory = getMemory()
    stop_time = getTime()
    tracemalloc.stop()

    delta_time = stop_time - start_time
    delta_memory = deltaMemory(start_memory, stop_memory)

    return (size, distance, delta_time, delta_memory)
def Requerimiento4(analyzer):

    total = 0
    grafo = analyzer['connections']
    mst = pr.PrimMST(grafo)
    map_distTo = mst['distTo']
    values = mp.valueSet(map_distTo)

    for i in range(lt.size(values)):
        value = lt.getElement(values, i)
        total += value

    total = round(total, 2)

    nodos = lt.size(values)

    print(
        'El minimo numero de nodos conectados a la red de expasion minima es: '
        + str(nodos))
    print(
        'El costo total (en kilometros) de la red de expansion minima es de: '
        + str(total) + ' km')
示例#20
0
def MST(analyzer):
    analyzer['MST'] = prim.PrimMST(analyzer['connections_distancia'])
    suma = 0
    contador = 0
    for i in lt.iterator(m.valueSet(analyzer['MST']['distTo'])):
        suma += i
        contador += 1
    analyzer['Dij'] = djk.Dijkstra(
        analyzer['connections_distancia'],
        lt.getElement(gr.vertices(analyzer['connections_distancia']), 5))
    maximo = None
    distancia = 0
    for vertice in lt.iterator(gr.vertices(analyzer['connections_distancia'])):
        camino = djk.pathTo(analyzer['Dij'], vertice)
        if camino != None:
            if st.size(camino) > distancia and distancia != math.inf:
                maximo = camino
                distancia = st.size(camino)
    camino_final = lt.newList()
    for conexion in lt.iterator(camino):
        try:
            int(conexion['vertexA'][0])
            verticea = conexion['vertexA'][0]
            pareja1 = m.get(analyzer['landing_points'], verticea)
            nombrea = me.getValue(pareja1)['name'].split(',')[0]
        except:
            nombrea = conexion['vertexA'][0]

        try:
            int(conexion['vertexB'][0])
            verticeb = conexion['vertexB'][0]
            pareja2 = m.get(analyzer['landing_points'], verticeb)
            nombreb = me.getValue(pareja2)['name'].split(',')[0]
        except:
            nombreb = conexion['vertexB'][0]

        conexion = (nombrea, nombreb, conexion['weight'])
        lt.addLast(camino_final, conexion)
    return (contador, suma, camino_final)
示例#21
0
def req4(analyzer):
    estructura = pr.PrimMST(analyzer["connections_distance"])
    costo_total = pr.weightMST(analyzer["connections_distance"], estructura)

    grafo_mst = gr.newGraph(datastructure='ADJ_LIST',
                            directed=True,
                            size=5000,
                            comparefunction=None)
    i = 1
    while i <= lt.size(estructura["mst"]):
        arista = lt.getElement(estructura["mst"], i)
        verticeA = arista["vertexA"]
        verticeB = arista["vertexB"]
        weight = arista["weight"]

        if not gr.containsVertex(grafo_mst, verticeA):
            gr.insertVertex(grafo_mst, verticeA)

        if not gr.containsVertex(grafo_mst, verticeB):
            gr.insertVertex(grafo_mst, verticeB)

        gr.addEdge(grafo_mst, verticeA, verticeB, weight)
        gr.addEdge(grafo_mst, verticeB, verticeA, weight)

        i += 1

    num_vertices = gr.numVertices(grafo_mst)

    vertices_mst = gr.vertices(grafo_mst)

    inicio = lt.firstElement(estructura["mst"])["vertexA"]

    final = lt.lastElement(estructura["mst"])["vertexB"]

    estructura_dfs = dfs.DepthFirstSearch(grafo_mst, inicio)
    caminoo = dfs.pathTo(estructura_dfs, final)

    return num_vertices, costo_total, caminoo
示例#22
0
def infraestructura_critica(analyzer):
    arbol = p.PrimMST(analyzer["Arcos"])
    vertices = gr.numVertices(analyzer["Arcos"])
    Peso = p.weightMST(analyzer["Arcos"], arbol)
    rama = p.edgesMST(analyzer["Arcos"], arbol)
    rama = rama["edgeTo"]["table"]["elements"]

    maximo = 0
    for i in range(len(rama)):
        valor = rama[i]["value"]
        if (valor is not None) and (float(valor["weight"]) > maximo):
            maximo = valor["weight"]
            vertice1 = valor["vertexA"]
            vertice2 = valor["vertexB"]

    cables = mp.valueSet(analyzer["cables_origen"])
    iterador = it.newIterator(cables)
    while it.hasNext(iterador):
        elemento = it.next(iterador)
        if elemento["origin"] == vertice1 and vertice2 == elemento[
                "destination"]:
            cable = elemento["cable_name"]

    return vertices, Peso, cable, maximo
示例#23
0
def getCriticalInfrastructure(catalog):
    mst = prim.PrimMST(catalog['connections'])
    print(gr.numVertices(mst))
    pass
示例#24
0
def infraestructura_critica(analyzer):
    mst=prim.PrimMST(analyzer['connections'])
    cantidad_nodos=(mst['marked']['size'])
    peso=prim.weightMST(analyzer['connections'],mst)
    
    return cantidad_nodos,peso
示例#25
0
def findMST(graph):
    mst = prim.PrimMST(graph)
    return mst
示例#26
0
def req4(analyzer):
    search=prim.PrimMST(analyzer['connections_normal'])
    distance=prim.weightMST(analyzer['connections_normal'],search)
    mst=search['mst']
    numberofnodes=qu.size(mst)
    return(distance,numberofnodes)
示例#27
0
def mstPRIM(analyzer):
    '''
    Recibe un grafo como parámetro y retorna
    '''
    analyzer['mst'] = prim.PrimMST(analyzer['landingPoints'])
示例#28
0
def redminima(catalogo):
    redmin = pr.PrimMST(catalogo["conexiones"])
    peso = pr.weightMST(catalogo["conexiones"], redmin)
    verts = redmin["mst"]["size"]
    return verts, peso
示例#29
0
def Requerimiento4(analyzer):
    mst = prim.PrimMST(analyzer['connections'])
    numNodos = mp.size(mst['marked'])
    pesoMst = prim.weightMST(analyzer['connections'], mst)
    return numNodos, round(pesoMst, 2)
示例#30
0
def prim_search(catalog):
     catalog["prim"] = prim.PrimMST(catalog)

     return catalog["prim"]