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 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
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')
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