コード例 #1
0
def main():

    #initialize random inputs:
    generate_test_set(n1, 1000)

    # this will plot route_length vs. N &
    # timing vs. N for each algorithm listed
    # (using the default range+seed declared up in the global variable)
    #batch_compare_algos(algo_combo1,algo_combo2)

    # this will plot the resultant route from each algorithm for
    # a given city set size (using the default seed)
    #compare_algos(15,[algo_combo1,algo_combo1])

    #cities1 = return_set(5)

    cities1 = parse_input("in/example-input-1.txt")
    route = algo_greedy(cities1)
    print is_valid(cities1, route)

    route = [0, 0, 1, 2, 3]
    print is_valid(cities1, route)

    #format_output(cities1, route, "out.txt")
    #run_verifier("in/example-input-1.txt","out.txt")

    #print route_length(cities1, route)
    #tsp_grapher.plot_route(cities1,route)
    '''
コード例 #2
0
ファイル: main.py プロジェクト: 1n5aN1aC/cs325
def main():

	#initialize random inputs:
	generate_test_set(n1,1000)

	# this will plot route_length vs. N & 
	# timing vs. N for each algorithm listed
	# (using the default range+seed declared up in the global variable)
	#batch_compare_algos(algo_combo1,algo_combo2)

	# this will plot the resultant route from each algorithm for
	# a given city set size (using the default seed)
	#compare_algos(15,[algo_combo1,algo_combo1])

	#cities1 = return_set(5)

	cities1 = parse_input("in/example-input-1.txt")
	route = algo_greedy(cities1)
	print is_valid(cities1,route)

	route = [0,0,1,2,3]
	print is_valid(cities1,route)

	#format_output(cities1, route, "out.txt")
	#run_verifier("in/example-input-1.txt","out.txt")

	#print route_length(cities1, route)
	#tsp_grapher.plot_route(cities1,route)

	'''
コード例 #3
0
ファイル: main.py プロジェクト: 1n5aN1aC/cs325
def algo_combo1(cities):
	route = algo_greedy(cities)
	for i in xrange(2,len(cities)):
		route = algo_improve_rev(cities,route,i)
	for i in xrange(len(cities),2,-1):
		route = algo_improve_rev(cities,route,i)
	for i in xrange(2,len(cities)):
		route = algo_improve_rev(cities,route,i)
	return route
コード例 #4
0
def algo_combo1(cities):
    route = algo_greedy(cities)
    for i in xrange(2, len(cities)):
        route = algo_improve_rev(cities, route, i)
    for i in xrange(len(cities), 2, -1):
        route = algo_improve_rev(cities, route, i)
    for i in xrange(2, len(cities)):
        route = algo_improve_rev(cities, route, i)
    return route
コード例 #5
0
def algo_greedy_segmented(cities):

    #how many divisions should we use??
    #the success of this algorithm is largely dependent on these values,
    #but i have no clue how to pick the proper
    #number of divions for an input
    grid_div_x = 30
    grid_div_y = 30

    villages = [[[] for i in xrange(grid_div_y)] for i in xrange(grid_div_x)]
    village_routes = []
    village_centers = []

    x_min = min(cities, key=itemgetter(0))[0]
    y_min = min(cities, key=itemgetter(1))[1]
    x_max = max(cities, key=itemgetter(0))[0]
    y_max = max(cities, key=itemgetter(1))[1]

    for x in xrange(0, len(cities)):

        for i in xrange(grid_div_x):
            for j in xrange(grid_div_y):

                if cities[x][0] >= (float(i) /
                                    grid_div_x) * x_max and cities[x][0] <= (
                                        (float(i) + 1) / grid_div_x) * x_max:
                    if cities[x][1] >= (float(
                            j) / grid_div_y) * y_max and cities[x][1] <= (
                                (float(j) + 1) / grid_div_y) * y_max:
                        villages[i][j].append(cities[x])

    #unwrap nested array
    villages = list(itertools.chain(*villages))

    for v in villages:

        #get approximate center of village
        if (len(v) > 0):
            x_center = 0.0
            y_center = 0.0
            for i in v:
                x_center += i[0]
                y_center += i[1]
            x_center = x_center / len(v)
            y_center = y_center / len(v)
            village_centers.append((x_center, y_center))

            # run greedy on village
            temp = algo_greedy(v)

            # convert village index back to city index
            village_route = []
            for idx in xrange(len(temp)):
                village_route.append(cities.index(v[temp[idx]]))
            village_routes.append(village_route)
    '''

    # this is waaaay too slow

    # recombine subroutes into every possible complete route
    all_permutations = list(itertools.permutations(village_routes))
    all_p = []
    for p in all_permutations:
        all_p.append( list(itertools.chain.from_iterable(p)) )

    # compare all these possible complete routes
    shortest_route_dist =  sys.maxint
    best_route = []
    for p in all_p:
        test_length = route_length(cities,p)
        if (test_length < shortest_route_dist):
            shortest_route_dist = test_length
            best_route = p

    return best_route
    '''

    shortest_route_dist = sys.maxint

    ret = []

    #print village_routes

    # we need to recombine these sub routes in a smarter way(by avg location perhaps?)
    #ret = list(itertools.chain(*village_routes))

    # run greedy on village centers
    temp = algo_greedy(village_centers)

    for i in temp:
        tmp = village_routes[i]
        ret.append(tmp)

    ret2 = list(itertools.chain(*ret))
    default_distance = route_length(cities, ret2)

    for idx1 in xrange(len(temp)):
        for i in range(0, len(ret[idx1])):
            for j in range(2):
                revert = ret[idx1]
                ret[idx1] = ret[idx1][i:] + ret[idx1][:i]
                if (j == 1): ret[idx1].reverse()
                ret3 = list(itertools.chain(*ret))
                new_distance = route_length(cities, ret3)
                if new_distance > default_distance:
                    ret[idx1] = revert

    ret4 = list(itertools.chain(*ret))

    return ret4
コード例 #6
0
ファイル: main.py プロジェクト: 1n5aN1aC/cs325
def algo_combo2(cities):
	route = algo_greedy(cities)
	for i in xrange(2,4):
		route = algo_improve_rev(cities,route,i)
		route = algo_improve_swap(cities,route)
	return route
コード例 #7
0
def algo_combo2(cities):
    route = algo_greedy(cities)
    for i in xrange(2, 4):
        route = algo_improve_rev(cities, route, i)
        route = algo_improve_swap(cities, route)
    return route
コード例 #8
0
def algo_greedy_segmented(cities):

    #how many divisions should we use??
    #the success of this algorithm is largely dependent on these values,
    #but i have no clue how to pick the proper 
    #number of divions for an input
    grid_div_x = 30
    grid_div_y = 30

    villages = [[[] for i in xrange(grid_div_y)] for i in xrange(grid_div_x)]
    village_routes = []
    village_centers = []

    x_min = min(cities,key=itemgetter(0))[0]
    y_min = min(cities,key=itemgetter(1))[1]
    x_max = max(cities,key=itemgetter(0))[0]
    y_max = max(cities,key=itemgetter(1))[1]

    for x in xrange(0, len(cities)):

        for i in xrange(grid_div_x):
            for j in xrange(grid_div_y):

                if cities[x][0] >= (float(i)/grid_div_x)*x_max and cities[x][0] <= ((float(i)+1)/grid_div_x)*x_max:
                    if cities[x][1] >= (float(j)/grid_div_y)*y_max and cities[x][1] <= ((float(j)+1)/grid_div_y)*y_max:
                        villages[i][j].append(cities[x])

    #unwrap nested array
    villages = list(itertools.chain(*villages))

    for v in villages:
        
        #get approximate center of village
        if (len(v) > 0):
            x_center = 0.0
            y_center = 0.0
            for i in v:
                x_center += i[0]
                y_center += i[1]
            x_center = x_center/len(v)
            y_center = y_center/len(v)
            village_centers.append( (x_center,y_center) )

            # run greedy on village
            temp = algo_greedy(v)

            # convert village index back to city index
            village_route = []
            for idx in xrange(len(temp)):
                village_route.append( cities.index( v[temp[idx]] ))
            village_routes.append(village_route)

    '''

    # this is waaaay too slow

    # recombine subroutes into every possible complete route
    all_permutations = list(itertools.permutations(village_routes))
    all_p = []
    for p in all_permutations:
        all_p.append( list(itertools.chain.from_iterable(p)) )

    # compare all these possible complete routes
    shortest_route_dist =  sys.maxint
    best_route = []
    for p in all_p:
        test_length = route_length(cities,p)
        if (test_length < shortest_route_dist):
            shortest_route_dist = test_length
            best_route = p

    return best_route
    '''

    shortest_route_dist =  sys.maxint

    ret = []

    #print village_routes

    # we need to recombine these sub routes in a smarter way(by avg location perhaps?)
    #ret = list(itertools.chain(*village_routes))

    # run greedy on village centers
    temp = algo_greedy(village_centers)

    for i in temp:
        tmp = village_routes[i]
        ret.append(tmp)

    ret2 = list(itertools.chain(*ret))
    default_distance = route_length(cities,ret2)

    for idx1 in xrange(len(temp)):
        for i in range(0,len(ret[idx1])):
            for j in range(2):
                revert = ret[idx1]
                ret[idx1] = ret[idx1][i:] + ret[idx1][:i]
                if (j == 1): ret[idx1].reverse()
                ret3 = list(itertools.chain(*ret))
                new_distance = route_length(cities,ret3)
                if new_distance > default_distance:
                    ret[idx1] = revert
    
    ret4 = list(itertools.chain(*ret))

    return ret4