Обновить route.py

This commit is contained in:
2025-10-29 15:54:17 +03:00
parent 5074a37141
commit 82158fea68

View File

@@ -2,7 +2,7 @@ import math
import itertools import itertools
import requests import requests
from typing import List, Tuple, Dict, Optional, Set from typing import List, Tuple, Dict, Optional, Set
import random
class Point: class Point:
def __init__(self, coord: List[float], tag: str, visit_time: int): def __init__(self, coord: List[float], tag: str, visit_time: int):
self.coord = coord self.coord = coord
@@ -78,7 +78,7 @@ def group_points_by_significance(points: List[Point], tag_importance: Dict[str,
"""Group points by their importance level.""" """Group points by their importance level."""
grouped = {} grouped = {}
for point in points: for point in points:
importance = tag_importance.get(point.tag, float('inf')) importance = tag_importance.get(point.tag, float('inf'))[0]
if importance not in grouped: if importance not in grouped:
grouped[importance] = [] grouped[importance] = []
grouped[importance].append(point) grouped[importance].append(point)
@@ -134,7 +134,7 @@ def generate_routes_exact_tags(grouped_points: Dict[int, List[Point]],
# Group points by importance # Group points by importance
points_by_importance = {} points_by_importance = {}
for point in point_combination: for point in point_combination:
imp = tag_importance[point.tag] imp = tag_importance[point.tag][0]
if imp not in points_by_importance: if imp not in points_by_importance:
points_by_importance[imp] = [] points_by_importance[imp] = []
points_by_importance[imp].append(point) points_by_importance[imp].append(point)
@@ -187,7 +187,7 @@ def generate_routes_with_repeats(grouped_points: Dict[int, List[Point]],
# We have exactly the right number of points # We have exactly the right number of points
points_by_importance = {} points_by_importance = {}
for point in mandatory_points: for point in mandatory_points:
imp = tag_importance[point.tag] imp = tag_importance[point.tag][0]
if imp not in points_by_importance: if imp not in points_by_importance:
points_by_importance[imp] = [] points_by_importance[imp] = []
points_by_importance[imp].append(point) points_by_importance[imp].append(point)
@@ -206,8 +206,9 @@ def generate_routes_with_repeats(grouped_points: Dict[int, List[Point]],
# Get all available points excluding mandatory points # Get all available points excluding mandatory points
all_available_points = [] all_available_points = []
for points_list in grouped_points.values(): for key in grouped_points.keys():
all_available_points.extend(points_list) if tag_importance[key][1]:
all_available_points.extend(grouped_points[key])
# Remove mandatory points from available points # Remove mandatory points from available points
available_points = [p for p in all_available_points if p not in mandatory_points] available_points = [p for p in all_available_points if p not in mandatory_points]
@@ -252,7 +253,7 @@ def form_point_list(data):
point_list.append(point) point_list.append(point)
return point_list return point_list
def build_route(data, mapping,start_coord,total_time,n_nodes): def build_route(data, mapping,start_coord,total_time,n_nodes,strategy='best'):
# Example input data - теперь с не более чем 5 уникальными тегами # Example input data - теперь с не более чем 5 уникальными тегами
start_coord_test = [56.331576, 44.003277] start_coord_test = [56.331576, 44.003277]
@@ -416,6 +417,12 @@ def build_route(data, mapping,start_coord,total_time,n_nodes):
return return
# Step 8: Find optimal route (minimum time) # Step 8: Find optimal route (minimum time)
if strategy=='random':
optimal_route, min_time = random.choice(valid_routes)
elif strategy=='longest':
optimal_route, min_time = max(valid_routes, key=lambda x: x[1])
else:
optimal_route, min_time = min(valid_routes, key=lambda x: x[1]) optimal_route, min_time = min(valid_routes, key=lambda x: x[1])
print(f"\nOptimal route (time: {min_time:.2f} min):") print(f"\nOptimal route (time: {min_time:.2f} min):")
@@ -439,7 +446,7 @@ def build_route(data, mapping,start_coord,total_time,n_nodes):
# Display all tags covered by the route # Display all tags covered by the route
route_tags = set(point.tag for point in optimal_route) route_tags = set(point.tag for point in optimal_route)
print(f"\nTags covered in this route: {', '.join(route_tags)}") #print(f"\nTags covered in this route: {', '.join(route_tags)}")
if all_tags.issubset(route_tags): if all_tags.issubset(route_tags):
print("All tags are covered in this route!") print("All tags are covered in this route!")
@@ -449,6 +456,6 @@ def build_route(data, mapping,start_coord,total_time,n_nodes):
print("All coordinates in the route are unique!") print("All coordinates in the route are unique!")
else: else:
print("ERROR: Duplicate coordinates found in the route!") print("ERROR: Duplicate coordinates found in the route!")
return route_coords
#if __name__ == "__main__": #if __name__ == "__main__":
# build_route() # build_route()