Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -7,6 +7,9 @@ import numpy as np
|
|
7 |
|
8 |
# Algoritma Held-Karp untuk TSP
|
9 |
def held_karp_tsp(dist_matrix):
|
|
|
|
|
|
|
10 |
n = len(dist_matrix)
|
11 |
inf = float('inf')
|
12 |
memo = {}
|
@@ -70,12 +73,14 @@ def get_coordinates(city_name):
|
|
70 |
def create_distance_matrix(coordinates):
|
71 |
valid_coordinates = [c for c in coordinates if c is not None]
|
72 |
n = len(valid_coordinates)
|
|
|
|
|
73 |
dist_matrix = np.zeros((n, n))
|
74 |
for i in range(n):
|
75 |
for j in range(i + 1, n):
|
76 |
dist_matrix[i][j] = geodesic(valid_coordinates[i], valid_coordinates[j]).kilometers
|
77 |
dist_matrix[j][i] = dist_matrix[i][j]
|
78 |
-
return dist_matrix
|
79 |
|
80 |
# Fungsi untuk menampilkan peta rute
|
81 |
def plot_route(map_obj, coordinates, route):
|
@@ -98,19 +103,22 @@ st.title("Traveling Salesman Problem Solver")
|
|
98 |
st.subheader("Pilih Kota")
|
99 |
city_count = st.number_input("Jumlah kota", min_value=2, step=1)
|
100 |
city_names = []
|
|
|
101 |
for i in range(int(city_count)):
|
102 |
city_name = st.text_input(f"Kota {i+1}", key=f"city_{i}")
|
103 |
-
|
|
|
|
|
|
|
|
|
104 |
|
105 |
if st.button("Optimasi Rute"):
|
106 |
-
|
107 |
-
valid_coordinates = [c for c in coordinates if c is not None]
|
108 |
|
109 |
if len(valid_coordinates) < 2:
|
110 |
-
st.error("
|
111 |
else:
|
112 |
-
#
|
113 |
-
dist_matrix = create_distance_matrix(valid_coordinates)
|
114 |
min_cost, optimal_route = held_karp_tsp(dist_matrix)
|
115 |
|
116 |
# Tampilkan hasil
|
|
|
7 |
|
8 |
# Algoritma Held-Karp untuk TSP
|
9 |
def held_karp_tsp(dist_matrix):
|
10 |
+
if len(dist_matrix) < 2:
|
11 |
+
return 0, []
|
12 |
+
|
13 |
n = len(dist_matrix)
|
14 |
inf = float('inf')
|
15 |
memo = {}
|
|
|
73 |
def create_distance_matrix(coordinates):
|
74 |
valid_coordinates = [c for c in coordinates if c is not None]
|
75 |
n = len(valid_coordinates)
|
76 |
+
if n < 2:
|
77 |
+
return [], []
|
78 |
dist_matrix = np.zeros((n, n))
|
79 |
for i in range(n):
|
80 |
for j in range(i + 1, n):
|
81 |
dist_matrix[i][j] = geodesic(valid_coordinates[i], valid_coordinates[j]).kilometers
|
82 |
dist_matrix[j][i] = dist_matrix[i][j]
|
83 |
+
return dist_matrix, valid_coordinates
|
84 |
|
85 |
# Fungsi untuk menampilkan peta rute
|
86 |
def plot_route(map_obj, coordinates, route):
|
|
|
103 |
st.subheader("Pilih Kota")
|
104 |
city_count = st.number_input("Jumlah kota", min_value=2, step=1)
|
105 |
city_names = []
|
106 |
+
city_coords = []
|
107 |
for i in range(int(city_count)):
|
108 |
city_name = st.text_input(f"Kota {i+1}", key=f"city_{i}")
|
109 |
+
city_coords.append(get_coordinates(city_name))
|
110 |
+
if city_coords[-1] is None:
|
111 |
+
st.warning(f"Kota '{city_name}' tidak ditemukan. Harap periksa ejaan dan coba lagi.")
|
112 |
+
else:
|
113 |
+
city_names.append(city_name)
|
114 |
|
115 |
if st.button("Optimasi Rute"):
|
116 |
+
dist_matrix, valid_coordinates = create_distance_matrix(city_coords)
|
|
|
117 |
|
118 |
if len(valid_coordinates) < 2:
|
119 |
+
st.error("Tidak cukup kota yang valid untuk dioptimalkan.")
|
120 |
else:
|
121 |
+
# Hitung rute optimal
|
|
|
122 |
min_cost, optimal_route = held_karp_tsp(dist_matrix)
|
123 |
|
124 |
# Tampilkan hasil
|