File size: 3,672 Bytes
300be5a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import os
import sys
from pathlib import Path

# Add the project root directory to the Python path
sys.path.append(str(Path(__file__).resolve().parent.parent.parent))

def create_data_directory():
    """
    Ensure data directories exist for all generated files.
    
    This function creates the necessary directory structure to store
    delivery data, vehicle data, and travel time matrices.
    
    Returns:
    --------
    tuple of (str, str, str)
        Paths to time matrix directory, vehicle data directory, and delivery data directory    
    """
    vehicle_data_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'data', 'vehicle-data')
    os.makedirs(vehicle_data_dir, exist_ok=True)

    delivery_data_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'data', 'delivery-data')
    os.makedirs(delivery_data_dir, exist_ok=True)

    time_matrix_data_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'data', 'time-matrix')
    os.makedirs(time_matrix_data_dir, exist_ok=True)
    return time_matrix_data_dir, vehicle_data_dir, delivery_data_dir

def main():
    """
    Run all data generation scripts for the delivery route optimization project.
    
    This function orchestrates the creation of all synthetic datasets needed for
    the route optimization problem, including delivery data, vehicle data, and
    travel time/distance matrices.
    
    Generated Files:
    --------------
    1. Delivery Data:
       - Contains information about delivery locations, time windows, packages, etc.
       - Used to define the delivery stops in the routing problem.
       
    2. Vehicle Data:
       - Contains information about the delivery fleet, capacity, depots, etc.
       - Used to define the available resources for delivery routes.
       
    3. Travel Matrices:
       - Contains distance and time information between all locations.
       - Used by the optimization algorithm to calculate route costs.
       
    Usage:
    ------
    These generated datasets form the foundation of the delivery route optimization
    application. Together they define:
    - Where deliveries need to be made (delivery data)
    - What resources are available for deliveries (vehicle data)
    - How long it takes to travel between locations (travel matrices)
    
    The route optimization algorithm uses these inputs to determine the most
    efficient assignment of deliveries to vehicles and the optimal sequence of
    stops for each vehicle.    
    """
    print("Starting data generation process...")
    
    time_matrix_data_dir, vehicle_data_dir, delivery_data_dir = create_data_directory()
    print(f"Time Matrix Data will be saved to: {time_matrix_data_dir}")
    print(f"Delivery Data will be saved to: {delivery_data_dir}")
    print(f"Vehicle Data will be saved to: {vehicle_data_dir}")

    # Import and run delivery data generation
    print("\n1. Generating delivery data...")
    from src.utils.generate_delivery_data import generate_delivery_data
    delivery_data = generate_delivery_data(50, use_geocoding=True)
    
    # Import and run vehicle data generation
    print("\n2. Generating vehicle data...")
    from src.utils.generate_vehicle_data import generate_vehicle_data
    vehicle_data = generate_vehicle_data(10)
    
    # Import and run travel matrix generation
    print("\n3. Generating travel matrices...")
    from src.utils.generate_travel_matrix import generate_travel_matrix
    generate_travel_matrix()
    
    print("\nAll data generation complete! Files saved to data directory.")

if __name__ == "__main__":
    main()