speeding up optimizer
Some checks failed
Build and deploy the backend to staging / Build and push image (pull_request) Failing after 2m30s
Build and deploy the backend to staging / Deploy to staging (pull_request) Has been skipped
Run linting on the backend code / Build (pull_request) Failing after 25s
Run testing on the backend code / Build (pull_request) Failing after 2m0s

This commit is contained in:
Helldragon67 2025-01-10 15:46:10 +01:00
parent 11bbf34375
commit c6cebd0fdf

View File

@ -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