def test_calculate_cost_calculator_with_one_cars():
    solution = Solution(vehicle_routes=np.array([[2, 1, 0], [0, 0, 0]]))
    node_distances = NodeDistances(
        distances=np.array([[0, 1, 2], [3, 0, 5], [6, 7, 0]]))

    calculator = SolutionRestrictionsCalculator(node_distances=node_distances,
                                                vehicle_allowed_distances=None)
    cost = calculator.calculate_cost(solution=solution)

    assert 12 == cost, "All only one route should sum 12"
def test_get_vehicle_consumed_distance():
    solution = Solution(vehicle_routes=np.array([[2, 1, 3, 0], [0, 0, 0, 0]]))
    node_distances = NodeDistances(distances=np.array(
        [[0, 7, 3, 1], [2, 0, 4, 6], [3, 6, 0, 9], [5, 10, 15, 0]]))

    calculator = SolutionRestrictionsCalculator(node_distances=node_distances,
                                                vehicle_allowed_distances=None)
    cost = calculator.get_vehicle_consumed_distance(solution=solution,
                                                    vehicle=0)

    assert 20 == cost, "All only one route should sum 20"
예제 #3
0
def test_update_cost_solution_when_2_routes_change():
    solution1=Solution(vehicle_routes=np.array([[2, 0 , 0, 0],[1,3, 0,0],[0,0,0,0]]))
    solution2=Solution(vehicle_routes=np.array([[2, 0 , 0,0],[1, 0, 0,0],[3,0,0,0]]))
    node_distances=NodeDistances(distances=np.array([[0, 1, 2,20],[3, 0, 5,21],[6, 7, 0,22],[9,1,1,0]]))
    vehicle_allowed_distances=VehicleAllowedDistances(distances=[14, 20, 15])
    calculator=SolutionRestrictionsCalculator(node_distances=node_distances,vehicle_allowed_distances=vehicle_allowed_distances)


    cost=Neighborhood(solution_restrictions_calculator=calculator). \
        _update_solution_cost(old_solution=solution1,new_solution=solution2,vehicles_involved=[1,2])
    

    assert cost==41 , "Update cost should be 41"
def test_remaining_distance_for_vehicle_returns_negative():
    solution = Solution(vehicle_routes=np.array([[2, 1, 0], [0, 0, 0]]))
    node_distances = NodeDistances(
        distances=np.array([[0, 1, 2], [3, 0, 5], [6, 7, 0]]))
    vehicle_allowed_distances = VehicleAllowedDistances(distances=[10, 7, 0])

    calculator = SolutionRestrictionsCalculator(
        node_distances=node_distances,
        vehicle_allowed_distances=vehicle_allowed_distances)
    remaining_distance = calculator.get_vehicle_remaining_distance(
        solution=solution, vehicle=0)

    assert -2 == remaining_distance, "-2 should be the remaining distance"
예제 #5
0
def test_init_one2one_all_customes_are_visited(init_random_seed):
    init_random_seed
    node_distances=NodeDistances(distances=np.array([[0, 1, 1, 1],[1, 0, 1,1],[1, 1, 0,1],[1,1,1,0]]))
    vehicle_distances=VehicleAllowedDistances(distances=np.array([2, 2,2]))

    initializer=SolutionInitializer(node_distances=node_distances,vehicle_allowed_distances=vehicle_distances)
    solution=initializer.init_one_node_to_one_vehicle()
    
    vehicle_routes=solution.vehicle_routes
    num_node1=np.where(vehicle_routes==1)[0]
    num_node2=np.where(vehicle_routes==2)[0]
    num_node3=np.where(vehicle_routes==3)[0]

    assert len(num_node1)==1, "Node 1 should be only once"
    assert len(num_node2)==1, "Node 2 should be only once"
    assert len(num_node3)==1, "Node 3 should be only once"
예제 #6
0
파일: execution.py 프로젝트: vikical/VRP
    def execute_single_instance_once(self,path_to_node_distances:str, path_to_max_vehicle_distances:str, metaheuristic:str)->():
        """
        Execute a single instance of a problem, just only once.
        The result is a tuple containing:
        (solution, elapsed_time)
        """
        node_distances=NodeDistances(distances=Reader.read_distances_between_nodes_in_file(path_to_file=path_to_node_distances))
        vehicle_allowed_distances=VehicleAllowedDistances(distances=Reader.read_vehicle_allowed_distances_in_file(path_to_file=path_to_max_vehicle_distances))

        solution_restrictions_calculator=SolutionRestrictionsCalculator(node_distances=node_distances, vehicle_allowed_distances=vehicle_allowed_distances)
        metaheu_obj=MetaheuristicFactory.create_metaheuristic(metaheuristic=metaheuristic, solution_restrictions_calculator=solution_restrictions_calculator, \
            init=self.init, search_type=self.search_type, number_iterations=self.number_iterations, memory_size=self.memory_size, max_running_secs=self.max_running_secs)
        
        tic=time.time()
        solution=metaheu_obj.run()
        tac=time.time()
        elapsed_time=tac-tic
        return (solution,elapsed_time)