Spaces:
Sleeping
Sleeping
Update solver.py
Browse files
solver.py
CHANGED
|
@@ -113,7 +113,13 @@ def tw_aware_clusters(df: pd.DataFrame, depot: Tuple[float, float],
|
|
| 113 |
ang = np.arctan2(dy, dx)
|
| 114 |
|
| 115 |
distances = np.sqrt(dx**2 + dy**2)
|
| 116 |
-
tw_urgency = df["tw_end"].values / (distances + 1.0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
order = np.lexsort((tw_urgency, ang))
|
| 118 |
|
| 119 |
clusters = [[] for _ in range(n_vehicles)]
|
|
@@ -181,10 +187,20 @@ def build_route_by_insertion_tw(df: pd.DataFrame, idxs: List[int],
|
|
| 181 |
return []
|
| 182 |
route, remaining = [], set(idxs)
|
| 183 |
|
|
|
|
| 184 |
def urgency_score(i):
|
| 185 |
dist = euclid(depot, (df.loc[i, "x"], df.loc[i, "y"]))
|
| 186 |
tw_e = float(df.loc[i, "tw_end"])
|
| 187 |
-
return tw_e / (dist + 1.0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
|
| 189 |
first = min(remaining, key=urgency_score)
|
| 190 |
route.append(first)
|
|
|
|
| 113 |
ang = np.arctan2(dy, dx)
|
| 114 |
|
| 115 |
distances = np.sqrt(dx**2 + dy**2)
|
| 116 |
+
#tw_urgency = df["tw_end"].values / (distances + 1.0)
|
| 117 |
+
# Earlier deadlines (smaller tw_end) → higher urgency
|
| 118 |
+
# Shorter time windows are also treated as slightly more urgent
|
| 119 |
+
tw_window = df["tw_end"].values - df["tw_start"].values
|
| 120 |
+
tw_urgency = (1.0 / (df["tw_end"].values + 1.0)) * (1.0 + 1.0 / (tw_window + 1.0))
|
| 121 |
+
tw_urgency = tw_urgency / (distances + 1.0)
|
| 122 |
+
|
| 123 |
order = np.lexsort((tw_urgency, ang))
|
| 124 |
|
| 125 |
clusters = [[] for _ in range(n_vehicles)]
|
|
|
|
| 187 |
return []
|
| 188 |
route, remaining = [], set(idxs)
|
| 189 |
|
| 190 |
+
"""
|
| 191 |
def urgency_score(i):
|
| 192 |
dist = euclid(depot, (df.loc[i, "x"], df.loc[i, "y"]))
|
| 193 |
tw_e = float(df.loc[i, "tw_end"])
|
| 194 |
+
return tw_e / (dist + 1.0)"""
|
| 195 |
+
|
| 196 |
+
def urgency_score(i):
|
| 197 |
+
dist = euclid(depot, (df.loc[i, "x"], df.loc[i, "y"]))
|
| 198 |
+
tw_s = float(df.loc[i, "tw_start"])
|
| 199 |
+
tw_e = float(df.loc[i, "tw_end"])
|
| 200 |
+
tw_window = max(1.0, tw_e - tw_s)
|
| 201 |
+
# Earlier deadlines and tighter windows → higher urgency (lower numeric score)
|
| 202 |
+
return (1.0 / (tw_e + 1.0)) * (1.0 + 1.0 / (tw_window + 1.0)) / (dist + 1.0)
|
| 203 |
+
|
| 204 |
|
| 205 |
first = min(remaining, key=urgency_score)
|
| 206 |
route.append(first)
|