0% menganggap dokumen ini bermanfaat (0 suara)
7 tayangan4 halaman

Algoritma Genetika dengan Python

Dokumen ini membahas algoritma genetika (GA) untuk mencari solusi optimal dari suatu fungsi objektif. GA melakukan inisialisasi kromosom secara random, evaluasi untuk menentukan nilai fitness dan probabilitas, serta operasi-operasi genetika seperti seleksi, crossover, dan mutasi untuk menghasilkan populasi generasi berikutnya hingga tercapai kondisi berhenti.

Diunggah oleh

kpmmultimedia5
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
7 tayangan4 halaman

Algoritma Genetika dengan Python

Dokumen ini membahas algoritma genetika (GA) untuk mencari solusi optimal dari suatu fungsi objektif. GA melakukan inisialisasi kromosom secara random, evaluasi untuk menentukan nilai fitness dan probabilitas, serta operasi-operasi genetika seperti seleksi, crossover, dan mutasi untuk menghasilkan populasi generasi berikutnya hingga tercapai kondisi berhenti.

Diunggah oleh

kpmmultimedia5
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd

import os

import math # modul math berisi fungsi matematika seerti pi atau log
import random # modul import angka random tipe data float renatng 0,0 hingga 1,0
import numpy as np # library python yang digunakan untuk proses komputasi
numerik

class GA:
populasi = 6
gen = ["a", "b", "c", "d"]
batas_nilai = {
'max': 10,
'min': 0
}
co = 50/100
mutasi = 10/100

jumlah_gen = 24

gen_next = [Link](4) # Arrange digunakan untuk membuat array


stop = False

# Inisialisasi chromosome secara random


def __init__(self):
self.first_chrom = [Link]( # randint() menghasilkan angka
acak dengan tipe data integer yang berada pada rentang yang telah ditentukan.
low=self.batas_nilai['min'], high=self.batas_nilai['max'],
size=([Link], len([Link])))
print("Inisialisasi")
print(self.first_chrom)
print("****************")
print(" ")
print("Evaluasi")

# Evaluasi chromosome
def Evaluasi(self, chromosome, generasi):
# mencari fungsi objektif
print("Generasi["+str(generasi+1)+"]")
# len() digunakan untuk mengidentifikasi dan mengetahui seberapa panjang
jumlah item atau anggota pada suatu objek.
jumlah_chromosome = len(chromosome)
# Arrange digunakan untuk membuat array
objektif = [Link](jumlah_chromosome)
# Fungsi dtype() digunakan untuk membuat objek tipe data.
fitness = [Link](jumlah_chromosome, dtype='f')
# Perulangan Fungsi Objektif
# range() merupakan fungsi yang menghasilkan list. Fungsi ini akan
menciptakan sebuah list baru dengan rentang nilai tertentu.
for x in range(len(chromosome)):
# fungsi objektif
# fo = fungsi objektif(chromosome[x])=o[x]
fungsi_obj = abs( # abs() digunakan untuk mengembalikan nilai
absolut dari suatu angka/bilangan.
(chromosome[x][0]+2*chromosome[x][1]+3*chromosome[x]
[2]+4*chromosome[x][3])-30)
objektif[x] = fungsi_obj

# Seleksi Chromosome dan mencari fitness


hasil_fitness = 1/(fungsi_obj+1)

fitness[x] = hasil_fitness
if(hasil_fitness == 1):
[Link] = True
print("Chromosome ke - {0} : {1}, Fitness = {2}".format( #
format() digunakan untuk mengatur format string yang nantinya akan dicetak atau
ditampilkan ke layar.
x+1, np.array2string(chromosome[x], separator=','),
hasil_fitness)) # fungsi array2string digunakan untuk mendapatkan representasi
string dari array
print(objektif)

# Probabilitas
probabilitas = [Link](jumlah_chromosome, dtype='f')
total_fitness = [Link]() # rumus total fitness
probabilitas = fitness/total_fitness # rumus mencari probabilitas
print("Total Fitness = {}".format(str(total_fitness)))
print("Rata-rata Fitness = {}".format(str([Link](fitness))))
print("Probabilitas = {}".format(
np.array2string(probabilitas, separator=',')))
print("Probabilitas Terbesar = {}, Pada Chromosome ke - {}".format(
probabilitas[[Link]()], str([Link]()+1)))
# argmax adalah fungsi yang memberikan indeks angka terbesar di baris atau kolom
yang diberikan dan baris atau kolom

print("Chromosome yang mungkin terpilih pada generasi selanjutnya =


{}".format(
np.array2string(chromosome[[Link]()], separator=',')))
self.gen_next = chromosome[[Link]()]
print(" ")
# Mencari Nilai Kumulatif (C)
Cum = [Link](jumlah_chromosome, dtype='f')
total_x = 0
for x in range(len(probabilitas)):
total_x += probabilitas[x]
Cum[x] = total_x

# Putar roulette wheel sebanyak populasi (R)


R = [Link](len(fitness))
chromosome_baru = [Link](
jumlah_chromosome*len([Link])).reshape(jumlah_chromosome,
len([Link])) # Fungsi reshape digunakan untuk membuat atau merubah baris kolom

# Mencari Chromosome baru dari roulette wheel


for y in range(len(R)):
for k in range(len(chromosome_baru)):
if(R[y] < Cum[0]):
chromosome_baru[y] = chromosome[0]
elif((Cum[k-1] < R[y]) & (R[y] < Cum[k])):
chromosome_baru[y] = chromosome[k]

# Mencari crossover(co) Chromosome


R = [Link](jumlah_chromosome)
index_chrome_induk = []
for p in range(len(R)):
if(R[p] < [Link]):
index_chrome_induk.append(p)

# Menentukan Posisi crossover(co)


posisi_cross = [Link](low=1, high=len( # randint()
menghasilkan angka acak dengan tipe data integer yang berada pada rentang yang
telah ditentukan.
[Link]), size=len(index_chrome_induk))

# Menentukan Posisi Cut Point co


offspring = [Link](len([Link])*len(index_chrome_induk)
).reshape(len(index_chrome_induk), len([Link]))
# Fungsi reshape digunakan untuk membuat atau merubah baris kolom
for i_parent in range(len(index_chrome_induk)):
index_chrome_1 = index_chrome_induk[i_parent]
if(i_parent == len(index_chrome_induk)-1):
index_chrome_2 = index_chrome_induk[0]
else:
index_chrome_2 = index_chrome_induk[i_parent+1]
for p in range(len(chromosome_baru[index_chrome_1])):
if(p >= posisi_cross[i_parent]):
offspring[i_parent][p] = chromosome_baru[index_chrome_2][p]
else:
offspring[i_parent][p] = chromosome_baru[index_chrome_1][p]
for x in range(len(offspring)):
chromosome_baru[index_chrome_induk[x]] = offspring[x]

# Mutasi Chromosome
jumlah_gen = len(chromosome) * len(chromosome[0])
jumlah_mutasi = [Link] * jumlah_gen # rumus menghitung jumlah
mutasi
jumlah_mutasi = int(jumlah_mutasi)

random_i_mutasi = [Link](
low=0, high=jumlah_gen, size=jumlah_mutasi)

for x in range(len(random_i_mutasi)):
index_mutasi = random_i_mutasi[x]
banyak_chromosome = len(chromosome)
banyak_gen = len(chromosome[0])
random_value = [Link]( # randint() menghasilkan angka acak
dengan tipe data integer yang berada pada rentang yang telah ditentukan.
self.batas_nilai['min'], self.batas_nilai['max'])
if(index_mutasi <= banyak_gen):
chromosome_baru[0][index_mutasi-1]
else:
posisi_y = index_mutasi/banyak_gen
posisi_y = int(posisi_y)
posisi_x = index_mutasi % banyak_gen
chromosome_baru[posisi_y][posisi_x] = random_value
return chromosome_baru

def do_now(self):
chromosome_current = self.first_chrom
for generasi in range(0, self.jumlah_gen):
if([Link] != True):
chromosome_current = [Link](
chromosome_current, generasi)
print(self.gen_next)

# Run Class
run = GA()
run.do_now()

Anda mungkin juga menyukai