vincentiusyoshuac commited on
Commit
babe0db
·
verified ·
1 Parent(s): 5376ed0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -7
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
- city_names.append(city_name)
 
 
 
 
104
 
105
  if st.button("Optimasi Rute"):
106
- coordinates = [get_coordinates(city) for city in city_names]
107
- valid_coordinates = [c for c in coordinates if c is not None]
108
 
109
  if len(valid_coordinates) < 2:
110
- st.error("Ada kota yang tidak ditemukan. Pastikan nama kota benar.")
111
  else:
112
- # Buat distance matrix
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