Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -58,8 +58,10 @@ def held_karp_tsp(dist_matrix):
|
|
| 58 |
else:
|
| 59 |
break
|
| 60 |
|
| 61 |
-
|
| 62 |
-
|
|
|
|
|
|
|
| 63 |
|
| 64 |
# Mendapatkan koordinat kota dari nama
|
| 65 |
def get_coordinates(city_name):
|
|
@@ -75,7 +77,7 @@ def create_distance_matrix(coordinates):
|
|
| 75 |
valid_coordinates = [c for c in coordinates if c is not None]
|
| 76 |
n = len(valid_coordinates)
|
| 77 |
if n < 2:
|
| 78 |
-
return [],
|
| 79 |
dist_matrix = np.zeros((n, n))
|
| 80 |
for i in range(n):
|
| 81 |
for j in range(i + 1, n):
|
|
@@ -126,13 +128,16 @@ if st.button("Optimasi Rute"):
|
|
| 126 |
min_cost, optimal_route = held_karp_tsp(dist_matrix)
|
| 127 |
|
| 128 |
# Tampilkan hasil
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
else:
|
| 59 |
break
|
| 60 |
|
| 61 |
+
if len(tour) == n + 1:
|
| 62 |
+
return min_tour_cost, tour
|
| 63 |
+
else:
|
| 64 |
+
return inf, []
|
| 65 |
|
| 66 |
# Mendapatkan koordinat kota dari nama
|
| 67 |
def get_coordinates(city_name):
|
|
|
|
| 77 |
valid_coordinates = [c for c in coordinates if c is not None]
|
| 78 |
n = len(valid_coordinates)
|
| 79 |
if n < 2:
|
| 80 |
+
return np.array([]), valid_coordinates
|
| 81 |
dist_matrix = np.zeros((n, n))
|
| 82 |
for i in range(n):
|
| 83 |
for j in range(i + 1, n):
|
|
|
|
| 128 |
min_cost, optimal_route = held_karp_tsp(dist_matrix)
|
| 129 |
|
| 130 |
# Tampilkan hasil
|
| 131 |
+
if min_cost == float('inf'):
|
| 132 |
+
st.write("Tidak ada rute optimal yang dapat ditemukan.")
|
| 133 |
+
else:
|
| 134 |
+
st.write(f"Biaya total minimum: {min_cost:.2f} km")
|
| 135 |
+
st.write("Rute optimal:", " -> ".join([city_names[i] for i in optimal_route]))
|
| 136 |
+
|
| 137 |
+
# Buat peta
|
| 138 |
+
map_obj = folium.Map(location=valid_coordinates[0], zoom_start=5)
|
| 139 |
+
plot_route(map_obj, valid_coordinates, optimal_route)
|
| 140 |
+
|
| 141 |
+
# Render map
|
| 142 |
+
st.markdown("### Rute Optimal")
|
| 143 |
+
st_folium = st.components.v1.html(folium.Map._repr_html_(map_obj), width=800, height=600)
|