예제 #1
0
def main():
    bf_limit = 11
    sizes = range(4, 19)

    t = PrettyTable(['Cities', 'Brute Force (s)', 'Held-Karp (s)', 'BF/HK'])
    bf_elapsed_prev = 0

    for size in sizes:
        P = read_tsp_instance('test.tsp', size)
        D = create_distance_matrix(P)

        bf_elapsed = 0
        if size < bf_limit:
            start_time = time()
            brute_force(D)
            bf_elapsed = (time() - start_time)
            bf_elapsed_str = format(bf_elapsed, '.5f')
        else:
            bf_elapsed = bf_elapsed_prev * size
            bf_elapsed_str = colored('{0:,.5f}'.format(bf_elapsed), 'yellow')

        bf_elapsed_prev = bf_elapsed

        start_time = time()
        held_karp(D)
        hc_elapsed = (time() - start_time)

        t.add_row([
            size, bf_elapsed_str, '{0:,.5f}'.format(hc_elapsed),
            '{0:,.5f}'.format(bf_elapsed / hc_elapsed)
        ])

    print(t)
예제 #2
0
def main():
    global edges, edges2, edges3, edges4
    if args.distances is None:
        generate_random_graph()
    else:
        parse_distances()

    bf_load_graph(graph)
    print("Using BruteForce algorithm")
    edges = brute_force()
    edges[0] = edges[0][:-1]

    hm_load_graph(graph)
    print("Using HeuristicMax algorithm")
    edges2 = heuristic("MAX")
    edges2[0] = edges2[0][:-1]

    hm_load_graph(graph)
    print("Using HeuristicMin algorithm")
    edges3 = heuristic("MIN")
    edges3[0] = edges3[0][:-1]

    hm_load_graph(graph)
    print("Using HeuristicRandom algorithm")
    edges4 = heuristic("RANDOM")
    edges4[0] = edges4[0][:-1]

    url = "http://0.0.0.0:8000"
    webbrowser.open_new_tab(url)
    app.run(port=8000, host="0.0.0.0")
예제 #3
0
def main():
    global edges, edges2, edges3, edges4
    if args.distances is None:
        generate_random_graph()
    else:
        parse_distances()

    bf_load_graph(graph)
    print("Using BruteForce algorithm")
    edges = brute_force()
    edges[0] = edges[0][:-1]

    hm_load_graph(graph)
    print("Using HeuristicMax algorithm")
    edges2 = heuristic("MAX")
    edges2[0] = edges2[0][:-1]

    hm_load_graph(graph)
    print("Using HeuristicMin algorithm")
    edges3 = heuristic("MIN")
    edges3[0] = edges3[0][:-1]

    hm_load_graph(graph)
    print("Using HeuristicRandom algorithm")
    edges4 = heuristic("RANDOM")
    edges4[0] = edges4[0][:-1]

    url = "http://0.0.0.0:8000"
    webbrowser.open_new_tab(url)
    app.run(port=8000, host="0.0.0.0")
예제 #4
0
def run_brute_force(filename):
    boards = read_boards(filename)
    stats = []
    success = 0

    max_states = -1
    min_states = sys.maxint
    total_states = 0
    for board in boards:
        states = []
        r = brute_force(board, states)
        if r == True:
            cur_states = len(states)
            max_states = max(max_states, cur_states)
            min_states = min(min_states, cur_states)
            total_states += cur_states
            stats.append(cur_states)
            success += 1
    print "success " + str(success)
    result = {}
    result['max'] = max_states
    result['min'] = min_states
    result['total'] = total_states
    result['average'] = float(total_states) / 20
    result['median'] = numpy.median(stats)
    return result
예제 #5
0
def main():
    size = 14

    P = read_tsp_instance('test.tsp', size)
    D = create_distance_matrix(P)

    D = D[:size + 1]
    for i in range(len(D)):
        D[i] = D[i][:size + 1]

    if 1:
        hc_path = held_karp(D)
        test_path(hc_path, D, P)
    else:
        bf_path = brute_force(D)
        test_path(bf_path, D, P)
예제 #6
0
 def POST(self):
     signal = web.input().action
     if signal == 'load_easy':
         print "easy"
         board = json.dumps(get_easy_board())
         return board
     if signal == 'b_easy':
         board = get_easy_board()
         result = []
         brute_force(board, result)
         return json.dumps(result)
     if signal == 's_easy':
         board = get_easy_board()
         result = []
         simulated_annealing(board, 3, result)
         return json.dumps(result)
     if signal == 'load_medium':
         board = json.dumps(get_medium_board())
         return board
     if signal == 'b_medium':
         board = get_medium_board()
         result = []
         brute_force(board, result)
         return json.dumps(result)
     if signal == 's_medium':
         board = get_medium_board()
         result = []
         simulated_annealing(board, 3, result)
         return json.dumps(result)
     if signal == 'load_hard':
         board = json.dumps(get_hard_board())
         return board
     if signal == 'b_hard':
         board = get_hard_board()
         result = []
         brute_force(board, result)
         return json.dumps(result)
     if signal == 's_hard':
         board = get_hard_board()
         result = []
         simulated_annealing(board, 3, result)
         return json.dumps(result)
     return "..."
예제 #7
0
    # Create Routing Model
    routing = pywrapcp.RoutingModel(len(coords), 1, 0)

    # Define weight of each edge
    distance_callback = create_distance_callback(algorithm_ID, coords)
    routing.SetArcCostEvaluatorOfAllVehicles(distance_callback)
    add_distance_dimension(routing, distance_callback)

    # Setting first solution heuristic (cheapest addition).
    search_parameters = pywrapcp.RoutingModel.DefaultSearchParameters()
    search_parameters.first_solution_strategy = routing_enums_pb2.FirstSolutionStrategy.PATH_CHEAPEST_ARC

    # Solve the problem.
    assignment = routing.SolveWithParameters(search_parameters)
    if assignment:
        solution, overallDistance, points = get_solution(
            coords, routing, assignment)
        t = timeit.default_timer() - start
        print_solution_on_console(solution, overallDistance, t)
        save_to_output_file(input_file, points, overallDistance, t)


if __name__ == '__main__':
    input_file, algorithm_ID = parse_input()
    with open(str(input_file)) as f:
        locations = [tuple(map(float, i.split(','))) for i in f]
    if algorithm_ID != BRUTE_FORCE:
        find_routing(locations)
    else:
        brute_force(locations, input_file)