def main():
    nodes_array = TSP_utilities.create_nodes_array(4)
    tsp_matrix = TSP_utilities.get_tsp_matrix(nodes_array)
    starting_node = 0

    print("Brute Force solution")
    start_time = time.time()
    bf_start_time = start_time
    brute_force_solution = TSP_utilities.solve_tsp_brute_force_from_given_node(
        nodes_array, starting_node)
    end_time = time.time()
    calculation_time = end_time - start_time
    print("Calculation time:", calculation_time)
    TSP_utilities.plot_solution('brute_force_' + str(start_time), nodes_array,
                                brute_force_solution)

    print("QAOA solution - Forest")
    start_time = time.time()
    forest_solver = ForestTSPSolver(tsp_matrix, starting_node=starting_node)
    forest_solution, forest_distribution = forest_solver.solve_tsp()
    end_time = time.time()
    calculation_time = end_time - start_time
    print("Calculation time:", calculation_time)
    costs = [(sol, TSP_utilities.calculate_cost(tsp_matrix,
                                                sol), forest_distribution[sol])
             for sol in forest_distribution]
    print("Forest:")
    for cost in costs:
        print(cost)
    TSP_utilities.plot_solution('forest_' + str(bf_start_time), nodes_array,
                                forest_solution)
 def calculate_solution(self):
     """
     Samples the QVM for the results of the algorithm 
     and returns a list containing the order of nodes.
     """
     most_frequent_string, sampling_results = self.qaoa_inst.get_string(self.betas, self.gammas, samples=10000)
     reduced_solution = TSP_utilities.binary_state_to_points_order(most_frequent_string)
     full_solution = self.get_solution_for_full_array(reduced_solution)
     self.solution = full_solution
     
     all_solutions = sampling_results.keys()
     distribution = {}
     for sol in all_solutions:
         reduced_sol = TSP_utilities.binary_state_to_points_order(sol)
         full_sol = self.get_solution_for_full_array(reduced_sol)
         distribution[tuple(full_sol)] = sampling_results[sol]
     self.distribution = distribution
    def decode_solution(self, response):
        n = len(self.distance_matrix)
        distribution = {}
        min_energy = response.record[0].energy

        for record in response.record:
            sample = record[0]
            solution_binary = [node for node in sample] 
            solution = TSP_utilities.binary_state_to_points_order(solution_binary)
            distribution[tuple(solution)] = (record.energy, record.num_occurrences)
            if record.energy <= min_energy:
                self.solution = solution
        self.distribution = distribution
Beispiel #4
0
def solveTSPinstance(instance):
    nodes_array = TSP_utilities.readInstance(instance)
    tsp_matrix = TSP_utilities.get_tsp_matrix(nodes_array)
    sapi_token = None
    dwave_url = 'https://cloud.dwavesys.com/sapi'

    start_time = time.time()
    bf_start_time = start_time
    #    print("Brute Force solution")
    #    brute_force_solution = TSP_utilities.solve_tsp_brute_force_from_given_node(nodes_array, starting_node)
    #    end_time = time.time()
    #    calculation_time = end_time - start_time
    #    print("Calculation time:", calculation_time)
    #    TSP_utilities.plot_solution('brute_force_' + str(start_time), nodes_array, brute_force_solution)

    if sapi_token is None or dwave_url is None:
        print(
            "You cannot run code on DWave without specifying your sapi_token and url"
        )
    elif len(nodes_array) >= 40:
        print("This problem size is to big to run on D-Wave.")
    else:
        print("DWave solution")
        start_time = time.time()
        dwave_solver = DWaveTSPSolver(tsp_matrix,
                                      sapi_token=sapi_token,
                                      url=dwave_url)
        dwave_solution, dwave_distribution = dwave_solver.solve_tsp()
        end_time = time.time()
        calculation_time = end_time - start_time
        print("Calculation time:", calculation_time)
        costs = [(sol, TSP_utilities.calculate_cost(tsp_matrix, sol),
                  dwave_distribution[sol]) for sol in dwave_distribution]
        solution_cost = TSP_utilities.calculate_cost(tsp_matrix,
                                                     dwave_solution)
        print("DWave:", dwave_solution, solution_cost)
        for cost in costs:
            print(cost)
        TSP_utilities.plot_solution('dwave_' + str(bf_start_time), nodes_array,
                                    dwave_solution)
Beispiel #5
0
def main():
    # seed = 5406
    # nodes_array = TSP_utilities.create_nodes_array(4, seed=seed)
    nodes_array = TSP_utilities.create_nodes_array(3)

    print("Brute Force solution")
    start_time = time.time()
    brute_force_solution = TSP_utilities.solve_tsp_brute_force(nodes_array)
    end_time = time.time()
    calculation_time = end_time - start_time
    print("Calculation time:", calculation_time)
    TSP_utilities.plot_solution('brute_force', nodes_array,
                                brute_force_solution)

    print("QAOA solution - Forest")
    start_time = time.time()
    forest_solver = ForestTSPSolver(nodes_array)
    forest_solution = forest_solver.solve_tsp()
    end_time = time.time()
    calculation_time = end_time - start_time
    print("Calculation time:", calculation_time)
    TSP_utilities.plot_solution('forest_' + str(start_time), nodes_array,
                                forest_solution)
Beispiel #6
0
def main():
    nodes_array = TSP_utilities.create_nodes_array(4)
    tsp_matrix = TSP_utilities.get_tsp_matrix(nodes_array)
    starting_node = 0
    sapi_token = None
    dwave_url = 'https://cloud.dwavesys.com/sapi'

    print("Brute Force solution")
    start_time = time.time()
    bf_start_time = start_time
    brute_force_solution = TSP_utilities.solve_tsp_brute_force_from_given_node(
        nodes_array, starting_node)
    end_time = time.time()
    calculation_time = end_time - start_time
    print("Calculation time:", calculation_time)
    TSP_utilities.plot_solution('brute_force_' + str(start_time), nodes_array,
                                brute_force_solution)

    if sapi_token is None or dwave_url is None:
        print(
            "You cannot run code on DWave without specifying your sapi_token and url"
        )
    else:
        print("DWave solution")
        start_time = time.time()
        dwave_solver = DWaveTSPSolver(tsp_matrix,
                                      sapi_token=sapi_token,
                                      url=dwave_url)
        dwave_solution, dwave_distribution = dwave_solver.solve_tsp()
        end_time = time.time()
        calculation_time = end_time - start_time
        print("Calculation time:", calculation_time)
        costs = [(sol, TSP_utilities.calculate_cost(tsp_matrix, sol),
                  dwave_distribution[sol]) for sol in dwave_distribution]
        print("DWave:")
        for cost in costs:
            print(cost)
        TSP_utilities.plot_solution('dwave_' + str(bf_start_time), nodes_array,
                                    dwave_solution)

    print("QAOA solution - Forest")
    start_time = time.time()
    forest_solver = ForestTSPSolver(tsp_matrix, starting_node=starting_node)
    forest_solution, forest_distribution = forest_solver.solve_tsp()
    end_time = time.time()
    calculation_time = end_time - start_time
    print("Calculation time:", calculation_time)
    costs = [(sol, TSP_utilities.calculate_cost(tsp_matrix,
                                                sol), forest_distribution[sol])
             for sol in forest_distribution]
    print("Forest:")
    for cost in costs:
        print(cost)
    TSP_utilities.plot_solution('forest_' + str(bf_start_time), nodes_array,
                                forest_solution)