A-1
LAMPIRAN A
LISTING PROGRAM
ALGORITMA GENERATE AND TEST
For i = 0 To titik.Length - 1 daftarInduk.Add(i)
Next
jalur = addJalur()
LblResult.Text = "Jumlah Kemungkinan : " & Fn & Environment.NewLine & "Jalur Awal : "
For i = 0 To n - 1
LblResult.Text += (IIf(i = 0, "", "-") & Chr(titik(i) + 65)) Next
LblResult.Text += "-A" & Environment.NewLine jalurPilih = String.Join("-", titik) & "-0"
Dim tempuhPilih As Double = hitung(jalurPilih, jarak)
LblResult.Text += "Jarak Tempuh : " & tempuhPilih & Environment.NewLine LblResult.Refresh()
ProgressBar1.Maximum = Fn ProgressBar1.Visible = True Dim jalurProses As String Dim tempuhProses As Double Dim k As Byte
Dim counter As ULong = 0
Dim Run As Stopwatch = Stopwatch.StartNew() For l = 1 To n - 1
k = n - 2
jalur = addJalur() counter += 1
jalurProses = String.Join("-", jalur.ToArray) & "-0"
tempuhProses = hitung(jalurProses, jarak)
test(jalurPilih, jalurProses, tempuhPilih, tempuhProses) For j = 1 To 3
If k = n - 2 Then
daftarInduk = backtrack(1) k = daftarInduk.Count jalur = addJalur() counter += 1
ProgressBar1.Value = counter
jalurProses = String.Join("-", jalur.ToArray) & "-0"
tempuhProses = hitung(jalurProses, jarak)
test(jalurPilih, jalurProses, tempuhPilih, tempuhProses) daftarInduk = backtrack(2)
k = jalur.Count ElseIf k = n - 3 Then k += 1
jalur = addJalur() counter += 1
ProgressBar1.Value = counter
jalurProses = String.Join("-", jalur.ToArray) & "-0"
tempuhProses = hitung(jalurProses, jarak)
test(jalurPilih, jalurProses, tempuhPilih, tempuhProses) daftarInduk = backtrack(1)
k = daftarInduk.Count
A-2
jalur = addJalur() counter += 1
ProgressBar1.Value = counter
jalurProses = String.Join("-", jalur.ToArray) & "-0"
tempuhProses = hitung(jalurProses, jarak)
test(jalurPilih, jalurProses, tempuhPilih, tempuhProses) daftarInduk = backtrack(2)
k = jalur.Count End If
If j = 3 Then
daftarInduk = backtrack(1)
Dim titikAwal As Integer = daftarInduk(daftarInduk.Count - 1) jalur.Add(titikAwal)
daftarInduk.Remove(titikAwal)
If counter Mod 24 = 0 And counter < Fn Then daftarInduk = backtrack(0)
l = 1
If counter Mod 120 = 0 And counter < Fn Then daftarInduk = backtrack(0)
l = 1
If counter Mod 720 = 0 And counter < Fn Then daftarInduk = backtrack(0)
l = 1
If counter Mod 5040 = 0 And counter < Fn Then daftarInduk = backtrack(0)
l = 1
If counter Mod 40320 = 0 And counter < Fn Then daftarInduk = backtrack(0)
l = 1 End If End If End If
ElseIf counter = Fn Then Exit For
End If End If End If Next
If counter = Fn Then Exit For
End If Next Run.Stop()
LblResult.Text += "Jalur Terpilih : "
For i = 0 To n - 1
LblResult.Text += (IIf(i = 0, "", "-") & Chr(Split(jalurPilih, "-")(i) + 65))
Next
LblResult.Text += Environment.NewLine & "Jarak Tempuh : " & tempuhPilih Dim runTime As Integer = CInt(Run.Elapsed.TotalMilliseconds)
LblResult.Text += Environment.NewLine & "Runtime : " & runTime & " ms"
ALGORITMA HILL CLIMBING
Dim Fn2 As ULong = 1 For i = 1 To (n - 1) - 2 Fn2 *= i
Next
nOp = Fn / (2 * Fn2) ReDim Op(nOp - 1, 1)
A-3
buatOp(n - 1)
Dim run As Stopwatch = Stopwatch.StartNew()
LblResult.Text = "Jumlah Operator : " & nOp & Environment.NewLine & "Jalur Awal : "
For i = 0 To n - 1
LblResult.Text += (IIf(i = 0, "", "-") & Chr(titik(i) + 65)) Next
LblResult.Text += "-A" & Environment.NewLine jalurPilih = String.Join("-", titik) & "-0"
Dim tempuhPilih As Double = hitung(jalurPilih, jarak)
LblResult.Text += "Jarak Tempuh : " & tempuhPilih & Environment.NewLine Dim temu As Boolean = True
Dim kandidat As String = jalurPilih Dim titikProses(n - 1) As Byte For i = 0 To n - 1
titikProses(i) = Split(jalurPilih, "-")(i) Next
While temu = True
Dim jalur(n - 1) As Byte For i = 0 To n - 1
jalur(i) = titikProses(i) Next
Dim tukar As Byte
Dim jalurProses(Op.Length / 2 - 1) As String Dim tempuhProses(Op.Length / 2 - 1) As Double For i = 0 To Op.Length / 2 - 1
tukar = jalur(Op(i, 0))
jalur(Op(i, 0)) = jalur(Op(i, 1)) jalur(Op(i, 1)) = tukar
jalurProses(i) = String.Join("-", jalur) & "-0"
tempuhProses(i) = hitung(jalurProses(i), jarak) Next
For j = 0 To n - 1
jalur(j) = titikProses(j) Next
For i = 0 To tempuhProses.Length - 1 If tempuhProses(i) < tempuhPilih Then tempuhPilih = tempuhProses(i) jalurPilih = jalurProses(i) End If
Next
For i = 0 To n - 1
titikProses(i) = Split(jalurPilih, "-")(i) Next
If jalurPilih = kandidat Then temu = False
LblResult.Text += "Jalur Terpilih : "
For i = 0 To n
LblResult.Text += (IIf(i = 0, "", "-") & Chr(Split(jalurPilih, "-")(i) + 65))
Next
LblResult.Text += Environment.NewLine
LblResult.Text += "Jarak Tempuh : " & tempuhPilih Else
kandidat = jalurPilih temu = True
End If End While run.Stop()
Dim runTime As Integer = CInt(run.Elapsed.TotalMilliseconds)
LblResult.Text += Environment.NewLine & "Runtime : " & runTime & " ms"