From c6cebd0fdfc7bd2f90a456277d74751b0b85603a Mon Sep 17 00:00:00 2001 From: Helldragon67 Date: Fri, 10 Jan 2025 15:46:10 +0100 Subject: [PATCH] speeding up optimizer --- backend/src/utils/optimizer.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/backend/src/utils/optimizer.py b/backend/src/utils/optimizer.py index becdc76..e5d4811 100644 --- a/backend/src/utils/optimizer.py +++ b/backend/src/utils/optimizer.py @@ -41,7 +41,7 @@ class Optimizer: resx (list[float]): List of edge weights. Returns: - tuple[list[int], list[int]]: A tuple containing a new row for constraint matrix and new value for upper bound vector. + tuple[list[int], list[int]]: A tuple containing a new row for A and new value for ub. """ for i, elem in enumerate(resx): @@ -165,19 +165,21 @@ class Optimizer: - def init_ub_dist(self, landmarks: list[Landmark], max_time: int): + def init_ub_time(self, landmarks: list[Landmark], max_time: int): """ - Initialize the objective function coefficients and inequality constraints for the optimization problem. + Initialize the objective function coefficients and inequality constraints. - This function computes the distances between all landmarks and stores their attractiveness to maximize sightseeing. - The goal is to maximize the objective function subject to the constraints A*x < b and A_eq*x = b_eq. + This function computes the distances between all landmarks and stores + their attractiveness to maximize sightseeing. The goal is to maximize + the objective function subject to the constraints A*x < b and A_eq*x = b_eq. Args: landmarks (list[Landmark]): List of landmarks. max_time (int): Maximum time of visit allowed. Returns: - tuple[list[float], list[float], list[int]]: Objective function coefficients, inequality constraint coefficients, and the right-hand side of the inequality constraint. + tuple[list[float], list[float], list[int]]: Objective function coefficients, inequality + constraint coefficients, and the right-hand side of the inequality constraint. """ # Objective function coefficients. a*x1 + b*x2 + c*x3 + ... @@ -191,7 +193,7 @@ class Optimizer: for j, spot2 in enumerate(landmarks) : t = get_time(spot1.location, spot2.location) + spot1.duration dist_table[j] = t - closest = sorted(dist_table)[:25] + closest = sorted(dist_table)[:15] for i, dist in enumerate(dist_table) : if dist not in closest : dist_table[i] = 32700 @@ -452,7 +454,7 @@ class Optimizer: 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 + c, A_ub, b_ub = self.init_ub_time(landmarks, max_time) # Add the distances from each landmark to the other 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