more balanced scores
All checks were successful
Build and push docker image / Build (pull_request) Successful in 1m41s

This commit is contained in:
2024-08-12 15:58:30 +02:00
parent bea3a65fec
commit da921171e9
7 changed files with 97 additions and 54 deletions

View File

@@ -203,7 +203,7 @@ class Optimizer:
return c, A_ub, [max_steps]
def respect_number(self, L: int):
def respect_number(self, L, max_landmarks: int):
"""
Generate constraints to ensure each landmark is visited only once and cap the total number of visited landmarks.
@@ -224,7 +224,7 @@ class Optimizer:
b.append(1)
A = np.vstack((A, ones*L))
b.append(self.max_landmarks+1)
b.append(max_landmarks+1)
return A, b
@@ -433,6 +433,7 @@ class Optimizer:
self,
max_time: int,
landmarks: list[Landmark],
max_landmarks: int = None
) -> list[Landmark]:
"""
Main optimization pipeline to solve the landmark visiting problem.
@@ -443,15 +444,18 @@ class Optimizer:
Args:
max_time (int): Maximum time allowed for the tour in minutes.
landmarks (list[Landmark]): List of landmarks to visit.
max_landmarks (int): Maximum number of landmarks visited
Returns:
list[Landmark]: The optimized tour of landmarks with updated travel times, or None if no valid solution is found.
"""
if max_landmarks is None :
max_landmarks = self.max_landmarks
L = len(landmarks)
# SET CONSTRAINTS FOR INEQUALITY
c, A_ub, b_ub = self.init_ub_dist(landmarks, max_time) # Add the distances from each landmark to the other
A, b = self.respect_number(L) # Respect max number of visits (no more possible stops than landmarks).
A, b = self.respect_number(L, max_landmarks) # Respect max number of visits (no more possible stops than landmarks).
A_ub = np.vstack((A_ub, A), dtype=np.int16)
b_ub += b
A, b = self.break_sym(L) # break the 'zig-zag' symmetry