Isha184 commited on
Commit
2c751d9
·
verified ·
1 Parent(s): 31b9857

Update solver.py

Browse files
Files changed (1) hide show
  1. solver.py +18 -2
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)