Personalized Cycling Path Routing

Jiaguan Tang
AI4SM
Published in
19 min readOct 26, 2023

By Yuquan Gan, Jiaguan Tang and Tianze Wang, as part of course project of ECE1724H: Bio-inspired Algorithms for Smart Mobility. Dr. Alaa Khamis, University of Toronto, 2023.

Abstract

This project presents a refined urban cycling route optimization system for Toronto, leveraging the Ant Colony Optimization (ACO) framework. The innovation of this system is grounded in its capacity to customize routes that cater to an array of cyclist preferences such as safety, route length, and points of interest. With a foundation in intricate urban data and the principles of ACO, the initiative aspires to enhance the urban cycling experience by providing routes that are not just paths to a destination but tailored experiences that resonate with the varied aspirations of cyclists.

Navigating the urban landscape on a bicycle is an experience that goes well beyond the mere act of reaching a destination. It encompasses a variety of cyclist needs, ranging from safety and efficiency to the inclusion of specific points of interest. This project was conceived from the understanding that these diverse requirements must be acknowledged and seamlessly integrated into a sophisticated route optimization model.

The primary objectives of this endeavor were multifaceted:

1. Modeling the Urban Cycling Network:

The first goal was to create a detailed and accurate model of the urban cycling network, which would serve as the foundation for route optimization. This model needed to reflect the complexity of the urban environment, including various types of cycling paths, road conditions, traffic patterns, and urban infrastructure.

2. Application of ACO for Personalized Route Generation:

The Ant Colony Optimization algorithm was selected for its effectiveness in navigating complex routing challenges. The adaptation required for this project was significant; the algorithm needed to transcend its traditional role of identifying efficient routes to align with each cyclist’s unique set of preferences, from safety to POI chosen.

3. Evaluation in Real-World Scenarios:

A crucial aspect of the project was to test the adaptability and effectiveness of the model in real-world situations. This involved assessing how well the proposed solutions could accommodate a wide range of cyclist preferences and adapt to varying urban landscapes.

This article delves into the intricate challenges encountered during the project, the methodologies adopted to overcome these obstacles, and the results achieved. We will explore the innovative approach taken in this project, detailing the algorithmic solutions and their practical implications. The structure of the article is designed to guide the reader through the journey of this project — from conception through to its execution and evaluation — providing insights and learnings that emerged along the way.

Literature Review

The development of an optimized route planning algorithm for cyclists can draw on a wealth of existing research that intersects with various aspects of urban mobility, user experience, and algorithmic efficiency. This literature review critically examines relevant studies, focusing on their methodologies, algorithms used, and specific areas of focus.

The study described in [1] does not focus on a specific algorithm but rather on the spatial analysis of cyclists’ experiences with urban infrastructure. The primary objective is to understand how various factors of the urban environment, like bicycle facilities, impact cyclists’ experiences. This spatial relation approach offers insights into enhancing route planning by incorporating experiential factors. Chen et al. propose in [2] a personalized path decision algorithm based on user habits, employing an improved adaptive ant colony algorithm. This algorithm is validated by considering road performance personalized values. The research is centered on developing a navigation system that adapts to individual user preferences and habits, showcasing how personalized factors can be integrated into route optimization. Li et al. in [3] introduce a comfort-based route planning problem, using an extended version of Dijkstra’s algorithm. This approach incorporates developed comfort metrics to optimize routes considering both travel time and ride comfort. The focus is on enhancing ride comfort in route planning, integrating real-time data and cloud computing. This study underlines the importance of considering comfort alongside efficiency in route planning.

Each of these studies contributes uniquely to the field of route optimization and planning. From understanding cyclists’ spatial experiences to personalizing routes based on user habits and prioritizing comfort, these approaches collectively inform the development of a more holistic and user-centered route planning solution. The integration of these diverse aspects into a single algorithm, such as the one proposed in this project, aims to create a multifaceted tool that addresses the varied needs and preferences of urban cyclists.

Exploratory Spatial Data Analysis (ESDA)

Cycling Path of Toronto[5]:
The Toronto bikeways dataset offers a comprehensive glimpse into the city’s cycling infrastructure, including both shared and dedicated bikeways. This dataset categorizes bikeways as cycle tracks, bicycle lanes, routes with sharrows, multi-use trails, and signed cycling routes. Notably, it employs a dual classification system — “INFRA-HIGH” and “INFRA-LOW” — to indicate the highest and lowest types of cycling infrastructure on streets that have varied types on each side. The classification is based on the bikeway’s comfort level, with dedicated spaces being ranked higher. Segment lengths are provided in the “SHAPE_LENGTH” field, measured in centreline metres. Bikeways installed before 2001 are uniformly marked with an installation year of 2001.

Combine cycling network and points of interest

Point of Interest colored for ‘Interests’[6]

Signed Route (Red)
Wayfinding Sharrows (Green)
Sharrows (Light Blue)
Contra-flow Bike Lane (Purple)
Bike Lane (Blue)
Bike Lane — Buffered (Yellow)
Multi-Use Trail (Turquoise)
Cycle Track (Pink)

From the map, it’s evident that Toronto’s downtown area has a dense network of cycling infrastructures, particularly Cycle Tracks and Contra-flow Bike Lanes. As we move outwards to regions like North York, East York, and Scarborough, the cycling infrastructure appears less dense, primarily comprising Signed Routes and Multi-Use Trails.

Problem Formulation and Modeling

In our project, we prioritize safety, efficiency (distance), and engagement (POI) with urban environments as the core factors for evaluating cycling routes. We consider safety paramount, ensuring that our routes primarily utilize bike lanes and quieter streets to minimize the risk of accidents and enhance cyclists’ comfort. Efficiency is our second criterion, where we strive to offer the most direct and sensible paths that avoid unnecessary detours, providing a reliable and time-effective travel experience. Lastly, we factor in engagement with the urban landscape by including Points of Interest (POIs) in our route planning. This ensures that the journey is not only safe and efficient but also enriching and enjoyable, encouraging cyclists to connect with the city’s cultural and social spots. This holistic approach aligns with our mission to create a cycling experience that is not just about reaching a destination but about the journey itself, encompassing the thrill of exploration and the joy of discovery.

Graph

  • Edges (E): These represent the paths between vertices, with attributes like length, and path type (e.g., cycle track, bike lane, road type).
  • Vertices (V): Each vertex symbolizes an intersection, point of interest (POI), or a significant juncture in the cycling network.

Mathematical Formulation

The optimization of urban cycling routes is a multifaceted problem that requires balancing safety, points of interest (POIs), and route efficiency (distance). Our approach uses an Ant Colony Optimization (ACO) algorithm[4], which is tailored to incorporate these factors through a composite heuristic function. Mathematically, the probability of an ant choosing to traverse from node u to node v is determined by the following formula:

  1. Probability(u, v) is the likelihood that an ant at node ‘u’ selects edge (u, v) to move to node ‘v’ during the construction of a solution.
  2. Pheromone(u, v) represents the amount of pheromone on edge (u, v). The pheromone contains information about the quality of the path between nodes ‘u’ and ‘v.’
  3. Heuristic(u, v) is a heuristic value associated with edge (u, v). The heuristic provides additional information about the desirability of using edge (u, v) based on domain-specific knowledge.
  4. Alpha controls the influence of pheromone on the ant’s decision-making process. A higher value of alpha gives more weight to pheromone information, emphasizing exploitation.
  5. Beta controls the influence of the heuristic information. A higher value of beta gives more weight to the heuristic, emphasizing exploration.
  6. The denominator (∑) represents the sum of the probabilities for all available edges departing from node ‘u.’ It ensures that the probabilities sum to 1 and is used for normalization.

Heuristic(u, v):

The Heuristic Score Calculation within the ACO serves as a decision-making guide, balancing safety, distance to the destination, and the presence of points of interest (POIs) to determine the attractiveness of a route segment for cyclists. Each of these factors is weighted according to their significance, with the safety score taking precedence. The is_closer factor awards a higher score to route segments that lead closer to the final destination, ensuring the efficiency of the route.

Additionally, the inclusion of POIs along the route adds to the overall experience, making the journey not just about reaching a destination, but also about the ride itself. The heuristic score is a composite measure that combines these weighted factors, and it is used to influence the probability of an ant (a metaphor for a decision point in the algorithm) choosing one path over another, thereby mimicking the pheromone-laying and -following behavior observed in real ants.

Safety Score Calculation:

This function computes the safety score of a path segment based on infrastructure attributes that contribute to cycling safety. The score is normalized to lie within [0,1], with higher scores indicating safer routes for cyclists.

  • Paths marked as cycleways are deemed safest, receiving the highest score.
  • Residential streets, living streets, and paths are considered safe, receiving a high score.
  • Tertiary roads and secondary roads are less safe due to more traffic but still receive a positive score.
  • Primary roads are considered unsafe for cyclists and receive a negative score.
  • Additional elements like service roads (alleys, driveways) and restricted access also modify the score.
‘Safety Distribution of Edges’

The histogram depicts the normalized safety scores for edges within a cycling network, with the x-axis representing the score and the y-axis indicating how often each score occurs. Notable concentrations of scores are seen around 0.4, 0.6, and 0.8, suggesting common safety characteristics associated with these values, while intervals around 0.5 and 0.7 are less represented. This pattern indicates that the network’s infrastructure has varying levels of safety, with a tendency towards moderate safety ratings.

Is closer Score Calculation

d1 is the Haversine distance between the second last node of the current path and the end node.

d2 is the Haversine distance between the last node of the current path and the end node.

This score is either 0 or 1, which indicates whether moving from the current node to a neighboring node brings the ant closer to the destination, using the Haversine distance as a measure. The decision to move is made if the distance to the destination from the neighboring node is less than from the current node.

Point of Interest Score Calculation:

This function calculates a score reflecting the attractiveness of points of interest near a path segment. The score is normalized to [0,1], where a higher score corresponds to points of interest that are more desirable for cyclists.

Path Cost Calculation:

The cost calculation formula integrates these factors into a single metric, balancing safety and enjoyment against the effort of cycling a longer distance. The formula for the path cost is given by:

Safety Factor is calculated by (1- average normalized safety score + 1) for the path. So, a higher average safety score leads to a lesser cost than a lower average safety score.

Total Distance is the sum of the distances of all segments in the path.

POI Count is the total number of POIs along the path.

This formula ensures that the optimization process can find routes that are not only safe and short but also enriched with POIs, providing a balanced and enjoyable cycling experience.

Incorporating the calculated cost into the ACO process influences the pheromone update mechanism. A lower cost indicates a more desirable path, leading to a higher pheromone increment on that route, which in turn increases the likelihood of the path being selected by subsequent ants. Conversely, a higher cost due to either reduced safety, increased distance, or fewer POIs results in a smaller pheromone increment, thus guiding the ants towards more optimal routes over time.

Proposed Solution

To ensure the effectiveness and sustainability of our ACO application, we’ve concentrated our efforts around the area of Queen’s Park, a central location in Toronto. This strategic choice allows us to test the algorithm in a controlled yet varied environment, offering a mix of scenic park routes, bustling streets, and cultural landmarks. By limiting the initial testing ground to this specific area, we can closely monitor and refine our model, ensuring the generated routes are not only optimized for personal preferences but also viable and reliable in a dense urban setting.

These are the start point and end point we chose.

These are the all points of interest we generated.

Where the green dots are ‘Photo’, the red dots are ‘Hotel’, the brown dots are ‘Cafe’, and the yellow dots are ‘Store’.

def calculate_cycling_safety(data, max_value=20, min_value=-16):
score = 0
if data.get('highway') in ['cycleway']:
score += 15
elif data.get('highway') in ['residential', 'living_street', 'path']:
score += 10
elif data.get('highway') in ['tertiary', 'secondary_link', 'secondary']:
score += 5
elif data.get('highway') in ['primary']:
score -= 5
if data.get('service') in ['alley', 'driveway']:
score -= 3

if data.get('access') in ['no']:
score += 5
elif data.get('access') in ['permissive']:
score -= 2

if data.get('junction') in ['circular']:
score -= 3

if data.get('bridge') in ['yes']:
score -= 3
normalized_value = (score - min_value) / (max_value - min_value)

return normalized_value

def calculate_POI_pher(data, max_value=10, min_value=-3):
tp = data.get('poi')
score = 0
if tp == None:
score -= 3
if tp == 'Photo':
score += 10
if tp == 'Cafe':
score += 6
if tp == 'Store':
score += 5
if tp == 'Hotel':
score += 1
normalized_score = (score - min_value) / (max_value - min_value)
return normalized_score

def calculate_path_cost(G, path):
cost = 0
safe = 0
dis = 0
for i in range(len(path) -1 ):
safe += calculate_cycling_safety(G[path[i]][path[i+1]])
dis += G[path[i]][path[i+1]]['length']
safe /= len(path) - 1
safe = 1 - safe + 1
cost = safe * dis
poi_count = 0
for node in range(len(path)):
if G.nodes[path[node]]['poi']:
poi_count += 1
cost /= (100+poi_count)/100
return cost

def haversine_distance(lat1, lon1, lat2, lon2):
# Radius of the Earth in kilometers
R = 6371.0
lat1 = math.radians(lat1)
lon1 = math.radians(lon1)
lat2 = math.radians(lat2)
lon2 = math.radians(lon2)

# Haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = math.sin(dlat / 2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2)**2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))

# Calculate the distance
distance = R * c

return distance

def is_closer(G, current_node, neighbor, end_node):
node_data1 = G.nodes[current_node]
lat1, lon1 = node_data1['y'], node_data1['x']
node_data2 = G.nodes[neighbor]
lat2, lon2 = node_data2['y'], node_data2['x']
node_data3 = G.nodes[end_node]
lat3, lon3 = node_data3['y'], node_data3['x']
dis1 = haversine_distance(lat1, lon1, lat3, lon3)
dis2 = haversine_distance(lat2, lon2, lat3, lon3)
return dis1 > dis2

def get_attractiveness(G, current_node, neighbor, end_node, data, node=None, safety_weight=0.5, distance_weight=0.3, poi_weight=0.2):
safety_score = calculate_cycling_safety(data)
if is_closer(G, current_node, neighbor, end_node):
distance_score = distance_weight
else:
distance_score = 0
poi_score = calculate_POI_pher(node)
heuristic_score = (safety_weight * safety_score) + (distance_weight * distance_score) + (poi_weight * poi_score)
return heuristic_score

The code above are the help functions for ACO algorithm.

  • calculate_cycling_safety(data): Assigns a safety score to cycle routes based on factors like highway type and access. Higher scores indicate safer routes.
  • calculate_POI_pher(data): Generates scores for proximity to Points of Interest (POIs), such as cafes or hotels, with higher scores for more desirable locations.
  • calculate_path_cost(G, path): Computes the cost of a path considering safety, distance, and the number of POIs visited. Higher costs suggest less desirable paths.
  • haversine_distance(lat1, lon1, lat2, lon2): Calculates the geographical distance between two points using their latitude and longitude, aiding in distance assessments.
  • is_closer(G, current_node, neighbor, end_node): Determines if moving to a neighboring node brings the ant closer to its destination, guiding its path selection in ACO.

get_attractiveness(G, current_node, neighbor, end_node, data, node): Combines safety, distance, and POI scores to determine the heuristic score of the edge, influencing ants decision-making in ACO.

def ACO_path(G, start_node, end_node, safety_weight=0.5, distance_weight=0.3, poi_weight=0.2):
for iteration in range(NUM_ITERATIONS):
if iteration%100 == 0:
print(iteration)
all_paths = []
for ant in range(NUM_ANTS):

current_node = start_node
path = [current_node]
visited = set(path)
while current_node != end_node:

neighbors = [n for n in G.neighbors(current_node) if n not in visited and G[current_node][n]['pheromone']!=0]

if not neighbors:
print("Dead end reached")
G[path[-2]][path[-1]]['pheromone'] = 0
current_node = path[-2]
path.pop(-1)
else:
# Calculate probabilities for each neighbor
probabilities = []
for neighbor in neighbors:
pheromone_level = G[current_node][neighbor]['pheromone'] ** ALPHA
desirability = get_attractiveness(G, current_node, neighbor, end_node,
G[current_node][neighbor], G.nodes[neighbor], safety_weight=safety_weight,
distance_weight=distance_weight, poi_weight=poi_weight) ** BETA
probabilities.append(pheromone_level * desirability)

# Normalize probabilities
probabilities = [p/sum(probabilities) for p in probabilities]

# Choose next node based on probabilities
next_node = random.choices(neighbors, weights=probabilities, k=1)[0]
path.append(next_node)
visited.add(next_node)
current_node = next_node


all_paths.append((path, calculate_path_cost(G, path))) # Implement calculate_path_cost

# Evaporate pheromones
for u, v in G.edges():
G[u][v]['pheromone'] *= (1 - EVAPORATION_RATE)

# Update pheromones based on the quality of each path
for path, cost in all_paths:
for i in range(len(path) - 1):
u, v = path[i], path[i + 1]
G[u][v]['pheromone'] += 200 / cost # pheromone update rule

# Find the best path based on pheromone levels
best_path = max(all_paths, key=lambda x: sum(G[u][v]['pheromone'] for u, v in zip(x[0][:-1], x[0][1:])))
print("Best path found:", best_path)
return best_path[0], best_path[1]

In our implementation, ants iteratively explore the network graph, which represents the cycling infrastructure of Toronto, starting from a designated point and aiming for a target destination. As ants traverse the graph, they assess the desirability of each path based on safety, proximity to points of interest (POIs), and route efficiency, with respective weights assigned to each factor. These preferences are encapsulated in a heuristic function(get_attractiveness()) that influences the ant’s probabilistic decision-making at each intersection.

Ants deposit pheromones on the traversed edges, with stronger trails forming on shorter, safer, and more attractive routes, guiding subsequent ants’ decisions. To avoid stagnation and ensure exploration, pheromones evaporate over time, reducing the influence of previously popular paths. The ACO process repeats over numerous iterations, with the path cost being calculated at each step. Pheromones are updated according to the quality of the discovered paths, inversely proportional to their cost. I use 200 to divide the cost of each path because the cost is around 4000–9000. Thereby reinforcing the trails leading to optimal routes

def value_adaption(G, alpha, beta, er, ants=30, iter=30):
start_node_1 = list(G.nodes())[0]
start_node_2 = list(G.nodes())[120]
ALPHA = alpha # Pheromone importance
BETA = beta # Heuristic importance
EVAPORATION_RATE = er
NUM_ANTS = ants
NUM_ITERATIONS = 50
length_path = nx.dijkstra_path(G, source = start_node_1, target = start_node_2, weight = 'length')

dij_len = evaluate_path(G, length_path)[1]
paths = []
for i in range(iter):
if i % 5 == 0:
for u, v in G.edges():
G[u][v]['pheromone'] = 1
best_path, cost = ACO_path(G, start_node_1, start_node_2, 0.5, 0.3, 0.2)
paths.append(best_path)
eval = evaluate_path(G, best_path)
print(f"{i+1}th Result (safety, length) with {eval}, the param are alpha={alpha}, beta={beta}, evaporation rate={er}, cost={cost}")

if eval[1] >= dij_len*1.771:
er = min(er+0.01, 1.0)
if eval[0] <= 0.57:
alpha -= 0.02
beta += 0.02
min_index = 0
min_cost = 1000000
for i in range(len(paths)):
cost = calculate_path_cost(G, paths[i])
if cost < min_cost:
min_cost = cost
min_index = i

return paths[min_index]

This is the adaptive ACO function. with adaptive parameters for finding a path in a graph from a starting node to an ending node while considering safety and length. It iteratively explores the graph, adjusting key parameters such as alpha, beta, and evaporation rate based on the performance of the algorithm. The code evaluates paths for safety and length, prints results, and adapts parameters during iterations. Finally, it returns the path with the minimum cost as the solution. This adaptive ACO approach aims to balance safety and length criteria while optimizing the path.

Performance Evaluation

(0.546783625730994, 3392.4499999999994, 2) (Safety factor, Total Distance, POI counts)

This image displays the outcome of applying Dijkstra’s algorithm to determine a cycling route. The blue line represents the selected pathway, which is optimized primarily for the shortest distance. The safety factor stands at roughly 0.55, indicating a moderate consideration for the cyclist’s safety. The total distance covered by this route is approximately 3392 meters, which is suitable for cyclists looking for a direct and efficient route. This path also intersects with two points of interest (POIs), suggesting a modest engagement with the surrounding area’s attractions. The results underscore Dijkstra’s algorithm’s strength in finding the shortest path but not taking into account a degree of safety and points of interest, not as extensively as other algorithms like ACO might.

(0.6222222222222217, 4344.221, 5) (Safety factor, Total Distance, POI counts)

This image showcases the results of the ACO algorithm in designing a cyclist’s path. The blue line indicates the chosen route, which has been optimized for safety, efficiency, and interest. The route’s safety factor is approximately 0.62, suggesting that it prioritizes lower-risk streets for cyclists. With a total distance of approximately 4344 meters, it provides a manageable distance for an average cycling trip. Additionally, the route passes by five POIs, ensuring that the journey is not only safe and of reasonable length but also engaging and enjoyable for the cyclist.

(0.6316029143897992, 4315.7789999999995, 5) (Safety factor, Total Distance, POI counts)

The visualization illustrates the outcome of applying ACO adaptation to urban cycling routes. The route, highlighted in blue, reflects an optimal path that balances safety, distance, and points of interest (POIs). The safety factor of approximately 0.63 suggests a focus on relatively safer paths. The total travel distance of around 4316 meters indicates a moderate journey length. With five POIs included, the route also offers a mix of cultural and recreational stops.

Start and end points 2

Dijkstra(0.598, 2875.1, 3) ______________ACO(0.623, 3447.07, 6)__________ACO_Adaptive(0.619, 3081.28, 6)

The comparative visualization of routes generated using normal ACO, ACO adaptation, and Dijkstra’s algorithm presents a compelling argument for the sustainability of the results across different start and endpoints. Despite the variation in origin and destination, the system consistently prioritizes safety, as indicated by the safety factors, while also considering the total distance and the number of points of interest (POIs) along the way.

Start and end points 3

dijkstra(0.568, 2329.2, 4) ______________ACO(0.581, 2910.7, 4)__________ACO_Adaptive(0.633, 2391.8, 5)

The analysis of the routing results demonstrates the sustainability of the ACO-based approach, with the system consistently generating paths that maintain a balance between safety, distance, and the inclusion of POIs. Despite changes in the start and end points, the ACO algorithms — both standard and adapted — show an ability to adapt the route for safety without compromising significantly on the travel distance or the opportunity to pass by POIs.

Bar chart for three different start and end points

The analyses of the three different routing approaches — normal ACO, adaptive ACO, and Dijkstra’s algorithm — across various datasets reveal distinct patterns in safety, distance, and POI incorporation. Normal ACO consistently prioritizes safety and POI-rich routes, making it ideal for leisurely or scenic rides where experience trumps efficiency. Adaptive ACO emerges as a middle ground, balancing safety, distance, and POIs, and can be seen as a versatile option for everyday cyclists. Dijkstra’s algorithm, with its focus on the shortest path, offers the least safety and POI encounters, positioning it as the go-to for the most time-sensitive or distance-critical routes. Collectively, these results highlight the adaptability of ACO algorithms in meeting different cycling preferences and underscore the potential for their application in creating tailored urban cycling experiences.

Conclusions & Recommendations

Solution Overview:

The project successfully implemented an Ant Colony Optimization (ACO) model to create a dynamic and adaptable route planning system for urban cyclists. By integrating various data sources, including Toronto’s cycling network, road network, points of interest, and intersection nodes, the model caters to diverse cycling preferences such as safety, scenic value, and route coherence.

Challenges Encountered:

A significant challenge was harmonizing diverse data into a unified graph structure that could respond to different cycling preferences. Another challenge was balancing the adaptability of the ACO model with computational efficiency, where the adaptive version showed extended runtimes and the standard ACO demonstrated some stability issues.

Key Findings:

  • The ACO model showed a high degree of adaptability in catering to different routing preferences.
  • The number of ants and the evaporation rate significantly influenced the solution’s optimality and computational time.
  • The model performed more effectively in less dense urban areas and suburban settings.
  • Preference weighting (β value) was crucial in aligning routes with specific user preferences, though higher values often led to longer routes.

Recommendations for Future Improvement

Algorithm Optimization: Further refining the ACO algorithm to enhance computational efficiency, particularly in denser urban areas. This could involve advanced techniques such as parallel processing or machine learning-based predictive modeling.

Dynamic Routing: Incorporating real-time data, such as traffic conditions and weather forecasts, to adjust routes dynamically. This would enhance the practicality of the model for everyday cyclists.

Extensive Testing in Diverse Scenarios: Conducting more comprehensive testing across various urban layouts and under different traffic conditions to validate and improve the model’s robustness and reliability.

Customization for Different Cyclist Profiles: Tailoring the model to accommodate different types of cyclists, from casual riders to professional cyclists, considering their unique needs and preferences.

Reference

1. Bernhard Snizek, Thomas Alexander Sick Nielsen, Hans Skov Petersen,Mapping bicyclists’ experiences in Copenhagen,https://www.sciencedirect.com/science/article/pii/S096669231300015X

2. Chen, P.; Zhang, X.; Chen, X.; Liu, M. Path Planning Strategy for Vehicle Navigation Based on User Habits. Appl. Sci. 2018, 8, 407. https://doi.org/10.3390/app8030407

3. Z. Li, I. V. Kolmanovsky, E. M. Atkins, J. Lu, D. P. Filev and Y. Bai, “Road Disturbance Estimation and Cloud-Aided Comfort-Based Route Planning,” in IEEE Transactions on Cybernetics, vol. 47, no. 11, pp. 3879–3891, Nov. 2017, doi: 10.1109/TCYB.2016.2587673.

4.“Understanding Ant Colony Optimization Algorithms.” INDIAai. Accessed December 17, 2023. https://indiaai.gov.in/article/understanding-ant-colony-optimization-algorithms.

5. “Open Data Dataset.” City of Toronto Open Data Portal. Accessed December 17, 2023. https://open.toronto.ca/dataset/cultural-hotspot-points-of-interest/.

6. Open data, Transportation Services. “Open Data Dataset — Cycling Network.” City of Toronto Open Data Portal. Accessed December 17, 2023. https://open.toronto.ca/dataset/cycling-network/.

--

--