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')
예제 #2
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 iminpq():
    iminpq = pq.newIndexMinPQ(greater)
    iminpq = pq.insert(iminpq, 'A', 23)
    iminpq = pq.insert(iminpq, 'B', 7)
    iminpq = pq.insert(iminpq, 'C', 30)
    iminpq = pq.insert(iminpq, 'D', 5)
    iminpq = pq.insert(iminpq, 'E', 15)
    return iminpq
def addService(analyzer, service):
    company = service['company']
    taxi_id = service['taxi_id']
    service_id = service['trip_id']
    if service['trip_total'] is not '':
        money = float(service['trip_total'])
    else:
        money = 0
    if service['trip_miles'] is not '':
        distance = float(service['trip_miles'])
    else:
        distance = 0
    date = getDate(service['trip_start_timestamp'])
    if company == '':
        company = 'Independent Owner'
    if not ipq.contains(analyzer['TaxiPQ']['PQ'], company):
        taxilist = lt.newList(datastructure='ARRAY_LIST', cmpfunction=compareCompanies2)
        if not lt.isPresent(taxilist, taxi_id):
            lt.addLast(taxilist, taxi_id)
        m.put(analyzer['TaxiPQ']['Map'], company, taxilist)
        ipq.insert(analyzer['TaxiPQ']['PQ'], company, 1)
    else:
        taxilist = me.getValue(m.get(analyzer['TaxiPQ']['Map'], company))
        if not lt.isPresent(taxilist, company):
            if not lt.isPresent(taxilist, taxi_id):
                lt.addLast(taxilist, taxi_id)
            ipq.increaseKey(analyzer['TaxiPQ']['PQ'], company, lt.size(taxilist))
    
    if not ipq.contains(analyzer['ServicePQ']['PQ'], company):
        servicelist = lt.newList(datastructure='ARRAY_LIST', cmpfunction=compareCompanies2)
        lt.addLast(servicelist, service_id)
        m.put(analyzer['ServicePQ']['Map'], company, servicelist)
        ipq.insert(analyzer['ServicePQ']['PQ'], company, 1)
    else:
        servicelist = me.getValue(m.get(analyzer['ServicePQ']['Map'], company))
        if not lt.isPresent(servicelist, company):
            lt.addLast(servicelist, service_id)
            ipq.increaseKey(analyzer['ServicePQ']['PQ'], company, lt.size(servicelist))


    if not m.contains(analyzer["TaxiNum"],company):
        m.put(analyzer["TaxiNum"],company,{"Taxi":0})
    else:
        valor=me.getValue(m.get(analyzer["TaxiNum"],company)) 
        valor["Taxi"]+=1
    if money > 0 and distance > 0:
        uptadePointsTree(analyzer, date, taxi_id, money, distance)
    addServiceToGraph(analyzer, service)
    return analyzer
예제 #5
0
def initSearch(graph, source):
    """
    Inicializa la estructura de busqueda y deja
    todos los arcos en infinito.
    Se inserta en la cola indexada el vertice source
    Args:
        graph: El grafo a examinar
        source: El vertice fuente
    Returns:
        Estructura de busqueda inicializada
    Raises:
        Exception
    """
    try:
        search = {
            'source': source,
            'visited': None,
            'iminpq': None
        }

        search['visited'] = map.newMap(numelements=g.numVertices(graph),
                                       maptype='PROBING',
                                       comparefunction=graph['comparefunction']
                                       )
        vertices = g.vertices(graph)
        itvertices = it.newIterator(vertices)
        while (it.hasNext(itvertices)):
            vert = it.next(itvertices)
            map.put(search['visited'],
                    vert,
                    {'marked': False, 'edgeTo': None, 'distTo': math.inf}
                    )
        map.put(search['visited'],
                source,
                {'marked': True, 'edgeTo': None, 'distTo': 0}
                )
        pq = iminpq.newIndexMinPQ(
            cmpfunction=graph['comparefunction']
        )
        search['iminpq'] = pq
        iminpq.insert(search['iminpq'], source, 0)
        return search
    except Exception as exp:
        error.reraise(exp, 'dks:init')
예제 #6
0
def prim(graph, search, v):
    """
    Args:
        search: La estructura de busqueda
        v: Vertice desde donde se relajan los pesos
    Returns:
        El grafo con los arcos relajados
    Raises:
        Exception
    """
    try:
        map.put(search['distTo'], v, 0.0)
        pq.insert(search['pq'], v, 0.0)
        while (not pq.isEmpty(search['pq'])):
            min = pq.delMin(search['pq'])
            scan(graph, search, min)
        return search
    except Exception as exp:
        error.reraise(exp, 'prim:prim')
def addStation(bikes, stationid):
    if not gr.containsVertex(bikes["grafo"], stationid):
        gr.insertVertex(bikes["grafo"], stationid)
        iminpq.insert(bikes["topsalida"], stationid, 1)
        iminpq.insert(bikes["topllegada"], stationid, 1)
        iminpq.insert(bikes["topuso"], stationid, 1)
    return bikes