def project_outer_trips(G, matrix, assign_config): max_inner = assign_config['max_inner'] importance_conditions = assign_config['outer_importance_conditions'] inner_hash = {} for i in range(max_inner): inner_hash[i + 1] = 1 end_nodes = {} for condit in importance_conditions: for i in range(condit[0], condit[1]): the_target = {} for j in range(max_inner): if matrix[i - 1, j] > 0 or matrix[j, i - 1] > 0: the_target[j + 1] = 1 if not the_target: continue dist, paths = single_source_dijkstra( G, i, assign_config['outer_impedance'], target=the_target) for j in the_target: for k in range(len(paths[j])): if G[paths[j][k]][paths[j][k + 1]][ assign_config['boundary_condition']]: break node = paths[j][k] newdist, newpaths, centroid = single_source_dijkstra( G, node, assign_config['outer_impedance'], target=inner_hash, allow_centroids=True, target_type=1) #print string.join([str(i),str(centroid),str(j),str(matrix[i-1,j-1]),str(matrix[j-1,i-1])],'\t') matrix[centroid - 1, j - 1] = matrix[centroid - 1, j - 1] + matrix[i - 1, j - 1] matrix[j - 1, centroid - 1] = matrix[j - 1, centroid - 1] + matrix[j - 1, i - 1] matrix = matrix[:max_inner, :max_inner] return matrix
def project_outer_trips(G,matrix,assign_config): max_inner=assign_config['max_inner'] importance_conditions=assign_config['outer_importance_conditions'] inner_hash={} for i in range(max_inner): inner_hash[i+1]=1 end_nodes={} for condit in importance_conditions: for i in range(condit[0],condit[1]): the_target={} for j in range(max_inner): if matrix[i-1,j]>0 or matrix[j,i-1]>0: the_target[j+1]=1 if not the_target: continue dist,paths=single_source_dijkstra(G,i,assign_config['outer_impedance'],target=the_target) for j in the_target: for k in range(len(paths[j])): if G[paths[j][k]][paths[j][k+1]][assign_config['boundary_condition']]: break node=paths[j][k] newdist,newpaths,centroid=single_source_dijkstra(G,node,assign_config['outer_impedance'],target=inner_hash,allow_centroids=True,target_type=1) #print string.join([str(i),str(centroid),str(j),str(matrix[i-1,j-1]),str(matrix[j-1,i-1])],'\t') matrix[centroid-1,j-1]=matrix[centroid-1,j-1]+matrix[i-1,j-1] matrix[j-1,centroid-1]=matrix[j-1,centroid-1]+matrix[j-1,i-1] matrix=matrix[:max_inner,:max_inner] return matrix
def ds_generate_single_source(G,source,target,choice_set_config,link_randomizer,ext_bound): config=choice_set_config num_draws=config['ds_num_draws'] this_target=target this_link_randomizer=link_randomizer bounding_box=ext_bound varcoef={} master_sets={} for node in target: master_sets[node]=[] for i in range(num_draws): #sample random coefficients from bounding box for key in ext_bound: if config['log_prior']: varcoef[key]=exp(random.uniform(log(bounding_box[key][0]),log(bounding_box[key][1]))) else: varcoef[key]=random.uniform(bounding_box[key][0],bounding_box[key][1]) to_iter=1 if config['randomize_after']: to_iter=config['randomize_after_iters'] for i in range(to_iter): #perform generalized cost shortest path search paths = single_source_dijkstra(G,source,varcoef,target=this_target,weights=config['weights'],link_randomizer=this_link_randomizer)[1] for node in target: if node in paths: master_sets[node].append(paths[node]) else: print 'WARNING: no path found from',str(source),'to',str(node) for node in target: master_sets[node]=filter_master(G,None,master_sets[node],choice_set_config) return master_sets
def inverted_assignment_search_worker(work_queue,done_queue,network,master_config,ext_bound,st_dict,seed_selections): if not master_config.choice_set_config['randomize_after'] : print time.asctime(time.localtime()), "-", current_process().name, "- initializing link randomizer..." link_randomizer=master_config.choice_set_config.get_link_randomizer(network,master_config) rand_net=network.copy() rand_net.orig_network=None bounding_box=ext_bound varcoef={} for i in iter(work_queue.get,'STOP'): if master_config.choice_set_config['inverted_nested'] and not master_config.choice_set_config['randomize_after']: #randomize link values for e in rand_net.edges_iter(): for key in master_config.choice_set_config['variables']: rand_net[e[0]][e[1]][key]=link_randomizer.generate_value(network,e[0],e[1],key) #loop over number of parameter randomizations for j in range(master_config.choice_set_config['inverted_N_param']): print time.asctime(time.localtime()), "-", current_process().name, "- Attr #", i, ', Param #', j if not master_config.choice_set_config['inverted_nested'] and not master_config.choice_set_config['randomize_after']: #randomize link values for e in rand_net.edges_iter(): for key in master_config.choice_set_config['variables']: rand_net[e[0]][e[1]][key]=link_randomizer.generate_value(network,e[0],e[1],key) #sample generalized cost coefficients for key in bounding_box: if master_config.choice_set_config['log_prior']: varcoef[key]=exp(random.uniform(log(bounding_box[key][0]),log(bounding_box[key][1]))) else: varcoef[key]=random.uniform(bounding_box[key][0],bounding_box[key][1]) print varcoef #calculate generalized costs for e in rand_net.edges_iter(): rand_net[e[0]][e[1]]['gencost']=0 for key in varcoef: wgt=1 if key in master_config.choice_set_config['weights']: wgt=network[e[0]][e[1]][master_config.choice_set_config['weights'][key]] rand_net[e[0]][e[1]]['gencost']=rand_net[e[0]][e[1]]['gencost']+varcoef[key]*rand_net[e[0]][e[1]][key]*wgt use_cost='gencost' to_iter=1 if master_config.choice_set_config['randomize_after']: use_cost='usecost' to_iter=master_config.choice_set_config['randomize_after_iters'] while to_iter: to_iter=to_iter-1 result_paths={} if master_config.choice_set_config['randomize_after']: for e in rand_net.edges_iter(): rand_net[e[0]][e[1]]['usecost']=rand_net[e[0]][e[1]]['gencost']*random.uniform(1-master_config.choice_set_config['randomize_after_dev'],1+master_config.choice_set_config['randomize_after_dev']) for source in st_dict: if seed_selections[source][i*master_config.choice_set_config['inverted_N_param']+j]: the_target=st_dict[source] if source in the_target: del the_target[source] every_path=single_source_dijkstra(rand_net,source,use_cost,target=the_target)[1] target_paths={} for t in the_target: if t in every_path: target_paths[t]=every_path[t] fname=os.path.join(master_config.assign_config['pickle_path'],str(source)+'_'+str(i)+'-'+str(j)+'_'+str(to_iter)) f=open(fname,'wb') cPickle.dump(target_paths,f,1) f.close() done_queue.put('STOP') return True
def inverted_assignment_search_worker(work_queue, done_queue, network, master_config, ext_bound, st_dict, seed_selections): if not master_config.choice_set_config['randomize_after']: print time.asctime(time.localtime()), "-", current_process( ).name, "- initializing link randomizer..." link_randomizer = master_config.choice_set_config.get_link_randomizer( network, master_config) rand_net = network.copy() rand_net.orig_network = None bounding_box = ext_bound varcoef = {} for i in iter(work_queue.get, 'STOP'): if master_config.choice_set_config[ 'inverted_nested'] and not master_config.choice_set_config[ 'randomize_after']: #randomize link values for e in rand_net.edges_iter(): for key in master_config.choice_set_config['variables']: rand_net[e[0]][e[1]][key] = link_randomizer.generate_value( network, e[0], e[1], key) #loop over number of parameter randomizations for j in range(master_config.choice_set_config['inverted_N_param']): print time.asctime(time.localtime()), "-", current_process( ).name, "- Attr #", i, ', Param #', j if not master_config.choice_set_config[ 'inverted_nested'] and not master_config.choice_set_config[ 'randomize_after']: #randomize link values for e in rand_net.edges_iter(): for key in master_config.choice_set_config['variables']: rand_net[e[0]][ e[1]][key] = link_randomizer.generate_value( network, e[0], e[1], key) #sample generalized cost coefficients for key in bounding_box: if master_config.choice_set_config['log_prior']: varcoef[key] = exp( random.uniform(log(bounding_box[key][0]), log(bounding_box[key][1]))) else: varcoef[key] = random.uniform(bounding_box[key][0], bounding_box[key][1]) print varcoef #calculate generalized costs for e in rand_net.edges_iter(): rand_net[e[0]][e[1]]['gencost'] = 0 for key in varcoef: wgt = 1 if key in master_config.choice_set_config['weights']: wgt = network[e[0]][e[1]][ master_config.choice_set_config['weights'][key]] rand_net[e[0]][e[1]]['gencost'] = rand_net[e[0]][ e[1]]['gencost'] + varcoef[key] * rand_net[e[0]][ e[1]][key] * wgt use_cost = 'gencost' to_iter = 1 if master_config.choice_set_config['randomize_after']: use_cost = 'usecost' to_iter = master_config.choice_set_config[ 'randomize_after_iters'] while to_iter: to_iter = to_iter - 1 result_paths = {} if master_config.choice_set_config['randomize_after']: for e in rand_net.edges_iter(): rand_net[e[0]][e[1]]['usecost'] = rand_net[e[0]][ e[1]]['gencost'] * random.uniform( 1 - master_config. choice_set_config['randomize_after_dev'], 1 + master_config. choice_set_config['randomize_after_dev']) for source in st_dict: if seed_selections[source][ i * master_config.choice_set_config['inverted_N_param'] + j]: the_target = st_dict[source] if source in the_target: del the_target[source] every_path = single_source_dijkstra( rand_net, source, use_cost, target=the_target)[1] target_paths = {} for t in the_target: if t in every_path: target_paths[t] = every_path[t] fname = os.path.join( master_config.assign_config['pickle_path'], str(source) + '_' + str(i) + '-' + str(j) + '_' + str(to_iter)) f = open(fname, 'wb') cPickle.dump(target_paths, f, 1) f.close() done_queue.put('STOP') return True