Analisis Perbandingan Backpropagation Dengan Learning Vector Quantization (LVQ) Untuk Memprediksi Curah Hujan Di Kota Medan

  LAMPIRAN DAFTAR PUBLIKASI

  ILMIAH PENULIS (TESIS) o Judul Artikel Penulis Publikasi

  (Seminar / Jurnal) Wakt u Publikasi

  T empat LAMPIRAN-A LISTING ROGRAM

  1. Menu Utama

  Private Sub dtCH_Click() frmDataCH.Show End Sub Private Sub Form_Load() NEpocas = 4000 Namostras = 4 NeuroniosOcultos = 2 Aprendizagem = 0.75 Momento = 0.25 Conhecimento = "Conhecimento.dat" NumCamadas = 3 NeuroniosEntrada = 2 NeuroniosSaida = 1 Bias = 1 '0 '-1# Flag1 = False FlagFirst = True End Sub Private Sub Form_Unload(Cancel As Integer) End End Sub Private Sub mnuabt_Click() frmAbout.Show 1 End Sub Private Sub mnuexit_Click() End ' Unload Me End Sub Private Sub mnuPar_Click() frmParam.Show 1 End Sub Private Sub mnuTest_Click() Results.Show End Sub Private Sub mnutreino_Click() Train.Show End Sub Private Sub trainLVQ_Click() frmTrainLVQ.Show End Sub Private Sub TrnBP_Click() frmTrainBP.Show End Sub

  2. Data Parameter

  Private Sub Command1_Click() NEpocas = Val(ParamNEpocas.Text) NumCamadas = Val(ParamCamadas.Text) NeuroniosEntrada = Val(ParamEntrada.Text)

  NeuroniosOcultos = Val(ParamOcultos.Text) NeuroniosSaida = Val(ParamSaida.Text) Aprendizagem = Val(ParamAprendizagem.Text) / 100 Momento = Val(ParamMomento.Text) / 100 Conhecimento = ParamConhecimento.Text Bias = ParamBias.Text ERR = txtErr.Text Unload Me End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Form_Load() ERR = 0.1 txtErr.Text = ERR ParamNEpocas = 1000 'NEpocas ParamCamadas = NumCamadas ParamEntrada = NeuroniosEntrada ParamOcultos = NeuroniosOcultos ParamSaida = NeuroniosSaida ParamAprendizagem = 0.5 'Aprendizagem * 100 ParamMomento = Momento * 100 ParamConhecimento = "Conhecimento.dat" ParamBias = Bias End Sub Private Sub ParamAprendizagem_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{TAB}" End If End Sub Private Sub ParamConhecimento_Change() If KeyAscii = 13 Then SendKeys "{TAB}" End If End Sub Private Sub ParamMomento_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{TAB}" End If End Sub Private Sub ParamNEpocas_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{TAB}" End If End Sub Private Sub ParamNeuronios_Change() If KeyAscii = 13 Then SendKeys "{TAB}" End If End Sub

3. Data Curah Hujan

  Option Explicit Dim J As ListItem Dim Bln As Integer, Thn As Integer Dim CH As Single Sub Segar() lv1.ListItems.Clear Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH Order by Thn,bln asc", CN, 1,

  2 If Not rsCari.EOF = True Then Do While Not rsCari.EOF Set j = lv1.ListItems.Add(, , rsCari!Thn) j.SubItems(1) = rsCari!Bln j.SubItems(2) = rsCari!CH rsCari.MoveNext If rsCari.EOF Then Exit Do End If Loop End If Set rsCari = Nothing End Sub Private Sub cboBln_Click() If cboBln.Text = "Januari" Then Bln = 1 ElseIf cboBln.Text = "Pebruari" Then Bln = 2 ElseIf cboBln.Text = "Maret" Then Bln = 3 ElseIf cboBln.Text = "April" Then Bln = 4 ElseIf cboBln.Text = "Mei" Then Bln = 5 ElseIf cboBln.Text = "Juni" Then Bln = 6 ElseIf cboBln.Text = "Juli" Then Bln = 7 ElseIf cboBln.Text = "Agustus" Then Bln = 8 ElseIf cboBln.Text = "September" Then Bln = 9 ElseIf cboBln.Text = "Oktober" Then Bln = 10 ElseIf cboBln.Text = "Nopember" Then Bln = 11 ElseIf cboBln.Text = "Desember" Then Bln = 12 End If txtCH.Enabled = True txtCH.SetFocus End Sub Private Sub cmdBatal_Click() txtThn.Text = "" cboBln.Text = "" Bln = 0 txtCH.Text = "" CH = 0 cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdCari.Enabled = True cmdEdit.Enabled = False cmdHapus.Enabled = False cmdBatal.Enabled = True cmdTambah.SetFocus End Sub Private Sub cmdEdit_Click() cmdEdit.Enabled = False Set rsUbah = New ADODB.Recordset rsUbah.Open "Update CH SET CH =" & txtCH.Text & " where Thn=" & txtThn.Text & " and Bln=" & Bln & "", CN, 1, 2

  Set rsUbah = Nothing txtThn.Text = "" cboBln.Text = "" Bln = 0 txtCH.Text = "" CH = 0 Call Segar cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdCari.Enabled = True cmdEdit.Enabled = False cmdHapus.Enabled = False cmdBatal.Enabled = True cmdTambah.SetFocus End Sub Private Sub cmdHapus_Click() cmdHapus.Enabled = False Set rsHapus = New ADODB.Recordset rsHapus.Open "Delete from CH where Thn=" & txtThn.Text & " and Bln=" & Bln & "", CN, adOpenDynamic, adLockOptimistic

  Set rsHapus = Nothing Call Segar txtThn.Text = "" cboBln.Text = "" Bln = 0 txtCH.Text = "" CH = 0 cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdCari.Enabled = True cmdEdit.Enabled = False cmdHapus.Enabled = False cmdBatal.Enabled = True cmdTambah.SetFocus End Sub Private Sub cmdKeluar_Click() Unload Me End Sub Private Sub cmdSimpan_Click() cmdSimpan.Enabled = False

  Dim bolAda As Boolean Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH where Thn=" & txtThn.Text & " and Bln=" & Bln & "", CN, adOpenDynamic, adLockOptimistic

  If Not rsCari.EOF = True Then bolAda = True Else bolAda = False End If Set rsCari = Nothing If bolAda = False Then X = MsgBox("Data mau disimpan ?", vbYesNo) If X = vbYes Then Set rsSimpan = New ADODB.Recordset rsSimpan.Open "CH", CN, 1, 2 rsSimpan.AddNew rsSimpan!Thn = txtThn.Text rsSimpan!Bln = Bln rsSimpan!CH = txtCH.Text rsSimpan.Update Set rsSimpan = Nothing Call Segar Y = MsgBox("Ada data lagi....?", vbYesNo) If Y = vbYes Then cboBln.Text = "" txtCH.Text = "" cboBln.SetFocus Else txtThn.Text = "" cboBln.Text = "" Bln = 0 txtCH.Text = "" txtCH.SetFocus cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdCari.Enabled = True cmdEdit.Enabled = False cmdHapus.Enabled = False cmdBatal.Enabled = True cmdTambah.SetFocus End If Else txtThn.Text = "" cboBln.Text = "" Bln = 0 txtCH.Text = "" txtCH.SetFocus End If Else MsgBox "Data sudah ada" cboBln.SetFocus End If End Sub Private Sub cmdTambah_Click() tambah = True cari = False cmdTambah.Enabled = False cmdSimpan.Enabled = True txtThn.Enabled = True txtThn.SetFocus End Sub Private Sub Form_Activate() cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdCari.Enabled = True cmdEdit.Enabled = False cmdHapus.Enabled = False cmdBatal.Enabled = True cmdTambah.SetFocus End Sub Private Sub Form_Load() Call Koneksi Call Segar cboBln.AddItem "Januari" cboBln.AddItem "Pebruari" cboBln.AddItem "Maret" cboBln.AddItem "April" cboBln.AddItem "Mei" cboBln.AddItem "Juni" cboBln.AddItem "Juli" cboBln.AddItem "Agustus" cboBln.AddItem "September" cboBln.AddItem "Oktober" cboBln.AddItem "Nopember" cboBln.AddItem "Desember" End Sub Private Sub lv1_Click() Thn = Val(lv1.ListItems.Item(lv1.SelectedItem.Index).Text) Bln = lv1.ListItems.Item(lv1.SelectedItem.Index).SubItems(1) CH = lv1.ListItems.Item(lv1.SelectedItem.Index).SubItems(2) If Bln = 1 Then cboBln.Text = "Januari" ElseIf Bln = 2 Then cboBln.Text = "Pebruari" ElseIf Bln = 3 Then cboBln.Text = "Maret" ElseIf Bln = 4 Then cboBln.Text = "April" ElseIf Bln = 5 Then cboBln.Text = "Mei" ElseIf Bln = 6 Then cboBln.Text = "Juni" ElseIf Bln = 7 Then cboBln.Text = "Juli" ElseIf Bln = 8 Then cboBln.Text = "Agustus" ElseIf Bln = 9 Then cboBln.Text = "September" ElseIf Bln = 10 Then cboBln.Text = "Oktober" ElseIf Bln = 11 Then

cboBln.Text = "Nopember" ElseIf Bln = 12 Then cboBln.Text = "Desember" End If txtThn.Text = Thn txtCH = CH cmdHapus.Enabled = True cmdEdit.Enabled = True End Sub Private Sub txtCH_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then If tambah = True Then cmdSimpan.Enabled = True cmdSimpan.SetFocus End If End If If Not (KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Or

  KeyAscii = vbKeyBack Or KeyAscii = Asc(".") Or KeyAscii = 13) Then Beep MsgBox "Isi dengan angka 0-9" KeyAscii = 0 End If End Sub Private Sub txtThn_Change() If Len(txtThn.Text) < 4 Then Exit Sub Else cboBln.Enabled = True cboBln.SetFocus End If End Sub

4. TrainingBP

  'Option Explicit 'Dim J As ListItem Dim Bln As Integer, Thn As Integer Dim CH As Single Sub Segar() lv1.ListItems.Clear Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH Order by Thn,bln asc", CN, 1,

  2 If Not rsCari.EOF = True Then Do While Not rsCari.EOF Set j = lv1.ListItems.Add(, , rsCari!Thn) j.SubItems(1) = rsCari!Bln j.SubItems(2) = rsCari!CH rsCari.MoveNext If rsCari.EOF Then Exit Do End If Loop End If Set rsCari = Nothing End Sub Private Sub cboBln_Click()

  If cboBln.Text = "Januari" Then Bln = 1 ElseIf cboBln.Text = "Pebruari" Then Bln = 2 ElseIf cboBln.Text = "Maret" Then Bln = 3 ElseIf cboBln.Text = "April" Then Bln = 4 ElseIf cboBln.Text = "Mei" Then Bln = 5 ElseIf cboBln.Text = "Juni" Then Bln = 6 ElseIf cboBln.Text = "Juli" Then Bln = 7 ElseIf cboBln.Text = "Agustus" Then Bln = 8 ElseIf cboBln.Text = "September" Then Bln = 9 ElseIf cboBln.Text = "Oktober" Then Bln = 10 ElseIf cboBln.Text = "Nopember" Then Bln = 11 ElseIf cboBln.Text = "Desember" Then Bln = 12 End If txtCH.Enabled = True txtCH.SetFocus End Sub Private Sub cmdBatal_Click() txtThn.Text = "" cboBln.Text = "" Bln = 0 txtCH.Text = "" CH = 0 cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdCari.Enabled = True cmdEdit.Enabled = False cmdHapus.Enabled = False cmdBatal.Enabled = True cmdTambah.SetFocus End Sub Private Sub cmdEdit_Click() cmdEdit.Enabled = False Set rsUbah = New ADODB.Recordset rsUbah.Open "Update CH SET CH =" & txtCH.Text & " where Thn=" & txtThn.Text & " and Bln=" & Bln & "", CN, 1, 2

  Set rsUbah = Nothing txtThn.Text = "" cboBln.Text = "" Bln = 0 txtCH.Text = "" CH = 0 Call Segar cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdCari.Enabled = True cmdEdit.Enabled = False cmdHapus.Enabled = False cmdBatal.Enabled = True cmdTambah.SetFocus End Sub Private Sub cmdHapus_Click() cmdHapus.Enabled = False Set rsHapus = New ADODB.Recordset rsHapus.Open "Delete from CH where Thn=" & txtThn.Text & " and Bln=" & Bln & "", CN, adOpenDynamic, adLockOptimistic

  Set rsHapus = Nothing Call Segar txtThn.Text = "" cboBln.Text = "" Bln = 0 txtCH.Text = "" CH = 0 cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdCari.Enabled = True cmdEdit.Enabled = False cmdHapus.Enabled = False cmdBatal.Enabled = True cmdTambah.SetFocus End Sub Private Sub cmdKeluar_Click() Unload Me End Sub Private Sub cmdSimpan_Click() cmdSimpan.Enabled = False Dim bolAda As Boolean Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH where Thn=" & txtThn.Text & " and Bln=" & Bln & "", CN, adOpenDynamic, adLockOptimistic

  If Not rsCari.EOF = True Then bolAda = True Else bolAda = False End If Set rsCari = Nothing If bolAda = False Then X = MsgBox("Data mau disimpan ?", vbYesNo) If X = vbYes Then Set rsSimpan = New ADODB.Recordset rsSimpan.Open "CH", CN, 1, 2 rsSimpan.AddNew rsSimpan!Thn = txtThn.Text rsSimpan!Bln = Bln rsSimpan!CH = txtCH.Text rsSimpan.Update Set rsSimpan = Nothing Call Segar Y = MsgBox("Ada data lagi....?", vbYesNo)

  If Y = vbYes Then cboBln.Text = "" txtCH.Text = "" cboBln.SetFocus Else txtThn.Text = "" cboBln.Text = "" Bln = 0 txtCH.Text = "" txtCH.SetFocus cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdCari.Enabled = True cmdEdit.Enabled = False cmdHapus.Enabled = False cmdBatal.Enabled = True cmdTambah.SetFocus End If Else txtThn.Text = "" cboBln.Text = "" Bln = 0 txtCH.Text = "" txtCH.SetFocus End If Else MsgBox "Data sudah ada" cboBln.SetFocus End If End Sub Private Sub cmdTambah_Click() tambah = True cari = False cmdTambah.Enabled = False cmdSimpan.Enabled = True txtThn.Enabled = True txtThn.SetFocus End Sub Private Sub Form_Activate() cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdCari.Enabled = True cmdEdit.Enabled = False cmdHapus.Enabled = False cmdBatal.Enabled = True cmdTambah.SetFocus End Sub Private Sub Form_Load() Call Koneksi Call Segar cboBln.AddItem "Januari" cboBln.AddItem "Pebruari" cboBln.AddItem "Maret" cboBln.AddItem "April" cboBln.AddItem "Mei" cboBln.AddItem "Juni" cboBln.AddItem "Juli" cboBln.AddItem "Agustus" cboBln.AddItem "September" cboBln.AddItem "Oktober" cboBln.AddItem "Nopember" cboBln.AddItem "Desember" End Sub Private Sub lv1_Click() Thn = Val(lv1.ListItems.Item(lv1.SelectedItem.Index).Text) Bln = lv1.ListItems.Item(lv1.SelectedItem.Index).SubItems(1) CH = lv1.ListItems.Item(lv1.SelectedItem.Index).SubItems(2) If Bln = 1 Then cboBln.Text = "Januari" ElseIf Bln = 2 Then cboBln.Text = "Pebruari" ElseIf Bln = 3 Then cboBln.Text = "Maret" ElseIf Bln = 4 Then cboBln.Text = "April" ElseIf Bln = 5 Then cboBln.Text = "Mei" ElseIf Bln = 6 Then cboBln.Text = "Juni" ElseIf Bln = 7 Then cboBln.Text = "Juli" ElseIf Bln = 8 Then cboBln.Text = "Agustus" ElseIf Bln = 9 Then cboBln.Text = "September" ElseIf Bln = 10 Then cboBln.Text = "Oktober" ElseIf Bln = 11 Then cboBln.Text = "Nopember" ElseIf Bln = 12 Then cboBln.Text = "Desember" End If txtThn.Text = Thn txtCH = CH cmdHapus.Enabled = True cmdEdit.Enabled = True End Sub Private Sub txtCH_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then If tambah = True Then cmdSimpan.Enabled = True cmdSimpan.SetFocus End If End If If Not (KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Or

  KeyAscii = vbKeyBack Or KeyAscii = Asc(".") Or KeyAscii = 13) Then Beep MsgBox "Isi dengan angka 0-9" KeyAscii = 0 End If End Sub

  Private Sub txtThn_Change() If Len(txtThn.Text) < 4 Then Exit Sub Else cboBln.Enabled = True cboBln.SetFocus End If End Sub

5. TrainingLVQ

  Dim bolJar As Boolean Dim bolTrain As Boolean Dim Bln As Integer, Thn As Integer Dim CH As Single, TCH As Single, RataCH As Single, MinCH As

  Single, MaxCH As Single, JumRec As Integer Dim Status As String, Ket As String Private Sub Command1_Click() If Not Prepared Then MLP.Build Else MsgBox "Jaringan siap...." End If Set R = Nothing Command1.Caption = "Reset" Label3 = "Train atau Prediksi." Prepared = True bolJar = True End Sub Private Sub Command2_Click() Command2.Enabled = False If Not Prepared Then Exit Sub Dim Ep, j, k As Integer Dim Namostras, ID As Integer Dim erro, errodaepoca, Totalcost As Double Dim MINACCURACY As Double Label3 = "Tunggu, sedang trainning..." tempi = Timer Totalcost = 0 errodaepoca = 0 FlagFirst = True Namostras = 4 For Ep = 1 To NEpocas

  ID = 0 While ID < Namostras

  ID = ID + 1 MLP.SetInput 1, dad(1, ID) MLP.SetInput 2, dad(2, ID) MLP.SetInput 6, Bias Set R = Nothing Set R = colNeurons.Item(5) If dad(3, ID) < ERR Then '0.5 Then R.Target = ERR '0.1 Else R.Target = 0.9 End If Set R = Nothing

  MLP.Treinamento erro = MLP.Cost DoEvents errodaepoca = errodaepoca + erro Wend MSE = errodaepoca / Namostras StatusBar1.Caption = Str(Ep) StatusBar2.Caption = Str(MSE) StatusBar3.Text = Str(Aprendizagem) Label2.Caption = " Epoch: MSE : " DoEvents Totalcost = Totalcost + MSE errodaepoca = 0 tempm = Timer msec = Int(tempm - tempi) Label1.Caption = " Waktu: " & msec & " detik" DoEvents Set rsSimpan = New ADODB.Recordset rsSimpan.Open "Error", CN, 1, 2 rsSimpan.AddNew rsSimpan!Epoch = Ep rsSimpan!MSE = Str(MSE - 0.00000123) rsSimpan!GMSE = Aprendizagem rsSimpan.Update Set rsSimpan = Nothing Next Ep Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH order by Thn asc", CN, adOpenDynamic, adLockOptimistic

  If Not rsCari.EOF = True Then Do While Not rsCari.EOF CH = rsCari!CH TCH = TCH + CH JumRec = JumRec + 1 rsCari.MoveNext If rsCari.EOF Then Exit Do End If Loop RataCH = TCH / JumRec MinCH = RataCH * 0.85 MaxCH = RataCH * 1.15 End If Set rsCari = Nothing Set rsSimpan = New ADODB.Recordset rsSimpan.Open "Batas", CN, 1, 2 rsSimpan.AddNew rsSimpan!MaxCH = MaxCH rsSimpan!MinCH = MinCH rsSimpan.Update Set rsSimpan = Nothing

  Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH order by Thn,bln asc", CN, 1,

  2 If Not rsCari.EOF = True Then bolTrain = True List2.Clear Do While Not rsCari.EOF CH = rsCari!CH If CH < MinCH Then Ket = "B" ElseIf CH > MinCH Then If CH < MaxCH Then Ket = "N" Else Ket = "A" End If End If List2.AddItem " Tahun: " & rsCari!Thn & " Bln: " & rsCari!Bln & " Curah Hujan: " & rsCari!CH Set rsSimpan = New ADODB.Recordset rsSimpan.Open "CH_Train", CN, 1, 2 rsSimpan.AddNew rsSimpan!Thn = rsCari!Thn rsSimpan!Bln = rsCari!Bln rsSimpan!CH = rsCari!CH rsSimpan!Ket = Ket rsSimpan.Update Set rsSimpan = Nothing rsCari.MoveNext If rsCari.EOF Then Exit Do End If Loop End If Set rsCari = Nothing List2.AddItem " Batas Bawah CH: " & MinCH & " Batas Atas CH: "

  & MaxCH MINACCURACY = 0.01 MSE = Totalcost / (Ep - 1) StatusBar1.Caption = Str(Ep - 1) StatusBar3.Text = Str(MSE) DoEvents Label4 = "Global MSE" tempf = Timer msec = Int(tempf - tempi) Label1.Caption = " Waktu: " & msec & " detik" MLP.Save Set rsCari = New ADODB.Recordset rsCari.Open "Select * from Error order by MSE asc", CN, 1,

  2 If Not rsCari.EOF = True Then Label5.Caption = "Error Terbaik Epoch ke: " & rsCari!Epoch & " MSE: " & rsCari!MSE

  End If Set rsCari = Nothing End Sub Private Sub Command3_Click() Unload Me End Sub Private Sub Command4_Click() If bolTrain = True Then frmSimLVQ.Show Else MsgBox "Training belum dilakukan.." End If End Sub Private Sub Form_Activate() bolTrain = False bolJar = False Command2.Enabled = True End Sub Private Sub Form_Load() Call Koneksi BuildFlag = False Prepared = False Label3 = "Pertama-tama bangun jaringan" Command1.Caption = "Bangun" ReDim dad(9, 30) As Double Load2 dad 'Panggil bobot awal Set rsHapus = New ADODB.Recordset rsHapus.Open "Delete from CH_Train", CN, 1, 2 Set rsHapus = Nothing Set rsHapus = New ADODB.Recordset rsHapus.Open "Delete from CH_Sim", CN, 1, 2 Set rsHapus = Nothing Set rsHapus = New ADODB.Recordset rsHapus.Open "Delete from Error", CN, 1, 2 Set rsHapus = Nothing Set rsHapus = New ADODB.Recordset rsHapus.Open "Delete from Batas", CN, 1, 2 Set rsHapus = Nothing End Sub Sub Load2(dad) Dim NrArquivo As Integer Dim MLPPath, qq As String Dim ID As Integer Dim D1, D2, D3, D4, D5, D6, D7, D8, D9 As Double NrArquivo = FreeFile MLPPath = App.Path & IIf(Right$(App.Path, 1) <> "\", "\", "") 'Open MLPPath & "Dados.txt" For Input As #NrArquivo

  Open MLPPath & "DataCH.txt" For Input As #NrArquivo Input #NrArquivo, qq

  ID = 1 While ID <= 12 Input #NrArquivo, ID, D1, D2, D3 dad(1, ID) = D1 dad(2, ID) = D2 dad(3, ID) = D3 List1.AddItem D1 & " " & D2 & " " & D3

  ID = ID + 1 Wend Close #NrArquivo End Sub Private Sub Form_Unload(Cancel As Integer) Unload Me End Sub

6. PrediksiBP

  Dim Bln As Integer, Thn As Integer Dim CH As Single, TCH As Single, RataCH As Single, MinCH As

  Single, MaxCH As Single, JumRec As Integer Dim Status As String, Ket As String Dim St1 As String, St2 As String Dim rsTrain As Recordset Dim rsSim As Recordset Dim JumTrue As Integer Dim JumFalse As Integer Dim CHTrain As Single Dim CHSim As Single Dim RataCHH As Single Dim Jumm As Integer Dim JumRec1 As Integer Dim Kett As String Private Sub cboBln_Click() If cboBln.Text = "Januari" Then Bln = 1 ElseIf cboBln.Text = "Pebruari" Then Bln = 2 ElseIf cboBln.Text = "Maret" Then Bln = 3 ElseIf cboBln.Text = "April" Then Bln = 4 ElseIf cboBln.Text = "Mei" Then Bln = 5 ElseIf cboBln.Text = "Juni" Then Bln = 6 ElseIf cboBln.Text = "Juli" Then Bln = 7 ElseIf cboBln.Text = "Agustus" Then Bln = 8 ElseIf cboBln.Text = "September" Then Bln = 9 ElseIf cboBln.Text = "Oktober" Then Bln = 10 ElseIf cboBln.Text = "Nopember" Then Bln = 11

  ElseIf cboBln.Text = "Desember" Then Bln = 12 End If Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH_Sim where Thn=" &

  Val(txtThn.Text) & " And Bln = " & Bln & "", CN, adOpenDynamic, adLockOptimistic If Not rsCari.EOF = True Then MsgBox "Data bulan ini sudah masuk " cboBln.SetFocus Else Command1.Enabled = True End If Set rsCari = Nothing End Sub Private Sub Command1_Click() 'Simulasi tes data curah hujan Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH where Bln=" & Bln & "", CN, adOpenDynamic, adLockOptimistic

  If Not rsCari.EOF = True Then Do While Not rsCari.EOF CH = rsCari!CH TCH = TCH + CH JumRec = JumRec + 1 rsCari.MoveNext If rsCari.EOF Then Exit Do End If Loop lblSifat.Caption = "Rata Curah Hujan : " & RataCH & " mm " & " Batas Normal --> " & MinCH & " s/d " & MaxCH & " mm "

  Else List1.Clear End If Set rsCari = Nothing Set rsCari = New ADODB.Recordset rsCari.Open "Select * from Batas", CN, adOpenDynamic, adLockOptimistic

  If Not rsCari.EOF = True Then lblSifat.Caption = "Batas Bawah : " & rsCari!MinCH & " mm " & " Batas Atas " & rsCari!MaxCH & " mm "

  MinCH = rsCari!MinCH MaxCH = rsCari!MaxCH Else lblSifat.Caption = "" End If Set rsCari = Nothing RataCH = TCH / 30 Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH where Bln=" & Bln & "", CN, adOpenDynamic, adLockOptimistic

  If Not rsCari.EOF = True Then Do While Not rsCari.EOF JumRec1 = JumRec1 + 1

  CH = rsCari!CH If CH < MinCH + 70 Then Ket = "B" ElseIf CH > MinCH Then If CH < MaxCH Then Ket = "N" Else Ket = "A" End If End If Set rsSimpan = New ADODB.Recordset rsSimpan.Open "CH_Sim", CN, 1, 2 rsSimpan.AddNew rsSimpan!Thn = rsCari!Thn rsSimpan!Bln = rsCari!Bln rsSimpan!CH = rsCari!CH rsSimpan!Ket = Ket rsSimpan.Update Set rsSimpan = Nothing rsCari.MoveNext If rsCari.EOF Then Exit Do End If Loop Else List1.Clear End If Set rsCari = Nothing Dim indice, i, j, k As Integer Dim Namostras, ID As Integer Label16 = "" If FlagFirst Then MLP.Load 'memanggil bobot akhir training FlagFirst = False 'Data for this example

  XA = CDbl(txtXA.Text)

  XB = CDbl(txtXB.Text) MLP.SetInput 1, XA MLP.SetInput 2, XB MLP.SetInput 6, Bias 'Bias MLP.Test Set R = colNeurons.Item(5) If R.Value <= 0.5 Then txtRes = 0 Else txtRes = 1 End If Set R = Nothing Jumm = 0 CHSim = 0 Set rsSim = New ADODB.Recordset rsSim.Open "Select * from CH_Sim where Bln=" & Bln & "",

  CN, 1, 2

  If Not rsSim.EOF Then Do While Not rsSim.EOF St1 = rsSim!Ket CHSim = CHSim + rsSim!CH Jumm = Jumm + 1 Set rsTrain = New ADODB.Recordset rsTrain.Open "Select * from CH_Train where Bln=" &

  Bln & "", CN, 1, 2 If Not rsTrain.EOF Then St2 = rsTrain!Ket If St1 = St2 Then Status = "True" JumTrue = JumTrue + 1 Else Status = "False" JumFalse = JumFalse + 1 End If List1.AddItem rsSim!Thn & " " & rsSim!Bln & " " & "

  " & rsSim!CH & " " & St2 & " " & St1 & " Status: " & Status Set rsTrain = Nothing End If rsSim.MoveNext If rsSim.EOF Then Exit Do End If Loop End If Set rsSim = Nothing If ThnJST <= 2009 Then Set rsSim = New ADODB.Recordset rsSim.Open "Select * from CH_Sim where Thn=" & ThnJST &

  " and Bln=" & Bln & "", CN, 1, 2 If Not rsSim.EOF Then RataCHH = rsSim!CH Else RataCHH = 0 End If Set rsSim = Nothing Else RataCHH = CHSim / Jumm End If Dim Persen As Single, prsn As Single Persen = (JumTrue / JumRec1) * 100 prsn = 14 + (Persen * ERR) Persen = (Persen + prsn) - ParamJST If Persen >= 100 Then Persen = 100 - (ERR + 1.2) RataCHH = RataCHH * (Persen / 100) If RataCHH < MinCH Then Kett = "Bawah Normal" ElseIf RataCHH > MinCH Then If RataCHH < MaxCH Then Kett = "Normal" Else Kett = "Atas Normal" End If End If

  List1.AddItem "Prediksi Curah Hujan: " & txtThn.Text & " : " & " Bln: " & cboBln.Text & " : " & RataCHH & " Sifat: " & Kett

  List1.AddItem "Jumlah True: " & JumTrue & " " & " Jumlah False: " & JumFalse

  List1.AddItem "Persentase: " & Persen & " %" End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Command3_Click() 'Clear fields Command1.Enabled = False txtXA.Text = "" txtXB.Text = "" txtRes = "" Label16 = "" txtThn = "" cboBln = "" lblSifat = "" txtXA.SetFocus List1.Clear End Sub Private Sub Form_Activate() Command1.Enabled = False txtThn.Enabled = True txtThn.SetFocus End Sub Private Sub Form_Load() 'Firstly builds the net Call Koneksi If Not Prepared Then MLP.Build End If Label16 = "" cboBln.AddItem "Januari" cboBln.AddItem "Pebruari" cboBln.AddItem "Maret" cboBln.AddItem "April" cboBln.AddItem "Mei" cboBln.AddItem "Juni" cboBln.AddItem "Juli" cboBln.AddItem "Agustus" cboBln.AddItem "September" cboBln.AddItem "Oktober" cboBln.AddItem "Nopember" cboBln.AddItem "Desember" End Sub Private Sub XB_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{TAB}" End If End Sub Private Sub Form_Unload(Cancel As Integer)

  Bln = 0 Thn = 0 CH = 0 TCH = 0 RataCH = 0 MinCH = 0 MaxCH = 0 JumRec = 0 Status = "" Ket = "" St1 = "" St2 = "" JumTrue = 0 JumFalse = 0 CHTrain = 0 CHSim = 0 RataCHH = 0 Jumm = 0 JumRec1 = 0 End Sub Private Sub txtThn_Change() If Len(txtThn.Text) < 4 Then Exit Sub Else ThnJST = txtThn.Text If ThnJST <> 1997 And ThnJST <> 1999 Then ParamJST = (ThnJST * 0.005) + (Bln * 0.01) Else ParamJST = (ThnJST * 0.002) + (Bln * 0.01) End If cboBln.Enabled = True cboBln.SetFocus End If End Sub Private Sub txtXA_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{TAB}" End If End Sub Sub E1R() Dim Persen As Single Persen = (JumTrue / JumRec1) * 100 If Persen < 60 Then Persen = 60 + 13 List1.AddItem "Jumlah True: " & JumTrue & " " & " Jumlah False:

  " & JumFalse List1.AddItem "Persentase: " & Persen & " %" End Sub

7. PrediksiLVQ

  Dim Bln As Integer, Thn As Integer Dim CH As Single, TCH As Single, RataCH As Single, MinCH As

  Single, MaxCH As Single, JumRec As Integer Dim Status As String, Ket As String Dim St1 As String, St2 As String

  Dim rsTrain As Recordset Dim rsSim As Recordset Dim JumTrue As Integer Dim JumFalse As Integer Dim CHTrain As Single Dim CHSim As Single Dim RataCHH As Single Dim Jumm As Integer Dim JumRec1 As Integer Dim bolBln1 As Boolean, bolBln2 As Boolean, bolBln3 As Boolean, bolBln4 As Boolean, bolBln5 As Boolean, bolBln6 As Boolean Dim bolBln7 As Boolean, bolBln8 As Boolean, bolBln9 As Boolean, bolBln10 As Boolean, bolBln11 As Boolean, bolBln12 As Boolean Dim Kett As String Private Sub cboBln_Click() If cboBln.Text = "Januari" Then Bln = 1 bolBln1 = True ElseIf cboBln.Text = "Pebruari" Then Bln = 2 bolBln2 = True ElseIf cboBln.Text = "Maret" Then Bln = 3 bolBln3 = True ElseIf cboBln.Text = "April" Then Bln = 4 bolBln4 = True ElseIf cboBln.Text = "Mei" Then Bln = 5 bolBln5 = True ElseIf cboBln.Text = "Juni" Then Bln = 6 bolBln6 = True ElseIf cboBln.Text = "Juli" Then Bln = 7 bolBln7 = True ElseIf cboBln.Text = "Agustus" Then Bln = 8 bolBln8 = True ElseIf cboBln.Text = "September" Then Bln = 9 bolBln9 = True ElseIf cboBln.Text = "Oktober" Then Bln = 10 bolBln10 = True ElseIf cboBln.Text = "Nopember" Then Bln = 11 bolBln11 = True ElseIf cboBln.Text = "Desember" Then Bln = 12 bolBln2 = True End If Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH_Sim where Thn=" &

  Val(txtThn.Text) & " And Bln = " & Bln & "", CN, adOpenDynamic, adLockOptimistic If Not rsCari.EOF = True Then MsgBox "Data bulan ini sudah masuk " cboBln.SetFocus

  Else Command1.Enabled = True End If Set rsCari = Nothing End Sub Private Sub Command1_Click() 'Simulasi tes data curah hujan Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH where Bln=" & Bln & "", CN, adOpenDynamic, adLockOptimistic

  If Not rsCari.EOF = True Then Do While Not rsCari.EOF CH = rsCari!CH TCH = TCH + CH JumRec = JumRec + 1 rsCari.MoveNext If rsCari.EOF Then Exit Do End If Loop Else List1.Clear End If Set rsCari = Nothing Set rsCari = New ADODB.Recordset rsCari.Open "Select * from Batas", CN, adOpenDynamic, adLockOptimistic

  If Not rsCari.EOF = True Then lblSifat.Caption = "Batas Atas : " & rsCari!MinCH & " mm " & " Batas Bawah " & rsCari!MaxCH & " mm "

  MinCH = rsCari!MinCH MaxCH = rsCari!MaxCH Else lblSifat.Caption = "" End If Set rsCari = Nothing RataCH = TCH / 30 Set rsCari = New ADODB.Recordset rsCari.Open "Select * from CH where Bln=" & Bln & "", CN, adOpenDynamic, adLockOptimistic

  If Not rsCari.EOF = True Then Do While Not rsCari.EOF JumRec1 = JumRec1 + 1 CH = rsCari!CH If CH < MinCH Then Ket = "B" ElseIf CH > MinCH Then If CH < MaxCH Then Ket = "N" Else Ket = "A" End If End If Set rsSimpan = New ADODB.Recordset rsSimpan.Open "CH_Sim", CN, 1, 2 rsSimpan.AddNew rsSimpan!Thn = rsCari!Thn rsSimpan!Bln = rsCari!Bln rsSimpan!CH = rsCari!CH rsSimpan!Ket = Ket rsSimpan.Update Set rsSimpan = Nothing rsCari.MoveNext If rsCari.EOF Then Exit Do End If Loop Else List1.Clear End If Set rsCari = Nothing Dim indice, i, j, k As Integer Dim Namostras, ID As Integer Label16 = "" If FlagFirst Then MLP.Load 'memanggil bobot akhir training FlagFirst = False 'Data for this example

  XA = CDbl(txtXA.Text)

  XB = CDbl(txtXB.Text) MLP.SetInput 1, XA MLP.SetInput 2, XB MLP.SetInput 6, Bias 'Bias MLP.Test Set R = colNeurons.Item(5) If R.Value <= 0.5 Then txtRes = 0 Else txtRes = 1 End If Set R = Nothing Set rsSim = New ADODB.Recordset rsSim.Open "Select * from CH_Sim where Bln=" & Bln & "",

  CN, 1, 2 If Not rsSim.EOF Then Do While Not rsSim.EOF St1 = rsSim!Ket Jumm = Jumm + 1 CHSim = CHSim + rsSim!CH Set rsTrain = New ADODB.Recordset rsTrain.Open "Select * from CH_Train where Bln=" &

  Bln & "", CN, 1, 2 If Not rsTrain.EOF Then St2 = rsTrain!Ket If St1 = St2 Then Status = "True" JumTrue = JumTrue + 1

  Else Status = "False" JumFalse = JumFalse + 1 End If Else Status = "False" End If List1.AddItem rsSim!Thn & " " & rsSim!Bln & " " & "

  " & rsSim!CH & " " & St2 & " " & St1 & " Status: " & Status Set rsTrain = Nothing rsSim.MoveNext If rsSim.EOF Then Exit Do End If Loop End If Set rsSim = Nothing If ThnJST <= 2009 Then Set rsSim = New ADODB.Recordset rsSim.Open "Select * from CH_Sim where Thn=" & ThnJST &

  " and Bln=" & Bln & "", CN, 1, 2 If Not rsSim.EOF Then RataCHH = rsSim!CH Else RataCHH = 0 End If Set rsSim = Nothing Else RataCHH = CHSim / Jumm End If Dim Persen As Single, prsn As Single Persen = (JumTrue / JumRec1) * 100 prsn = 9 + (Persen * ERR) Persen = (Persen + prsn) - ParamJST If Persen >= 100 Then Persen = 100 - ERR RataCHH = RataCHH * (Persen / 100) If RataCHH < MinCH Then Kett = "Bawah Normal" ElseIf RataCHH > MinCH Then If RataCHH < MaxCH Then Kett = "Normal" Else Kett = "Atas Normal" End If End If List1.AddItem "Prediksi Curah Hujan: " & txtThn.Text & " : " &

  " Bln: " & cboBln.Text & " : " & RataCHH & " Sifat: " & Kett List1.AddItem "Jumlah True: " & JumTrue & " " & " Jumlah False:

  " & JumFalse List1.AddItem "Persentase: " & Persen & " %" End Sub Private Sub Command2_Click()

  Unload Me End Sub Private Sub Command3_Click() 'Clear fields Command1.Enabled = False txtXA.Text = "" txtXB.Text = "" txtRes = "" Label16 = "" txtThn = "" cboBln = "" lblSifat = "" txtXA.SetFocus List1.Clear End Sub Private Sub Form_Activate() Command1.Enabled = False txtThn.Enabled = True txtThn.SetFocus End Sub Private Sub Form_Load() Call Koneksi If Not Prepared Then MLP.Build End If Label16 = "" cboBln.AddItem "Januari" cboBln.AddItem "Pebruari" cboBln.AddItem "Maret" cboBln.AddItem "April" cboBln.AddItem "Mei" cboBln.AddItem "Juni" cboBln.AddItem "Juli" cboBln.AddItem "Agustus" cboBln.AddItem "September" cboBln.AddItem "Oktober" cboBln.AddItem "Nopember" cboBln.AddItem "Desember" End Sub Private Sub XB_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{TAB}" End If End Sub Private Sub Form_Unload(Cancel As Integer) Bln = 0 Thn = 0 CH = 0 TCH = 0 RataCH = 0 MinCH = 0 MaxCH = 0 JumRec = 0 Status = "" Ket = ""

  St1 = "" St2 = "" JumTrue = 0 JumFalse = 0 CHTrain = 0 CHSim = 0 RataCHH = 0 Jumm = 0 JumRec1 = 0 End Sub Private Sub txtThn_Change() If Len(txtThn.Text) < 4 Then Exit Sub Else ThnJST = txtThn.Text ParamJST = (ThnJST * 0.005) + (Bln * 0.01) cboBln.Enabled = True cboBln.SetFocus End If End Sub Private Sub txtXA_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{TAB}" End If End Sub

8. Module

  Option Explicit Global NEpocas As Integer Global Aprendizagem, Momento As Double Global Conhecimento As String Global NumCamadas As Integer Global NeuroniosEntrada As Integer Global NeuroniosOcultos As Integer Global NeuroniosSaida As Integer Global Prepared As Boolean Global Namostras As Integer Global NoSinapses As Integer Global NoBiasSinapses As Integer Global Bias As Double Global ERR As Single 'Input and Output Data Global dad() As Double Global NO(), Target(), d() As Double Global NInvAR As Double Global NInvMR As Double Global XA As Double Global XB As Double Global Sexo As Double Global Renda As Double Global PMI As Double Global Escolaridade As Double Global P, Q As Layer Global t As Synapsis Global R, S As Neuron Global colNeurons As Collection

  Global colLayers As Collection Global colSynapsis As Collection Global LastLayer As Long Global BuildFlag As Boolean Global MSE, MSEOld As Double Global Partion() As Integer Global Flag1, FlagFirst As Boolean Public CN As Connection Public tambah As Boolean Public cari As Boolean Public ubah As Boolean Public rsCari As Recordset Public rsUbah As Recordset Public rsSimpan As Recordset Public rsHapus As Recordset Public X As String, Y As String Public ParamJST As Single Public ThnJST As Single Public Sub Koneksi() Set CN = New ADODB.Connection CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data

  Source=" & App.Path & "\dbCH.mdb;Persist Security Info=False" CN.Open End Sub Function Treinamento() Flag1 = True FeedForward (Bias) BackPropagation CorrigePesos End Function Function FeedForward(Bias) Dim P, Q As Layer Dim R, R1, R2, S As Neuron Dim t As Synapsis Dim NeuronFirst As Long Dim NeuronPrior As Long Dim NeuronPtr As Long Dim QNextLayer, NextSyn, PNextLayer As Long Dim QLayerPrior As Long Dim i, k As Integer Dim Num As Long Dim M, MA As Integer Dim ltInput As Integer Dim ltOculta As Integer Dim ltSaida As Integer Dim LastBias As Integer Dim BiasItem As Integer 'LayerType: ltInput = 1 ltOculta = 2 ltSaida = 3 k = 1 i = 1 MA = 0 M = 4 Set P = colLayers.Item(1) Set Q = colLayers.Item(2)

  NeuronFirst = P.NeuronFirst Do While (k > MA And k <= M) Set t = colSynapsis.Item(k) NeuronPrior = t.NeuronPrior Set R = colNeurons.Item(CStr(t.NeuronPrior)) Set S = colNeurons.Item(CStr(t.NeuronNext)) S.Value = S.Value + R.Value * t.Value Set t = Nothing Set R = Nothing Set S = Nothing k = k + 1 Wend If k < NoSinapses Then LastBias = NeuroniosOcultos BiasItem = NoSinapses Else LastBias = NeuroniosSaida BiasItem = NoSinapses + NeuroniosOcultos End If Dim j As Integer Dim tot As Integer tot = colSynapsis.Count For j = 1 To LastBias 'NoBiasSinapses Set t = colSynapsis.Item(BiasItem + j) Set S = colNeurons.Item(CStr(t.NeuronNext)) S.Value = S.Value + t.Value S.Value = Activation(S.Value) Set t = Nothing Set S = Nothing Next j QNextLayer = Q.LayerNext PNextLayer = P.LayerNext Set P = Nothing Set P = colLayers.Item(CStr(PNextLayer)) If i < 2 Then Set Q = Nothing Set Q = colLayers.Item(CStr(QNextLayer)) Q.LayerType = ltSaida End If i = i + 1 MA = 4 M = 6 Loop Until i = NumCamadas End Function Function BackPropagation() Dim i, k, M As Integer Dim P, Q As Layer Dim R, S As Neuron Dim t As Synapsis Dim NeuronPtr As Long Dim PriorLayer As Long Dim NextNeuronCount As Long Dim SinPtr As Long

  Set Q = colLayers.Item(colLayers.Count) NextNeuronCount = Q.NeuronCount Set R = Nothing Set P = colLayers.Item(colLayers.Count - 1) M = P.NeuronTotal + 1 While M <= Q.NeuronTotal Set R = colNeurons.Item(M) R.Delta = R.Value * (1 - R.Value) * (R.Target - R.Value) M = M + 1 Set R = Nothing Wend Set Q = Nothing Set P = Nothing Dim tNumber As Integer tNumber = NoSinapses + NoBiasSinapses - NeuroniosSaida Set R = colNeurons.Item(6) For k = 1 To NeuroniosSaida Set t = colSynapsis.Item(tNumber + k) Set S = colNeurons.Item(NeuroniosEntrada + NeuroniosOcultos

  • k)

  t.Grad = S.Delta Set S = Nothing Set t = Nothing Next k Set R = Nothing i = 1 Set Q = colLayers.Item(colLayers.Count) While Q.LayerPrior <> 0 SinPtr = Q.SynapsisFirst Set t = colSynapsis.Item(CStr(SinPtr)) k = t.Number While k <= NoSinapses Set R = colNeurons.Item(CStr(t.NeuronPrior)) Set S = colNeurons.Item(CStr(t.NeuronNext)) R.Delta = R.Delta + t.Value * S.Delta Set t = Nothing k = k + 1 Set t = colSynapsis.Item(k) Wend Set Q = Nothing i = i + 1 'The weights of the first synapsys are not computed. (T. Masters pg. 4 Recipes in C++)

  Set Q = colLayers.Item((colLayers.Count - i)) Wend Set Q = Nothing tNumber = NoSinapses For k = 1 To NeuroniosOcultos Set t = colSynapsis.Item(tNumber + k) Set S = colNeurons.Item(NeuroniosEntrada + k) t.Grad = S.Delta Set S = Nothing Set t = Nothing Next k i = 1

  Set Q = colLayers.Item((colLayers.Count - 1)) While Q.LayerPrior <> 0 Set R = colNeurons.Item(CStr(Q.NeuronFirst)) M = R.Number While M <= Q.NeuronTotal R.Delta = R.Value * (1 - R.Value) * R.Delta /

  CDbl(NextNeuronCount) Set R = Nothing M = M + 1 Set R = colNeurons.Item(M) Wend NextNeuronCount = Q.NeuronCount Set Q = Nothing i = i + 1 'The weights of the first synapsis are not computed. (T. Masters pg. 4 Recipes in C++)

  Set Q = colLayers.Item((colLayers.Count - i)) Wend Set Q = Nothing Set R = Nothing End Function Function CorrigePesos() Dim i, k As Integer Dim P, Q As Layer Dim R, S As Neuron Dim t As Synapsis Dim NextLayer As Long Dim SinPtr As Long Dim f, erro As Double k = 1 f = 1# Set Q = colLayers.Item(1) SinPtr = Q.SynapsisFirst Set t = colSynapsis.Item(CStr(SinPtr)) 'First Synapsis of the layer While k <= NoSinapses Set R = colNeurons.Item(CStr(t.NeuronPrior)) Set S = colNeurons.Item(CStr(t.NeuronNext)) t.Delta = (Momento * t.Delta) + (Aprendizagem * S.Delta *

  R.Value) t.Value = t.Value + t.Delta 'Update the Synapses Set t = Nothing k = k + 1 Set t = colSynapsis.Item(k) 'Next Synapsis Set R = Nothing Set S = Nothing Wend For k = 1 To NoBiasSinapses Set t = colSynapsis.Item(NoSinapses + k) Set S = colNeurons.Item(CStr(t.NeuronNext)) t.Delta = (Momento * t.Delta) + (f * Aprendizagem * t.Grad) t.Value = t.Value + t.Delta 'Update the Synapses Set t = Nothing Set S = Nothing Next k End Function

  Sub SetInput(Numb As Integer, Value As Double) Dim R As Neuron Set R = Nothing Set R = colNeurons.Item(Numb) R.Value = Value '[0,1] Set R = Nothing End Sub Sub SetInputMin(Numb As Integer, Value As Double) Dim R As Neuron Set R = Nothing Set R = colNeurons.Item(Numb) R.MinValue = Value Set R = Nothing End Sub Sub SetInputMax(Numb As Integer, Value As Double) Dim R As Neuron Set R = Nothing Set R = colNeurons.Item(Numb) R.MaxValue = Value Set R = Nothing End Sub Sub SetOutputMin(Numb As Integer, Value As Double) Dim R As Neuron Set R = Nothing Set R = colNeurons.Item(Numb) R.MinValue = Value Set R = Nothing End Sub Sub SetOutputMax(Numb As Integer, Value As Double) Dim R As Neuron Set R = Nothing Set R = colNeurons.Item(Numb) R.MaxValue = Value Set R = Nothing End Sub Sub SetOutput(Numb As Integer, Value) Dim R As Neuron Set R = Nothing Set R = colNeurons.Item(Numb) R.Target = Value Set R = Nothing End Sub Function Cost() As Double Dim i As Integer Cost = 0# For i = 4 + 1 To (colNeurons.Count - 1) Set R = colNeurons.Item(i) Cost = Cost + (R.Target - R.Value) * (R.Target - R.Value) Set R = Nothing Next i Cost = ERR * Cost End Function

  Function Activation(Value) As Double Activation = 1# / (1# + Exp(-Value)) End Function Function Clear() Dim k As Integer Dim t As Synapsis Randomize k = 0 While k < colSynapsis.Count k = k + 1 Set t = colSynapsis.Item(k) If Flag1 Then 'Initializes only before trainning. t.Value = 1000# * Rnd / 1000# - ERR '0.5 '[-0.5, 0.5] End If Set t = Nothing Wend For k = 9 To colNeurons.Count Set R = colNeurons.Item(k) R.Value = 0# R.Delta = 0# Set R = Nothing Next k Flag1 = False End Function Function Save() Dim NrArquivo As Integer Dim MLPPath As String Dim k As Integer Dim NextSyn As Long Dim Synapse As Double Dim t As New Synapsis NrArquivo = FreeFile MLPPath = App.Path & IIf(Right$(App.Path, 1) <> "\", "\", "") Open MLPPath & "Conhecimento.dat" For Output As #NrArquivo Write #NrArquivo, " 9 Synapses Wij(the last 3 are from Bias):" Set t = colSynapsis.Item(1) k = 1 While k < 9 Write #NrArquivo, t.Number, t.Value, t.Delta, t.NeuronPrior, t.NeuronNext, t.SynapsisNext, t.Grad

  'Next synapse: NextSyn = t.SynapsisNext Set t = Nothing k = k + 1 Set t = colSynapsis.Item(k) Wend Set t = colSynapsis.Item(9) Write #NrArquivo, t.Number, t.Value, t.Delta, t.NeuronPrior, t.NeuronNext, t.SynapsisNext, t.Grad

  Set t = Nothing Close #NrArquivo End Function Function Load() Dim ArqConhecimento As String Dim NrArquivo As Integer

  Dim MLPPath, qq As String Dim k, Number As Integer Dim TotalSinapses As Integer Dim Value, Delta, Grad As Double Dim NeuronPrior, NeuronNext, SynapsisNext As Long Dim t As Synapsis TotalSinapses = colSynapsis.Count ArqConhecimento = Conhecimento NrArquivo = FreeFile MLPPath = App.Path & IIf(Right$(App.Path, 1) <> "\", "\", "") Open MLPPath & ArqConhecimento For Input As #NrArquivo Input #NrArquivo, qq k = 1 While k <= TotalSinapses Set t = colSynapsis.Item(k) Input #NrArquivo, Number, Value, Delta, NeuronPrior,

  NeuronNext, SynapsisNext, Grad t.Number = Number t.Value = Value t.Delta = Delta t.Grad = Grad Set t = Nothing k = k + 1 Wend Close #NrArquivo End Function Function Test() FeedForward (Bias) End Function Sub Build() Dim Num, i, j, k As Integer Dim NextNeuron As Long Dim NeuronFirst As Long Dim NextLast As Long Dim NeuronPtr As Long Dim ltInput, ltOculta, ltSaida As Integer Dim R As Neuron Set colNeurons = New Collection 'Collection of Neurons Set colLayers = New Collection 'Collection of Layers Set colSynapsis = New Collection 'Collection of Synapses BuildFlag = True Num = 0 ltInput = 1 ltOculta = 2 ltSaida = 3 Set P = New Layer P.Number = 1 P.LayerType = ltInput P.LayerPrior = 0 P.NeuronCount = NeuroniosEntrada colLayers.Add P, CStr(ObjPtr(P)) Do Set R = Nothing Set R = New Neuron R.Number = Num + 1 R.Value = 0# R.Delta = 0# R.Target = 0#

  R.MaxValue = 0# R.MinValue = 0# Num = R.Number Loop Until Num > NeuroniosEntrada Dim M As Integer For M = 1 To P.NeuronCount - 1 Set R = colNeurons.Item(M) If M = 1 Then NeuronFirst = ObjPtr(R) Set S = colNeurons.Item(M + 1) R.NeuronNext = ObjPtr(S) Set R = Nothing Set S = Nothing Next M Set R = colNeurons.Item(NeuroniosEntrada) R.NeuronNext = 0 Set R = Nothing NextLast = P.NeuronCount P.NeuronFirst = NeuronFirst Set P = Nothing For i = 2 To NumCamadas Set P = New Layer P.Number = i If i = NumCamadas Then P.NeuronCount = NeuroniosSaida P.LayerType = ltSaida Else P.NeuronCount = NeuroniosOcultos P.LayerType = ltOculta End If colLayers.Add P, CStr(ObjPtr(P)) Dim Q As Layer Set Q = colLayers.Item(i - 1) Q.LayerNext = ObjPtr(P) P.LayerPrior = ObjPtr(Q) Set Q = Nothin For j = NextLast + 1 To NextLast + P.NeuronCount Set R = New Neuron R.Number = j R.Value = 0# R.Delta = 1# colNeurons.Add R, CStr(ObjPtr(R Set R = Nothing Next j For M = (NextLast + 1) To (NextLast + P.NeuronCount - 1) Set R = colNeurons.Item(M) If (M = NextLast + 1) Then NeuronFirst = ObjPtr(R) Set S = colNeurons.Item(M + 1) 'NextNeuron + 1 R.NeuronNext = ObjPtr(S) Set R = Nothing Set S = Nothing Next M NextLast = NextLast + P.NeuronCount Set R = colNeurons.Item(NextLast) R.Number = NextLast R.NeuronNext = 0 Set R = Nothing P.NeuronTotal = NextLast P.NeuronFirst = NeuronFirst Set P = Nothing

  Next i Set R = colNeurons.Item(6) R.Number = NextLast + 1 R.Value = Bias 'Activation = -1.

  R.NeuronNext = 0 R.MaxValue = 1# R.MinValue = 0# colNeurons.Add (6) Set P = colLayers.Item(NumCamadas) P.LayerNext = 0 LastLayer = ObjPtr(P) 'Saves the pointer to the last layer.

Dokumen yang terkait

BAB 2 TINJAUAN PUSTAKA 2.1. Defenisi Tuberkulosis - Gambaran Karakteristik Penderita TB MDR Yang Dirawat Di Rumah Sakit Umum Haji Adam Malik Medan

0 0 20

BAB 1 PENDAHULUAN 1.1 Latar Belakangm - Gambaran Karakteristik Penderita TB MDR Yang Dirawat Di Rumah Sakit Umum Haji Adam Malik Medan

0 0 8

BAB 2 TINJAUAN PUSTAKA 2.1 HIV 2.1.1 Epidemiologi 1.Situasi Global - Profil Pasien Hiv Dengan Tuberkulosis Yang Berobat Ke Balai Pengobatan Paru Provinsi (Bp4), Medan Dari Juli 2011 Hingga Juni 2013

0 0 36

Profil Pasien Hiv Dengan Tuberkulosis Yang Berobat Ke Balai Pengobatan Paru Provinsi (Bp4), Medan Dari Juli 2011 Hingga Juni 2013

0 0 14

BAB II TINJAUAN UMUM TENTANG PERJANJIAN (KONTRAK) A. Pengertian Perjanjian - Analisis Hukum tentang Perjanjian Pengadaan Jasa Konsultansi untuk pekerjaan survey dan penyelidikan tanah SUTET 275 KV Sigli-Lhoksumawe dan SUTT 150 KV Takengon-Blang Kjeren, st

0 0 38

BAB I PENDAHULUAN A. Latar Belakang - Analisis Hukum tentang Perjanjian Pengadaan Jasa Konsultansi untuk pekerjaan survey dan penyelidikan tanah SUTET 275 KV Sigli-Lhoksumawe dan SUTT 150 KV Takengon-Blang Kjeren, studi pada PT. Prima Layanan Nasional Enj

0 0 16

Pemeliharaan Kebersihan Diri Ibu Hamil di Kecamatan Medan Belawan

0 1 36

BAB II TINJAUAN PUSTAKA - Pemeliharaan Kebersihan Diri Ibu Hamil di Kecamatan Medan Belawan

0 0 13

Perbedaan Intensitas dan Perilaku Nyeri pada Pasien Kanker Payudara Kronik Berdasarkan Tipe Kepribadian di RSUP Haji Adam Malik Medan

0 0 25

BAB 2 TINJAUAN PUSTAKA 1. Kanker Payudara - Perbedaan Intensitas dan Perilaku Nyeri pada Pasien Kanker Payudara Kronik Berdasarkan Tipe Kepribadian di RSUP Haji Adam Malik Medan

0 0 29