Anda di halaman 1dari 15

TUGAS BESAR II

OPTIMASI PEMELIHARAAN MENGGUNAKAN GENETIC


ALGORITHM

Disusun oleh:

Muhammad Muflih Nurfaizi

41419120190

JURUSAN TEKNIK ELEKTRO

FAKULTAS TEKNIK

UNIVERSITAS MERCU BUANA

2020
PENDAHULUAN

Pandemi Corona Virus (Covid-19) membawa dampak yang sangat luas bagi kehidupan

seluruh masyarakat dunia. Virus ini dapat menyerang system pernafasan manusia yang mana

juga dapat menyebabkan kematian atau menyebabkan luka permanen pada individu yang sudah

terinfeksi dan sembuh. Tak dapat dipungkiri penyebaran dari virus Covid-19 sangatlah pesat,

keberadaaannya ini pun telah banyak menyita perhatian dunia tak tekecuali Indonesia.

Beberapa Langkah telah dilakukan oleh Indonesia untuk menekan penyebaran virus

Covid-19 ini, salah satunya ialah penerapan Social Distancing yang mana kemudian

berdampak pada jumlah personel yang dapat hadir pada suatu kantor. Penerapan Social

Distancing sangatlah berdampak pada berbagai aspek kehidupan, salah satunya ialah regu

pemeliharaan kelistrikan tempat saya bekerja.

Dikarenakan Penerapan Social Distancing maka personel tidak dapat hadir bersamaan

pada suatu waktu, akhirnya berdampak pada pelaksanaan pemeliharaan kelistrikan. Hal ini

yang kemudian menjadi dilemma, tanpa pemeliharaan peralatan lebih beresiko mengalami

kerusakan sedangkan Ketika dilakukan pemeliharaan dengan kondisi full tim ditengah

pandemik juga dapat membahayakan anggota tim.

Maka dari itu regu pemeliharaan pun dibagi menjadi dua tim yang mana akan saling

menutupi satu sama lain Ketika salah satu tim ada yang terkena Covid-19. Namun kemudian

dikarenakan tidak sepenuhnya personel pemeliharaan dapat hadir dalam pekerjaan

pemeliharaan. Maka item pemeliharaan ataupun pengujian menjadi tidak dapat dilakukan

sepenuhnya. Maka dari itu diperlukan optimasi dalam pengerjaannya yang mana dengan

personil yang ada dapat melakukan pemeliharaan dengan mengerjakan terlebih dahulu

pekerjaan yang sangat penting dikarenakan keterbatasaan personel dan waktu.


Persoalan yang dihadapi sebenarnya tidaklah jauh berbeda dengan knapsack problem.

knapsack problem merupakan permasalahan optimasi kombinatorik dengan memaksimalkan

profit dari item didalam knapsack (karung) tanpa melebihi kapasitasnya. Knapsack problem

dapat diilustrasikan sebagai berikut. Diberikan beberapa barang yang masing-masing memiliki

berat (weight) dan keuntungan (profit), dengan ketentuan barang yang dimasukkan kedalam

Knapsack memiliki total berat barang yang jika dimasukkan tidak boleh melebihi kapasitas

Knapsack, maka dapat dikatakan telah mencapai optimal packing.

Pada knapsack problem yang menjadi inikator penuhnya karung ialah berat karung

sedangkan pada optimasi yang saya buat adalah waktu, kemudian parameter beratnya

merupakan waktu pengerjaan sebuah item pemeliharaaan dan profit nya merupakan sebuah

nilai keharusan dilakukannya sebuah item pemeliharaan. Sehingga sebuah system optimasi

yang diharapkan ialah bagaimana mendapatkan sebuah list item pemeliharaan apa saja yang

harus dilakkukan terlebih dahulu dalam suatu waktu tertentu, yang mana dapat melakukan hal-

hal yang dianggap harus dilakukan dengan keterbatasan waktu dan personel yang ada pada

suatu hari tertentu.

Ada banyak cara dalam menyelesaikan knapsack problem, salah satunya menggunakan

Genetic Algorrithm. Genetic Algorithm adalah sebuah teknik searching untuk mencari solusi

dari suatu permasalahan optimasi. Teknik ini diinspirasi dari biologi evolutionary termasuk

masalah inheritance, mutation, selection, and crossover. Metode ini melakukan proses

searching dengan langkah-langkah sebagai berikut:

1. Populasi diciptakan secara random

2. Setiap individu dari populasi dievaluasi

3. Beberapa individu dipilih untuk berdasarkan nilai fitnessnya

4. Individu yang terpilih tersebut kemudian dimodifikasi (di-crossover atau dimutasi)


5. Semua individu yang dimodifikasi disatukan menjadi satu populasi baru. Apabila

individu yang baru yang terbentuk mempunyai nilai fitness yang lebih rendah dari

orang tuanya, individu yang baru tidak dimasukkan di dalam populasi baru, dan dapat

tetap menggunakan individu yang lama.

6. Apabila banyaknya jumlah pembentukan populasi telah mencapai angka tertentu, atau

level fitness yang memuaskan sudah dicapai, maka proses dihentikan. Apabila belum,

populasi baru kemudian digunakan untuk melakukan proses yang sama mulai dari

tahap nomor 2.

Menyimpulkan pada langkah-langkah yang tersebut di atas, maka metode ini

memerlukan pendefinisian representasi genetic dari domain solusi, dan fungsi fitness untuk

mengevaluasi domain solusi.

Proses GA dimulai dengan menentukan populasi awal initial population yang terdiri

dari beberapa kromosom yang disusun oleh beberpa gen yang merupakan representasi dari

kandidat-kandidat solusi dari suatu masalah. Kandidat-kandidat terbaik akan dipilih melalui

proses selection, berdasarkan fitness value yang telah dihitung untuk setiap kromosom dalam

populasi. Kandidat – kandidat terpilih dari proses ini adalah individu-individu yang akan

mengisi mating pool yaiu suatu set dimana dua parents akan dibentuk dari sini. Dalam

Evolutionary Algorithm prinsip bertahan muncul karena adanya proses reproduksi. Turunan

offspring yang dihasilkan akan membawa sifat gen orangtuanya (parents), oleh sebab itu

parents dipilih dari mating pool yang merupakan kumpulan kandidat-kandidat terbaik dari

suatu populasi. Dengan demikian turunan yang dihasilkan adalah turunan yang memiliki sifat

unggul dari kedua orang tuanya.


Model Matematika

Pada optimasi knapsack problem di bidang pemeliharaan, Genetic algorithm bekerja

pada sebuah populasi yang terdiri dari beberapa solusi optimasi. Setiap solisi disebut sebuah

individual. Setiap individual memiliki chromosome. Chromosome merupakan parameter yang

membentuk setiap individual. Setiap chromosome terdiri dari beberapa gen, yang mana setiap

gen merepresentasikan nilai 0 atau 1. Selain itu setiap individual juga memiliki nilai fitness,

nilai inilah yang digunakan untuk menentukan kualitas dari setiap individu.

Langkah pertama adalah menentukan problem/masalah yang akan dioptimasi.

“Akan dilakukan sebuah pemeliharaan bay transformator daya pada hari selasa tanggal 2 juni

2020, namun dengan kondisi personel dan waktu yang terbatas. Personel pemeliharaan yang

dapat hadir berjumlah 5 orang sedangkan waktu yang diberikan sebanyak 8 jam. Dengan

jumlah personil yang ada berikut daftar pekerjaan yang dapat dilakukan, waktu pengerjaannya

beserta nilai keharusan atau value dari pekerjaan tersebut.

NO Item Pekerjaan Waktu Pengerjaan Value

1 Cleaning Peralatan 2 Jam 8

2 Pengujian Transformator 4 Jam 10

3 Filter minyak Trafo 6 Jam 4

4 Pengujian Fungsi 1 Jam 7

5 Pengujian Minyak Isolasi 1 Jam 6

Pekerjaan apa sajakah yang datap dilakukan dalam jangka waktu yang diberikan yang

memberikan sebuah hasil yang paling baik dilihat dari value yang didapatkan.”
Langkah kedua menentukan populasi. Populasi ini terbentuk dari berbagai bentuk

solusi. Pada problem kali ini chromosome terdiri dari sejumlah gen yang jumlahnya sama

dengan total item pekerjaan pada list. Setiap gen berhubungan dengan index item pada list.

Setiap gen memiliki nilai 1 atau 0 untuk menunjukan bahwa item tersebut dikerjakan atau tidak

pada setiap solusi yang diberikan.

Item Pekerjaan ke- 1 2 3 4 5

Solusi 0 1 0 1 1

Dari contoh solusi diatas dapat dilihat bahwa yang harus dilakukan adalah item

pekerjaan 2,4 dan 5 yang mana Pengujian Transformator, Pengujian Fungsi dan Pengujian

minyak isolasi.

Fungsi Fitness yang digunakan pada problem/permasalahan kali ini adalah:

𝐶 𝑉 ; 𝑖𝑓 𝐶 𝑉 ≤ 𝑏𝑤

𝑓𝑖𝑡𝑛𝑒𝑠𝑠 = 0; 𝐽𝑖𝑘𝑎 𝑡𝑖𝑑𝑎𝑘

Dimana:

 n = Panjang Chromosome

 Ci = ith Gen

 Vi = ith Value

 Wi = ith Waktu

 bw = Batas Waktu

Langkah ketiga menentukan individual yang dapat melakukan operasi crossover dan

mutation. Pada program kali ini dilakukan dengan metode acak (random), yang mana setiap
individu memliki kesempatan untuk dapat melewati fungi ini sesuai dengan value yang

dimilikinya.

Crossover dilakukan dengan cara penyilangan antar dua solusi yang mana kedua

solusi akan saling menukarkan gennya. Dengan jumlah gen yang ditukarkan dipilih secara

acak berdasarkan Panjang dari chromosome itu sendiri. Sedangkan mutation dilakukan

dengan cara mengubah salah satu gen dari suatu individual secara acak.

Kedua operasi crossover dan mutation ini dilakukan dengan probabilitas yang mana

artinya kedua operator tersebut tidak dilakukan secara terus menerus terhadap setiap

generasi, namun dilakukan dengan probabilitas atau persentase kemungkinan. Untuk

probabilitas crossover di buat lebih tinggi agar semakin banyak variasi solusi yang

terbentuk juga agar meningkatkan kualitas solusi dari suatu populasi (Peningkatan rata-rata

fitness value). Sedangkan mutation de buat kecil agar tidak terjadi keberagaman yang

sangat banyak sehingga mengakibatkan tidak didapatkannya solusi yang paling baik,

namun mutation juga merupakan hal yang sangat penting agar tidak terjebak dalam solusi

yang sama secara terus menerus.

Penentuan Pobabilitas kedua operasi tersebut akan sangat berpengaruh dalam waktu

penyelesaian sebuag Genetic Algorthm. Selain kedua hal diatas banyaknya populasi juga

berpengaruh dalam waktu penyelesaian optimasi. Oleh karena itu nilai probabilitas dan

juga jumlah populasi sangatlah tergantung dari problem/permasalahan apa yang ingin

dipecahkan. Penentuan nilai yang sesuai akan mempercepat pemprosesan Genetic

Algorithm dalam penyelesaian masalah optimasi.


Flowchart
Hasil Simulasi

Simulasi dilakukan menggunakan bahasa pemograman Python pada platform

Google Colab. Adapun script yang digunakan merupakan hasil modifikasi dari script

Satvik Tiwari dalam penyelesaian masalah Knapsack Problem menggunakan Genetic

Algorithm. Simulasi yang dilakukan tidak menggunakan parameter yang sebenarnya dan

hanya merupakan prototype. Dilakukan untuk mengetahui tingkat keberhasilan dari

penerapan algoritma Genetic Algorithm dalam menyelesaikan masalah optimasi tersebut.

Adapun Prameter-parameter yang di masukan ke dalam program simulasi ialah:

1. List Item

NO Item Pekerjaan Waktu Pengerjaan Value

1 Cleaning Peralatan 2 Jam 8

2 Pengujian Transformator 4 Jam 10

3 Filter minyak Trafo 6 Jam 4

4 Pengujian Fungsi 1 Jam 7

5 Pengujian Minyak Isolasi 1 Jam 6

2. Jumlah populasi = 8

3. Jumlah generasi = 50

4. Probabilitas crossover = 80%

5. Probabilitas mutation = 40%

Berikut listing code simulasi juga output yang dihasilkan.


6/2/2020 GA.ipynb - Colaboratory

Inisialisasi

import numpy as np
import pandas as pd
import random as rd
from random import randint
import matplotlib.pyplot as plt
item_number = np.arange(1,6)
time = [2, 4, 6, 1, 1]
value = [8, 10, 4, 7, 8]
time_threshold = 8 #Maximum time
print('The list is as follows:')
print('Item No. Time Value')
for i in range(item_number.shape[0]):
print('{0} {1} {2}\n'.format(item_number[i], time[i], value[i]))

The list is as follows:


Item No. Time Value
1 2 8

2 4 10

3 6 4

4 1 7

5 1 8

Membuat Populasi Awal

solutions_per_pop = 8
pop_size = (solutions_per_pop, item_number.shape[0])
print('Population size = {}'.format(pop_size))
initial_population = np.random.randint(2, size = pop_size)
initial_population = initial_population.astype(int)
num_generations = 50
print('Initial population: \n{}'.format(initial_population))

Population size = (8, 5)


Initial population:
[[0 1 1 0 1]
[1 1 1 0 0]
[1 0 0 0 1]
[1 0 0 1 1]
[1 0 0 0 1]
[1 0 1 0 1]
[0 1 1 1 1]
[0 1 0 1 0]]

Fungsi Fitness

def cal_fitness(time, value, population, threshold):


fitness = np.empty(population.shape[0])
for i in range(population.shape[0]):
S1 = np.sum(population[i] * value)
S2 = np.sum(population[i] * time)
if S2 <= threshold:
fitness[i] = S1
else :
fitness[i] = 0
return fitness.astype(int)

Fungsi Selection

https://colab.research.google.com/drive/1sq_BI6qyZoC_WoUU2QudUHXR9JxsLZwj#scrollTo=3ECwi_-uPzYk&printMode=true 1/4
6/2/2020 GA.ipynb - Colaboratory

def selection(fitness, num_parents, population):


fitness = list(fitness)
parents = np.empty((num_parents, population.shape[1]))
for i in range(num_parents):
max_fitness_idx = np.where(fitness == np.max(fitness))
parents[i,:] = population[max_fitness_idx[0][0], :]
fitness[max_fitness_idx[0][0]] = -999999
return parents

Fungsi Crossover

def crossover(parents, num_offsprings):


offsprings = np.empty((num_offsprings, parents.shape[1]))
crossover_point = int(parents.shape[1]/2)
crossover_rate = 0.8
i=0
while (parents.shape[0] < num_offsprings):
parent1_index = i%parents.shape[0]
parent2_index = (i+1)%parents.shape[0]
x = rd.random()
if x > crossover_rate:
continue
parent1_index = i%parents.shape[0]
parent2_index = (i+1)%parents.shape[0]
offsprings[i,0:crossover_point] = parents[parent1_index,0:crossover_point]
offsprings[i,crossover_point:] = parents[parent2_index,crossover_point:]
i=+1
return offsprings

Fungsi Mutation

def mutation(offsprings):
mutants = np.empty((offsprings.shape))
mutation_rate = 0.4
for i in range(mutants.shape[0]):
random_value = rd.random()
mutants[i,:] = offsprings[i,:]
if random_value > mutation_rate:
continue
int_random_value = randint(0,offsprings.shape[1]-1)
if mutants[i,int_random_value] == 0 :
mutants[i,int_random_value] = 1
else :
mutants[i,int_random_value] = 0
return mutants

Fungsi Optimasi

def optimize(time, value, population, pop_size, num_generations, threshold):


parameters, fitness_history = [], []
num_parents = int(pop_size[0]/2)
num_offsprings = pop_size[0] - num_parents
for i in range(num_generations):
fitness = cal_fitness(time, value, population, threshold)
fitness_history.append(fitness)
parents = selection(fitness, num_parents, population)
offsprings = crossover(parents, num_offsprings)
mutants = mutation(offsprings)
population[0:parents.shape[0], :] = parents
population[parents.shape[0]:, :] = mutants

print('Last generation: \n{}\n'.format(population))


fitness_last_gen = cal_fitness(time, value, population, threshold)
print('Fitness of the last generation: \n{}\n'.format(fitness_last_gen))
max fitness = np where(fitness last gen == np max(fitness last gen))
https://colab.research.google.com/drive/1sq_BI6qyZoC_WoUU2QudUHXR9JxsLZwj#scrollTo=3ECwi_-uPzYk&printMode=true 2/4
6/2/2020 GA.ipynb - Colaboratory
max_fitness = np.where(fitness_last_gen == np.max(fitness_last_gen))
parameters.append(population[max_fitness[0][0],:])
return parameters, fitness_history

Pemanggilan fungsi optimasi dan menampilkan hasil

parameters, fitness_history = optimize(time, value, initial_population, pop_size, num_generations, time_threshold)


print('The optimized parameters for the given inputs are: \n{}'.format(parameters))
selected_items = item_number * parameters
print('\nSelected items that will maximize the time use:')
for i in range(selected_items.shape[1]):
if selected_items[0][i] != 0:
print('{}\n'.format(selected_items[0][i]))

Last generation:
[[1 1 0 1 1]
[1 1 0 1 1]
[1 1 0 1 1]
[1 1 0 1 1]
[1 1 0 1 1]
[1 1 0 0 1]
[1 1 0 1 1]
[1 1 0 1 1]]

Fitness of the last generation:


[33 33 33 33 33 26 33 33]

The optimized parameters for the given inputs are:


[array([1, 1, 0, 1, 1])]

Selected items that will maximize the time use:


1

Menampilkan hasil berupa gra k tness di tiap generasi

fitness_history_mean = [np.mean(fitness) for fitness in fitness_history]


fitness_history_max = [np.max(fitness) for fitness in fitness_history]
plt.plot(list(range(num_generations)), fitness_history_mean, label = 'Mean Fitness')
plt.plot(list(range(num_generations)), fitness_history_max, label = 'Max Fitness')
plt.legend()
plt.title('Fitness through the generations')
plt.xlabel('Generations')
plt.ylabel('Fitness')
plt.show()
print(np.asarray(fitness_history).shape)

(50, 8)

https://colab.research.google.com/drive/1sq_BI6qyZoC_WoUU2QudUHXR9JxsLZwj#scrollTo=3ECwi_-uPzYk&printMode=true 3/4
6/2/2020 GA.ipynb - Colaboratory

https://colab.research.google.com/drive/1sq_BI6qyZoC_WoUU2QudUHXR9JxsLZwj#scrollTo=3ECwi_-uPzYk&printMode=true 4/4
Kesimpulan dan Saran

A. Kesimpulan

Berdasarkan hasil simulasi yang dilakukan, maka dapat disimpulkan:

1. Simulasi yang dilakukan dengan parameter yang telah ditentukan sebelumnya

mengahasilkan keluaran item pekerjaan yang dilaksanakan untuk

memaksimalkan waktu yang diberikan. Adapun value maksimal yang

didapatkan adalah 33, sedangkan item yang dilakukan yaitu item 1,2,4 dan 5.

2. Simulasi yang dilakukan sesuai dengan output yang diharapkan.

3. Knapsack problem dengan Genetic Algorithm dapat diimplementasikan dalam

penyelesaian masalah optimasi pemeliharaan.

B. Saran

Berikut adalah beberapa saran untuk pengembangan berikutnya:

1. Membuat suatu program yang memiliki user interface sehingga optimasi dapat

dilakukan dengan parameter yang berubah-ubah dan dapat dilakukan oleh siapa

saja.

2. Melakukan percobaan dalam menentukan parameter jumlah populasi,

probabilitas crossover dan mutation serta jumlah generasi agar mendapatkan

hasil optimasi lebih cepat.


REFERENSI

Satvik Tiwari. (2019, 28 April). Genetic Algorithm: Part 3 — Knapsack Problem. Diakses pada
1 Juni 2020, dari https://medium.com/koderunners/genetic-algorithm-part-3-knapsack-
problem-b59035ddd1d6

Binus. (2018, 8 Desember). Genetic Algorithm. Diakses pada 1 Juni 2020, dari
https://socs.binus.ac.id/2018/12/08/genetic-algorithm/

Yudi Agusta. (2010, 03 Maret). Genetic Algorithm. Diakses pada 1 Juni 2020, dari
https://yudiagusta.wordpress.com/2010/03/19/genetic-algorithm/

Anda mungkin juga menyukai