Ga KSP Parkiran Mobil
Ga KSP Parkiran Mobil
LAPORAN
Disusun untuk Menyelesaikan Salah Satu Tugas Mata Kuliah Algoritma Evolusioner
Departemen Informatika yang Diampu Oleh Ibu Rismiyati, B.Eng, M.Cs
Disusun oleh:
Oscar Ben Panggabean 24010316120035
Hamiem Suny Agung Laksono 24010316120039
Muhammad Naufal Dzaka Aldira 24010316130090
Zharfan Akbar Adriawan 24060117120008
PENDAHULUAN
A. Latar Belakang
Ketika mempelajari algoritma sering diperlukan kasus atau gambaran
masalah sebagai titik pandang logis bagaimana sebuah algoritma diimplementasikan.
Kasus-kasus tersebut diantaranya adalah KSP(Knapsack problem), TSP(Traveling
Salesman problem), sampai Hanoi Tower. KSP sendiri merupakan kasus yang
menceritakan seorang pencuri yang memiliki kantong dengan ukuran tebatas,
pencuri ini ingin membawa barang yang muat di kantong tetapi dengan total harga
barang yang paling tinggi dari seluruh kombinasi barang yang ada. Kasus ini
termasuk pada kasus optimasi karena harus memberikan hasil yang paling optimal
dari semua kombinasi yang ada.
Katakan bila pencarian rute dialkukan secara brute force(exhaustive search),
bila input atau jumlah barang yang diberikan hanya 2 atau sampai 4 saja
kemungkinan waktu yang diperlukan untuk algoritma selesai dieksekusi dapat
diterima atau tidak memakan waktu lama. Namun bila kota yang diberikan banyak,
maka algoritma akan membutuhkan waktu sangat lama untuk selesai sehingga tidak
dapat diterima sebagai penyelesaian masalah yang efisien.
Untuk mengatasi permasalahan waktu eksekusi tersebut, algoritma optimasi
atau algoritma evoluseioner seperti GA(genetic algorithm), hill-climbing, PSO, dan
lainya lahir. GA adalah algoritma yang mengadaptasi sebuah kromosom individu
yang memiliki gen-gen sebagai representasi evolusi setiap populasi, dalam GA
diantaranya terdapat pemilihan orangtua, crossover, sampai mutasi.
Pada laporan ini, akan dijelaskan bagaimana mengimplementasikan
algoritma genetika pada knapsack problem dengan implementasi nyata masalah
parkiran mobil dengan lebar parkiran mobil sebagai kantung pencuri, lebar mobil
sebagai volume barang, harga mobil sebagai harga barang pada knapsack problem.
B. Rumusan Masalah
Dari masalah yang telah diterangkan pada latarbelakang diatas, rumusan
masalah pada laporan ini adalah :
1. Bagaimana mengimplementasikan algoritma genetika pada kasus kanpsack
problem?
2. Bagaimana hasil eksekusi algoritman bila menggunakan data permasal?
C. Dasar Teori
1. Genetic Algorithm
Algoritme genetik adalah teknik pencarian yang di dalam ilmu komputer
untuk menemukan penyelesaian perkiraan untuk optimisasi dan masalah
pencarian. Algoritme genetik adalah kelas khusus dari algoritme evolusioner
dengan menggunakan teknik yang terinspirasi oleh biologi evolusioner seperti
warisan, mutasi, seleksi alam dan rekombinasi (atau crossover).
Algoritme Genetik pertama kali dikembangkan oleh John Holland pada tahun
1970-an di New York, Amerika Serikat. Dia beserta murid-murid dan teman
kerjanya menghasilkan buku berjudul "Adaption in Natural and Artificial
Systems" pada tahun 1975.
Algoritme Genetik khususnya diterapkan sebagai simulasi komputer di mana
sebuah populasi representasi abstrak (disebut kromosom) dari solusi-solusi calon
(disebut individual) pada sebuah masalah optimisasi akan berkembang menjadi
solusi-solusi yang lebih baik. Secara tradisional, solusi-solusi dilambangkan
dalam biner sebagai string '0' dan '1', walaupun dimungkinkan juga penggunaan
penyandian (encoding) yang berbeda. Evolusi dimulai dari sebuah populasi
individual acak yang lengkap dan terjadi dalam generasi-generasi. Dalam tiap
generasi, kemampuan keseluruhan populasi dievaluasi, kemudian multiple
individuals dipilih dari populasi sekarang (current) tersebut secara stochastic
(berdasarkan kemampuan mereka), lalu dimodifikasi (melalui mutasi atau
rekombinasi) menjadi bentuk populasi baru yang menjadi populasi sekarang
(current) pada iterasi berikutnya dari algoritme.
3. Flask
Flask adalah kerangka kerja aplikasi web mikro yang ditulis dalam bahasa
pemrograman Python dan berdasarkan Werkzeug toolkit dan template engine
Jinja2. Berlisensi BSD.
Versi stabil terbaru Flask adalah Flask 1.02 per Mei 2018. Aplikasi yang
menggunakan Flask framework antara lain adalah: Pinterest, LinkedIn, dan
halaman web komunitas situs Flask itu sendiri.
PEMBAHASAN
b. Evaluasi Fitness
Evaluasi Fitness, atau fungsi Fitness pada kasus Knapsack problem
adalah :
𝑓𝑖(𝑣𝑎𝑙𝑢𝑒) = 𝑖(𝑣𝑎𝑙𝑢𝑒) ∗ 𝐺𝑒𝑛
𝑓𝑖(𝑣𝑜𝑙𝑢𝑚𝑒) = 𝑖(𝑣𝑜𝑙𝑢𝑚𝑒) ∗ 𝐺𝑒𝑛
fi(value) adalah fi ➔ fitness value.
fi(volume) adalah nilai evaluasi :
Jika fi(volume) > boundary
Maka fi(value) = 0 //Penalty
Jika dalam problem yang diangkat, boundary berarti lebar parkiran.
Pada implementasinya fitness dibuat dalam array satu dimensi yang ber
indeks bersesuaian dengan array lain berbentuk dua dimensi yaitu array
populasi.
c. Seleksi Orangtua
Kemudian dilakukan seleksi orang tua atau dilakukan pembuatan
populasi baru berbentuk populasi orang tua dengan menggunkan metode
roulette wheel. Langkah metode roulette wheel seperti :
1. buat array probabilitas Fitness.
2. buat array probabilitas Fitness Kumulatif (untuk mengetahui lokasi
probabilitas).
3. Generasi angka random dari 0 sampai 1.
4. Ambil individu pada indeks fitness yang terpilih.
d. Cross Over
Pada laporan ini, cross over dilakukan dengan metode Single-point
cross-over, sebagai contoh :
Pada kode kami, dari dua pasang orang tua secara random, maka akan
dinghasilkan satu individu. Dan dilakukan sebanyak panjang populasi.
Parent :
Childs :
f. Seleksi Survival
Seleksi survival pada kode kami adalah dengan Elitism, yaitu dengan
mengambil individu dengan fitness terbaik, dan diletakkan pada awal array
tanpa terkena mutasi sama sekali.
Jadi setiap awal populasi di generasi selanjutnya, pasti terdapat satu
individu yang tidak termutasi di awal array populasi. Meskipun akan terkena
pemilihan orang tua pada roulette wheel, peluang terpilihnya tetap besar
karena memiliki fitness yang tinggi.
B. Source Code Algoritma GA
import random
generation = 0
# print("popSize" ,popSize);
# print(pop);
# print(generation)
# print(fitness)
# for i in range(len(pop)):
# print(" ")
# print(parent)
print("generation : ",generation)
for i in range(len(pop)):
print(" ")
eliteFit = selectEliteFit(pop,fitness)
data = {
'elite':selectElite(pop, fitness),
'fitness_elite':fitness[eliteFit],
'fitness':fitness,
'panjang': len(V),
'volume': V,
'weight': W,
'max' : MAX,
return (data)
length = len(V)
return pop
fitness = []
for i in range(len(pop)):
#weight = 0
#volume = MAX+1
weight = 0
volume=0
ones = []
for j in range(len(pop[i])):
if pop[i][j] == 1:
volume += V[j]
weight += W[j]
ones += [j]
weight=0
#pop[i][ones[random.randint(0, len(ones)-1)]] = 0
fitness += [weight]
#print pop
#print fitness
return fitness
popSize = len(pop)
newPop = []
#print newPop
return newPop
# print("nilai ",len(pop));
ortu = []
probFit = []
probFitKum = []
# print(fit)
for i in range(len(fit)):
# print(i)
for j in range(len(fit)):
if not probFitKum:
probFitKum += [probFit[j]]
else:
# print(j)
k=0;
# print("fitnya : ",len(fit))
while (len(ortu)<len(pop) ):
k+=1
rouleteTheWheel = random.random()
# print(rouleteTheWheel);
# print(rouleteTheWheel)
# print(k)
for i in range(len(pop)):
ortu += [pop[i]]
break;
# print("Ortu saya",ortu);
# ortu += [pop[k]]
# k=k+1
# print(ortu)
# print("Log", str(ortu))
# print("nilai k: ",k);
# print("Ortu",len(ortu));
return ortu
elite = 0
for i in range(len(fit)):
elite = i
return (pop[elite])
elite = 0
for i in range(len(fit)):
elite = i
return (elite)
totalFit = sum(fit)
tempSum = 0
mate1 = []
fit1 = 0
for i in range(size):
tempSum += fit[i]
mate1 = pop.pop(i)
fit1 = fit.pop(i)
break
tempSum = 0
for i in range(len(pop)):
tempSum += fit[i]
mate2 = pop[i]
pop += [mate1]
fit += [fit1]
return mate1[:lucky]+mate2[lucky:]
for i in range(len(gene)):
if lucky == 1:
#print "MUTATED!"
gene[i] = bool(gene[i])^1
return gene
maxCount = mode(fit)
return True
else:
return False
def mode(fit):
values = set(fit)
maxCount = 0
for i in values:
maxCount = fit.count(i)
return maxCount
A. Kesimpulan
Kesimpulan yang dapat diambil dari pekerjaan ini diantaranya :
1. Algoritma GA dapat menyelesaikan masalah optimasi problem Knapsack.
2. Hasil yang diberikan terlihat cenderung sama bila panjang kromosom
berpanjang lebih dari 10, dan berbeda beda bila panjang kromosom kurang
dari 10 (dengan perbedaan nilai fitness tidak terlalu jauh).
3. Panjang populasi juga berpengaruh terhadap hasil eksekusi, bila panjang
populasi terlalu sedikit, maka pencarian hasil optimal akan memakan waktu.
4. Bila panjang kromosom terlalu pendek seperti 4 kebawah dan populasi terlalu
pendek, akan menyebabkan fitness 0 pada seluruh individu dalam populasi,
yang terbilang salah. Hal ini terjadi bila generasi awal dominan gen 0, maka
dimungkinkan gen 1 yang sedikit terkena mutasi sehingga menimbulkan
individu full ber-gen 0, yang menjadikan seluruh individu dalam populasi
berfitness 0. Hal ini menjadi masalah ketika perhitungan probabilitas fitness,
karena pembagi 0 tidak dapat dilakukan. Sehingga terdapat Error ketika
eksekusi (tidak bila diberi control dengan benar). Namun hal ini sangat
langka terjadi. Karena harus dalam keadaan kurang beruntung.