• Tidak ada hasil yang ditemukan

BAB V PENUTUP

5.2 Saran

Berdasarkan hasil pembuatan model penjadwalan dengan menggunakan metode algoritma genetika dapat diberikan saran yaitu :

1. Diharapkan pada penelitian ini kedepannya program lebih lengkap daripada sebelumnya seperti menambah jumlah peminat dan juga ruangan untuk setiap mata kuliah ditentukan seperti untuk mata kuliah wajib semua menempati ruangan yang memiliki kapasitas ruangan yang besar karena pasti jumlah peminat lebih banyak dari jumlah peminat kuliah wajib konsentrasi

2. Pada pengujian yang dilakukan pada penelitian ini masih membedakan program yang 3 sks dan 2 sks, dan untuk keluaran jadwalnya masih harus dikeluarkan secara manual, dan untuk saran kedepannya untuk penelitian selanjutnya program memerhatikan bobot matakuliah sehingga tidak perlu lagi banyak program. Dan juga mengeluarkan keluarannya secara otomatis menjadi bentuk jadwal yang ada di Jurusan Teknik Elektro universitas Mataram tidak perlu lagi untuk mengeluarkan secara manual.

3. Diharapkan pada penelitian ini kedepan menjadi awal untuk membuat aplikasi penjadwalan perkuliahan di Jurusan Teknik Elektro Universitas Mataram .

43

DAFTAR PUSTAKA

Akademi Zane, 18 Juli 2019. Genetic Algorithms class scheduling with python Tutorial (Online) (https://www.youtube.com/watch?v=8NrNX_jCkjw, Diakses 3 Februari 2020) Aria, Muhammad. (2006). Aplikasi algoritma genetik untuk optimasi penjadwalan mata kuliah. Universitas Komputer Indonesia.

Aziz, Muliadi. (2017). Pemodelan Algoritma Genetika Pada Sistem Penjadwalan Perkuliahan Prodi Ilmu Komputer Universitas Lambung mangkurat, Jurnal Ilmu Komputer 1(1), 67-79.

Basuki, Achmad. (2003). Strategi menggunakan algoritma genetika. Tersedia di

http://lecturer. eepisits. edu/~ basuki/lecture/StrategiAlgoritmaGenetika. Pdf (diakses 29 Mei 2020).

Buliali, Joko. Lianto., Herumurti, Darlis., & Wiriapradja, Giri. (2008). Penjadwalan Matakuliah dengan Menggunakan Algoritma Genetika dan Metode Constraint Satisfaction. JUTI: Jurnal Ilmiah Teknologi Informasi, 7(1), 29-38.

Damayanti, Chusnah. P., Putri, Rekyan. Regasari. M., & Fauzi, Mochammad. A.

(2017). Implementasi Algoritma Genetika Untuk Penjadwalan Customer Service (Studi Kasus: Biro Perjalanan Kangoroo). Jurnal Pengembangan Teknologi Informasi dan Ilmu Komputer e-ISSN, 2548, 964X.

Ferawati, Evi, (2010), Optimasi Penjadwalan Mata Kuliah Di Perguruan Tinggi Menggunakan Algoritma Genetika, Depok : Universitas Indonesia

Janata, A., & Haerani, E. (2015). Sistem Penjadwalan Outsourcing Menggunakan Algoritma Genetika (Studi Kasus: PT. Syarikatama). Jurnal CoreIT: Jurnal Hasil Penelitian Ilmu Komputer dan Teknologi Informasi, 1(1), 17-24.

Josi, Ahmat. (2017). Implementasi Algoritma Genetika Pada Aplikasi Penjadwalan Perkuliahan Berbasis Web Dengan Mengadopsi Model Waterfall (Studi Kasus: STMIK Prabumulih). Jurnal Informatika: Jurnal Pengembangan IT, 2(2), 77-83.

Nugraha, Ivan. (2008). Aplikasi Algoritma Genetik Untuk Optimasi Penjadwalan Kegiatan Belajar Mengajar. Bandung: Institut Teknologi Bandung.

44 Putra, I Made S, (2018), Penerapan Algoritma Genetika dan Implementasi Dalam

Matlab, Bali: Universitas Udayana

Silitonga, Parasian. D., & Pasaribu, Natal. P. (2016). Optimasi Penjadwalan Mata Kuliah Fakultas Ilmu Komputer Universitas Katolik Santo Thomas Sumatera Utara Dengan Menggunakan Algoritma Genetika. Jurnal Teknik Informatika UNIKA Santo Thomas, 1(2), 7-12.

45

LAMPIRAN

46 Lampiran 1. Jadwal Hasil Program Algoritma Genetika

47 Lampiran 2. Source Code Python algoritma genetika

class GeneticAlgorithm:

# Fungsi evolusi

def evolve(self, population): return

self._mutate_population(self._crossover_population(population))

# Fungsi crossover populasi

def _crossover_population(self, pop):

crossover_pop = Population(0)

for i in range(NUMB_OF_ELITE_SCHEDULES):

crossover_pop.get_schedules().append(pop.get_schedules()[i]) i = NUMB_OF_ELITE_SCHEDULES

while i < POPULATION_SIZE:

schedule1 = self._select_tournament_population(pop).get_schedules()[0]

schedule2 = self._select_tournament_population(pop).get_schedules()[0]

crossover_pop.get_schedules().append(self._crossover_schedule(schedule1, schedule2))

i += 1

return crossover_pop

# Fungsi mutasi populasi

def _mutate_population(self, population):

for i in range(NUMB_OF_ELITE_SCHEDULES, POPULATION_SIZE):

self._mutate_schedule(population.get_schedules()[i]) return population

# Fungsi crossover jadwal

def _crossover_schedule(self, schedule1, schedule2):

crossoverSchedule = Schedule().initialize()

for i in range(0, len(crossoverSchedule.get_classes())):

if (rnd.random() > 0.5): crossoverSchedule.get_classes()[i] = schedule1.get_classes()[i]

else: crossoverSchedule.get_classes()[i] = schedule2.get_classes()[i]

48

return crossoverSchedule

# Fungsi mutasi jadwal

def _mutate_schedule(self, mutateSchedule):

schedule = Schedule().initialize()

for i in range(0, len(mutateSchedule.get_classes())):

if(MUTATION_RATE > rnd.random()): mutateSchedule.get_classes()[i] = schedule.get_classes()[i]

return mutateSchedule

def _select_tournament_population(self, pop):

tournament_pop = Population(0) i = 0

while i < TOURNAMENT_SELECTION_SIZE:

tournament_pop.get_schedules().append(pop.get_schedules()[rnd.randrange(0, POPULATION_SIZE)])

i += 1

tournament_pop.get_schedules().sort(key=lambda x: x.get_fitness(), reverse=True)

return tournament_pop

Lampiran 3. Source Code Python Menghitung Nilai Fitness algoritma genetika

def calculate_fitness(self):

# Kondisi awal adalah jumlah konflik nya 0 self._numbOfConflicts = 0

# Mengambil semua kelas classes = self.get_classes()

# Mengolah setiap kelas untuk mendapatkan nilai konflik yang langsung

49

dihitung jadi fitness

for i in range(0, len(classes)):

# Konflik + 1 jika kapasitas kelas kurang dari jumlah mahasiswa pada mata kuliah tersebut

# if (classes[i].get_room().get_seatingCapacity() <

classes[i].get_course().get_maxNumbOfStudents()):

# self._numbOfConflicts += 1

# Melakukan pengecekan ke konflik selanjutnya for j in range(0, len(classes)):

if (j >= i):

# Melakukan pengecekan apakah waktu pertemuan (Hari dan waktu) nya sama, dan kelas nya berbeda

if (classes[i].get_meetingDay() == classes[j].get_meetingDay() and

classes[i].get_meetingTime() == classes[j].get_meetingTime() and

classes[i].get_id() != classes[j].get_id()):

# Jika ruangannya sama maka konflik + 1

if (classes[i].get_room() == classes[j].get_room()):

self._numbOfConflicts += 1

# Jika dosennya sama maka konflik + 1 if (classes[i].get_instructor() ==

classes[j].get_instructor()):

self._numbOfConflicts += 1 def __str__(self):

returnValue = ""

for i in range(0, len(self._classes)-1):

returnValue += str(self._classes[i]) + ", "

returnValue += str(self._classes[len(self._classes)-1]) return returnValue

class Population:

def __init__(self, size):

self._size = size self._data = data self._schedules = []

50

self._lschedules = []

for i in range(0, size):

sample = Schedule().initialize() self._schedules.append(sample)

def get_schedules(self): return self._schedules def get_lschedules(self): return self._lschedules

Lampiran 4. Source Code Python Getter dan Setter

def get_id(self): return self._id

def get_dept(self): return self._dept def get_course(self): return self._course

def get_instructor(self): return self._instructor def get_meetingTime(self): return self._meetingTime def get_meetingDay(self): return self._meetingDay def get_room(self): return self._room

def set_instructor(self, instructor): self._instructor = instructor def set_meetingTime(self, meetingTime): self._meetingTime = meetingTime def set_meetingDay(self, meetingDay): self._meetingDay = meetingDay def set_room(self, room): self._room = room

def __str__(self):

return str(self._dept.get_name()) + "," \

+ str(self._course.get_number()) + "," \ + str(self._room.get_number()) + "," \ + str(self._instructor.get_id()) + "," \ + str(self._meetingTime.get_id()) + "," \ + str(self._meetingDay.get_id())

51 Lampiran 5. Source Code Python Tampilkan Populasi

class DisplayMgr:

def __init__(self):

self.MATA_KULIAH = MATA_KULIAH def print_available_data(self):

print("> Deklarasikan semua data") self.print_dept()

self.print_course() self.print_room()

self.print_instructor() self.print_meeting_times() self.print_meeting_days() def print_dept(self):

depts = data.get_depts()

availableDeptsTable = prettytable.PrettyTable(['dept', 'courses'])

def print_course(self):

availableCoursesTable = prettytable.PrettyTable(['id', 'course #', 'max # of students', 'instructors'])

courses = data.get_courses()

def print_generation(self, population):

table1 = prettytable.PrettyTable(['schedule #', 'fitness', '# of conflicts'])

schedules = population.get_schedules()

def print_schedule_as_table(self, schedule):

classes = schedule.get_classes()

table = prettytable.PrettyTable(['Class #', 'Dept', 'Course (number, max # of students)', 'Room (Capacity)'])

def print_result(self, population):

# table = prettytable.PrettyTable(['Jadwal']);

schedules = population.get_schedules()

52

for i in range(0, len(schedules)):

print("Populasi ke : #"+str(i)+" Memiliki fitness sebesar "+

str(round(schedules[i].get_fitness(), 3)))

if (schedules[i].get_fitness() == 1):

table = prettytable.PrettyTable(['No' , 'MK', 'Ruang', 'Dosen', 'Jam', 'Hari']);

# Memisahkan jadwal

schedulesa = str(schedules[i]).split(" ") # Memisahkan kolom

# Kelas, MK, Ruang, Dosen, Jam for i in range(0, len(schedulesa)):

schedulesb = str(schedulesa[i]).split(",")

# schedules[0] dihilangkan karena tidak pakai kelas

53 Lampiran 5. Source Code Python Menginialisasi Kode

data = Data()

displayMgr = DisplayMgr()

displayMgr.print_available_data() generationNumber = 0

print("\n> Generation # " + str(generationNumber)) population = Population(POPULATION_SIZE)

population.get_schedules().sort(key=lambda x: x.get_fitness(), reverse=True) displayMgr.print_generation(population)

displayMgr.print_schedule_as_table(population.get_schedules()[0]) geneticAlgorithm = GeneticAlgorithm()

while (population.get_schedules()[0].get_fitness() != 1.0):

generationNumber += 1

print("\n>Generation # " + str(generationNumber)) population = geneticAlgorithm.evolve(population)

population.get_schedules().sort(key=lambda x: x.get_fitness(), reverse=True) displayMgr.print_generation(population)

displayMgr.print_schedule_as_table(population.get_schedules()[0])

# displayMgr.print_result(population) displayMgr.print_result(population) print("\n\n")

Dokumen terkait