First draft of exhaustive search.

This commit is contained in:
Cory Balaton 2024-09-29 10:44:51 +02:00
parent cdf19027c3
commit 117446ffb0
Signed by: coryab
GPG Key ID: F7562F0EC4E4A61B

53
hill_climbing.py Normal file
View File

@ -0,0 +1,53 @@
from typing import Tuple
import numpy as np
import numpy.typing as npt
import copy
from common import plot_plan, read_data
original_perm = None
def hill_climbing(distances: npt.NDArray) -> Tuple[float, npt.NDArray]:
size = len(distances)
perm = np.arange(size)
np.random.shuffle(perm)
print(perm)
global original_perm
original_perm = copy.deepcopy(perm)
current_route: float = np.sum([distances[perm[i - 1], perm[i]] for i in range(size)])
found_improvement = True
while found_improvement:
found_improvement = False
tmp_improvement: float = current_route
improvement_index: int = -1
for i in range(size):
perm[i - 1], perm[i] = perm[i], perm[i - 1]
tmp_route: float = np.sum([distances[perm[i - 1], perm[i]] for i in range(size)])
if tmp_route < tmp_improvement:
tmp_improvement = tmp_route
improvement_index = i
found_improvement = True
perm[i - 1], perm[i] = perm[i], perm[i - 1]
if found_improvement:
current_route = tmp_improvement
perm[improvement_index - 1], perm[improvement_index] = (
perm[improvement_index],
perm[improvement_index - 1],
)
print(perm)
return (current_route, perm)
if __name__ == "__main__":
cities, data = read_data("./european_cities.csv")
distance, perm = hill_climbing(data[:10,:10])
plot_plan(list(map(lambda i: cities[i], list(perm))))
plot_plan(list(map(lambda i: cities[i], list(original_perm))))