Deteksi Keamanan Pola menggunakan AIS (Artificial Immune System) dengan teknik Negative Selection 8


Algoritma AIS (Artificial Immune System) dengan teknik Negative Selection adalah salah satu algoritma yang dapat digunakan untuk pengambilan keputusan. Contoh yang dibahas kali ini adalah mengenai penentuan pola angka baru apakah termasuk pola yang aman atau tidak.
Algoritma ini merupakan variasi dari Algoritma AIS (Artificial Immune System) yang sudah pernah dibahas sebelumnya. Pada contoh tersebut, algoritma ini digunakan untuk mengoptimasi sebuah permasalahan. Pada kali ini akan digunakan algoritma yang sama dengan algoritma tersebut, tetapi dengan teknik perhitungan yang berbeda, yaitu teknik Negative Selection.



Diasumsikan ada 5 pola angka yang diketahui, yaitu pola angka 1 sampai dengan 5
Diasumsikan 5 pola angka tersebut adalah sebagai berikut:

1111111111111111
11111111
111111111111111
11111
1111111111111111111

Contoh data awal adalah sebagai berikut:

Dim contohData As Integer()() = New Integer(4)() {}
'Pola Angka 1
contohData(0) = New Integer() _
	{0, 1, 1, 0, 0, _
	1, 0, 1, 0, 0, _
	0, 0, 1, 0, 0, _
	0, 0, 1, 0, 0, _
	1, 1, 1, 1, 1}

'Pola Angka 2
contohData(1) = New Integer() _
	{0, 1, 1, 1, 0, _
	1, 0, 0, 0, 1, _
	0, 0, 1, 1, 0, _
	0, 1, 0, 0, 0, _
	1, 1, 1, 1, 1}

'Pola Angka 3
contohData(2) = New Integer() _
	{1, 1, 1, 1, 0, _
	0, 0, 0, 0, 1, _
	1, 1, 1, 1, 0, _
	0, 0, 0, 0, 1, _
	1, 1, 1, 1, 0}

'Pola Angka 4
contohData(3) = New Integer() _
	{0, 0, 0, 1, 1, _
	0, 0, 1, 0, 1, _
	0, 1, 1, 1, 1, _
	0, 0, 0, 0, 1, _
	0, 0, 0, 0, 1}

'Pola Angka 5
contohData(4) = New Integer() _
	{1, 1, 1, 1, 1, _
	1, 0, 0, 0, 0, _
	1, 1, 1, 1, 0, _
	0, 0, 0, 0, 1, _
	1, 1, 1, 1, 0}



Selanjutnya ada sebuah deretan pola baru yang ingin diketahui hasilnya
Maka tentukan apakah deretan pola baru ini adalah pola yang aman atau tidak
Diasumsikan deretan pola baru adalah sebagai berikut:

11111111111111111
111111111
11111111111111
11111111
11111111111111

Contoh data baru yang akan dihitung adalah sebagai berikut:

Dim dataBaru As Integer()() = New Integer(4)() {}
'Pola Baru 1 = Pola angka 6
dataBaru(0) = New Integer() _
	{0, 1, 1, 1, 0, _
	1, 0, 0, 0, 0, _
	1, 1, 1, 1, 0, _
	1, 0, 0, 0, 1, _
	1, 1, 1, 1, 0}

'Pola Baru 2 = Pola angka 7
dataBaru(1) = New Integer() _
	{1, 1, 1, 1, 1, _
	0, 0, 0, 1, 1, _
	0, 0, 1, 0, 0, _
	0, 0, 1, 0, 0, _
	0, 0, 1, 0, 0}

'Pola Baru 3 = Pola angka 8
dataBaru(2) = New Integer() _
	{0, 1, 1, 1, 0, _
	1, 0, 0, 0, 1, _
	0, 1, 1, 1, 0, _
	1, 0, 0, 0, 1, _
	0, 1, 1, 1, 0}

'Pola Baru 4 = Pola angka 9
dataBaru(3) = New Integer() _
	{0, 1, 1, 1, 0, _
	1, 0, 0, 0, 1, _
	0, 1, 1, 1, 1, _
	0, 0, 0, 0, 1, _
	0, 1, 1, 1, 0}

'Pola Baru 5 = Pola angka 0
dataBaru(4) = New Integer() _
	{0, 1, 1, 1, 0, _
	1, 0, 0, 0, 1, _
	1, 0, 0, 0, 1, _
	1, 0, 0, 0, 1, _
	0, 1, 1, 1, 0}



Sebelum masuk kedalam langkah-langkah pembahasan algoritma, ada beberapa konstanta atau parameter yang harus diketahui, yaitu:
* Tentukan jumlah angka (bit) dalam setiap pola angka
Diasumsikan dalam kasus ini, jumlah angka dalam setiap pola angka ada 25 buah, karena pada masing-masing pola angka terdiri dari 25 angka

Const jumlahBitPerPola As Integer = 25

* Tentukan jumlah angka (bit) dalam setiap antibodi
Antibodi ini nantinya yang akan menentukan deretan pola angka termasuk aman atau tidak
Diasumsikan dalam kasus ini, jumlah angka dalam setiap setiap antibodi ada 6 buah

Const jumlahBitDalamAntibodi As Integer = 6

* Tentukan jumlah limfosit yang dibuat
Masing-masing Limfosit akan mengandung antibodi dengan pola tertentu
Diasumsikan dalam kasus ini, jumlah limfosit adalah 4 buah

Const jumlahLimfosit As Integer = 4

* Tentukan batas stimulasi
stimulasi adalah jumlah berapa kali antibodi mendeteksi pola angks yang cocok dengan dirinya
Apabila deretan pola angka sudah melebihi batas stimulasi, maka deretan pola tersebut dikatakan tidak aman
Diasumsikan dalam kasus ini, batas stimulasi adalah 3 kali

Const batasStimulasi As Integer = 3

Langkah-langkah penggunaan algoritma ini adalah

1. Lakukan proses pembuatan limfosit dengan teknik Negative Selection
Antibodi yang dibuat adalah antibodi dengan pola yang tidak terdapat pada contoh pola angka 1 sampai dengan 5

1a. Lakukan pembuatan antibodi dengan mengambil nilai bit (0 atau 1) secara acak
Kemudian masukkan antibodi ini kedalam calon limfosit

Dim set1(jumlahBitDalamAntibodi - 1) As Boolean
For i = 0 To jumlahBitDalamAntibodi - 1
	Dim b As Integer = rnd.Next(0, 2)
	set1(i) = If(b = 0, False, True)
Next i
Dim antibodi As BitArray = New BitArray(set1)
Dim calonLimfosit As New Limfosit(antibodi)

* Agar dapat menjalankan skrip diatas, maka diperlukan sebuah Class Limfosit untuk menampung semua data seperti antibodi yang digunakan, umur dan jumlah stimulasi yang telah dilakukan. Deklarasi Class Limfosit adalah sebagai berikut:

Public Class Limfosit
    Public antibodi As BitArray         'mendeteksi pola yang cocok dengan dirinya
    Public tabelPencarian() As Integer  'mempercepat pendeteksian
    Public umur As Integer              'menentukan pembuatan ulang limfosit, tetapi dalam kasus ini tidak digunakan
    Public stimulasi As Integer         'mengetahui berapa banyak stimulasi yang sudah terjadi

    Public Sub New(ByVal antibodi As BitArray)
        Me.antibodi = New BitArray(antibodi)

        Dim tabelPencarian(antibodi.Length - 1) As Integer
        Dim pos As Integer = 2
        Dim cnd As Integer = 0
        tabelPencarian(0) = -1
        tabelPencarian(1) = 0
        Do While pos < antibodi.Length
            If antibodi(pos - 1) = antibodi(cnd) Then
                cnd = cnd + 1
                tabelPencarian(pos) = cnd
                pos = pos + 1
            ElseIf cnd > 0 Then
                cnd = tabelPencarian(cnd)
            Else
                tabelPencarian(pos) = 0
                pos = pos + 1
            End If
        Loop
        Me.tabelPencarian = tabelPencarian

        Me.umur = 0
        Me.stimulasi = 0
    End Sub

	. . .
End Class

1b. Dapatkan nilai hash pada antibodi pada calon limfosit tersebut
Jumlah maksimal bit yang dapat digunakan adalah 32 bit, diluar batas itu maka harus menggunakan cara lain

Dim singleInt(0) As Integer
antibodi.CopyTo(singleInt, 0)
Dim hash As Integer = singleInt(0)

1c. Lakukan pendeteksian apakah contoh pola angka diatas termasuk dalam pola antibodi acak
Jika ada yang cocok dengan contoh pola angka, maka tolak limfosit ini dan ulangi langkah perhitungan dari awal
Jika tidak ada yang cocok dengan contoh pola angka, maka masukkan calon limfosit ini ke dalam daftar limfosit

Dim isTerdeteksi As Boolean = False
For i = 0 To selfSet.Count - 1
	If calonLimfosit.isTerdeteksi(selfSet(i)) = True Then
		isTerdeteksi = True
		Exit For
	End If
Next i

If Not isTerdeteksi AndAlso daftarHash.ContainsKey(hash) = False Then
	daftarLimfosit.Add(calonLimfosit)
	daftarHash.Add(hash, True)
End If

* Gunakan fungsi ini untuk mendeteksi apakah pola antibodi terdapat dalam pola angka input
Nilai pengembalian bernilai True apabila pola antibodi terdapat dalam pola angka input
Teknik pendeteksian yang digunakan adalah teknik Knuth-Morris-Pratt atau disebut juga dengan r-chunks matching
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini

Public Function isTerdeteksi(ByVal pola As BitArray) As Boolean
	Dim m As Integer = 0
	Dim i As Integer = 0
	Do While m + i < pola.Length
		If Me.antibodi(i) = pola(m + i) Then
			If i = antibodi.Length - 1 Then
				Return True
			End If
			i = i + 1
		Else
			m = m + i - Me.tabelPencarian(i)
			If tabelPencarian(i) > -1 Then
				i = tabelPencarian(i)
			Else
				i = 0
			End If
		End If
	Loop
	Return False
End Function

2. Lakukan perhitungan pendeteksian deretan pola sebanyak jumlah pola data baru dan selama belum ada limfosit yang terstimulasi

2a. Lakukan perulangan pada setiap limfosit
Apabila pola data baru terdeteksi oleh limfosit tertentu, maka tambahkan nilai stimulasi nya sebanyak 1 kali

If daftarLimfosit(i).isTerdeteksi(newSet(iterasi)) = True Then
	daftarLimfosit(i).stimulasi = daftarLimfosit(i).stimulasi + 1

2b. Apabila nilai stimulasi sebuah limfost sudah melebih batas nilai stimulasi, maka hentikan perhitungan

If daftarLimfosit(i).stimulasi >= batasStimulasi Then
	isTerstimulasi = True

3. Catat kesimpulan yang didapatkan apakah ada limfosit yang terstimulasi atau tidak
Jika ada limfosit yang terstimulasi, maka deretan pola angka baru termasuk pola angka yang tidak aman
Jika tidak ada limfosit yang terstimulasi, maka deretan pola angka baru termasuk pola angka yang aman

If isTerstimulasi Then
	Console.WriteLine("Karena ada Limfosit yang terstimulasi, maka deretan pola angka baru termasuk pola angka yang tidak aman")
Else
	Console.WriteLine("Karena tidak ada Limfosit yang terstimulasi, maka deretan pola angka baru termasuk pola angka yang aman")
End If

Hasil akhir adalah: (klik untuk perbesar gambar)

cmd58

Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

8 pemikiran di “Deteksi Keamanan Pola menggunakan AIS (Artificial Immune System) dengan teknik Negative Selection

    • pip Penulis

      Jika yang anda maksud adalah waktu proses perhitungan seperti 5 detik atau 10 detik, menurut saya hal itu dapat dilakukan tidak dalam konteks algoritma apapun tetapi dilakukan sebelum dan setelah proses perhitungan algoritma dijalankan. Pengecekan nilai akurasi juga dapat dilakukan pada algoritma optimasi apapun setelah proses pelatihan selesai.

    • pip Penulis

      Saya tidak memiliki contoh implementasi dalam bahasa lain, akan tetapi keseluruhan skrip implementasi untuk algoritma ini dirancang secara murni dan tidak bergantung pada fungsi yang disediakan pada perangkat lunak tertentu, sehingga tentunya dapat dikonversikan ke dalam bahasa pemrograman lain setelah anda memahami konsep dari algoritma tersebut.

    • pip Penulis

      Mohon maaf riset terhadap algoritma ini saya lakukan beberapa tahun yang lalu sehingga saya sudah tidak memiliki referensi yang dapat saya bagikan. Harap maklum.