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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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