Esempio n. 1
0
def scan(graph, search, vertex):
    """
    Args:
        search: La estructura de busqueda
        vertex: El vertice destino
    Returns:
        El costo total para llegar de source a
        vertex. Infinito si no existe camino
    Raises:
        Exception
    """
    try:
        map.put(search['marked'], vertex, True)
        edges = g.adjacentEdges(graph, vertex)
        for edge in lt.iterator(edges):
            w = e.other(edge, vertex)
            if (not map.get(search['marked'], w)['value']):
                if (e.weight(edge) < map.get(search['distTo'], w)['value']):
                    map.put(search['distTo'], w, e.weight(edge))
                    map.put(search['edgeTo'], w, edge)
                    if (pq.contains(search['pq'], w)):
                        pq.decreaseKey(search['pq'], w,
                                       map.get(search['distTo'], w)['value'])
                    else:
                        pq.insert(search['pq'], w,
                                  map.get(search['distTo'], w)['value'])
        return search
    except Exception as exp:
        error.reraise(exp, 'bellman:disto')
def relax(search, edge):
    """
    Relaja el peso de los arcos del grafo con la
    nueva de un nuevo arco
    Args:
        search: La estructura de busqueda
        edge: El nuevo arco
    Returns:
        El grafo con los arcos relajados
    Raises:
        Exception
    """
    try:
        v = e.either(edge)
        w = e.other(edge, v)
        visited_v = map.get(search['visited'], v)['value']
        visited_w = map.get(search['visited'], w)['value']
        distw = visited_w['distTo']
        distv = visited_v['distTo'] + e.weight(edge)[0]
        if (visited_w is None) or (distw > distv):
            distow = visited_v['distTo'] + e.weight(edge)[0]
            map.put(search['visited'], w, {
                'marked': True,
                'edgeTo': edge,
                'distTo': distow
            })
            if iminpq.contains(search['iminpq'], w):
                iminpq.decreaseKey(search['iminpq'], w, distow)
            else:
                iminpq.insert(search['iminpq'], w, distow)
        return search
    except Exception as exp:
        error.reraise(exp, 'dks:relax')
def test_insert(iminpq):
    iminpq = pq.decreaseKey(iminpq, 'A', 1)
    key = pq.min(iminpq)
    assert key == 'A'
    iminpq = pq.increaseKey(iminpq, 'A', 12)
    key = pq.min(iminpq)
    assert key == 'D'
def addConnection(bikes, origin, destination, duration):
    edge = gr.getEdge(bikes["grafo"], origin, destination)
    if edge is None:
        gr.addEdge(bikes["grafo"], origin, destination, duration)
    else:
        initial = edge["weight"]
        edge["weight"] = ((int(initial) + int(duration)) / 2)
    llegada = gr.indegree(bikes["grafo"], destination)
    salida = gr.outdegree(bikes["grafo"], origin)
    llegadad = gr.indegree(bikes["grafo"], destination)
    salidad = salida = gr.outdegree(bikes["grafo"], origin)
    oruse = salida + llegadad
    desuse = llegada + salidad
    llegadainv = 1 / llegada
    salidainv = 1 / salida
    iminpq.increaseKey(bikes["topuso"], destination, desuse)
    iminpq.increaseKey(bikes["topuso"], origin, oruse)
    iminpq.decreaseKey(bikes["topllegada"], destination, llegadainv)
    iminpq.decreaseKey(bikes["topsalida"], origin, salidainv)
    return bikes