81 5
Kembalikan nilai dari listDokterTemp 6
Selesai
4. Similarity controller_avtivity.java
a. onCreateBundle savedInstanceState
1 method ini berkerja sebagai kontroler pengatur proses apa saja yang
harus dilakukan 2
method ini
akan memanggil
method getResource
untuk mendapatkan data dokter dan data sales
3 memanggil
method normalitationQuery
untuk melakukan
normalisasi bobot untuk query 4
memanggil method settingQuery untuk melakukan pengecekan bobot generic bdalam profile dengan deneric yang dimiliki system
untuk generic yang tidak dipilih oleh sales maka akan bernilai 0. 5
Memanggil method getSimilarity untuk mendapatkan hasil dari proses pencarian jarak terdekat antara query dengan cluster
clusterResult=getSimilarity; 6
Mendapatkan data
dpokter dari
cluster yang
terpilih getDokterListResult;
7 melakukan pengurutan data dokter dari cluster yang terpilih
berdasarkan similarity dengan query dengan memanggil method bubleShort;
8 menampilkan data
9 myListView = ListViewfindViewByIdR.id.listDokterResult;
b. getResource
82 1
buatlah variable bertipe public diluar method seperti berikut :
String FILE_TemDokter = tempDokter5.tmp; String FILE_NAME = tempfile5.tmp;
String FILE_profile=tempProfile5.tmp; double [] resDistace;
Boolean STATUSdETAIL=false; ListProfilSales_Model profilSales;
TempResModel resourceTemp; Dokter_Model [] listDokter;
2 Dalam method getResource panggilah file yang akan diambmbil
datanya tempDOkter5.tmp , tempProfile5.tmp , tempfile5.tmp . perhartikan listing program berikut ;
FileInputStream fis2 = openFileInputFILE_NAME; ObjectInputStream inObjectStream2 = new ObjectInputStreamfis2;
FileInputStream fis2Sales = openFileInputFILE_profile ObjectInputStream inObjectStream2Sales
= new ObjectInputStreamfis2Sales; FileInputStream fisDokter = openFileInputFILE_TemDokter;
ObjectInputStream inObjectStreamDokter = new ObjectInputStreamfisDokter
;
83 3
Jika sudah menyimpan dalam variable bertipe objectInputStream langkah
berikutnya adalah
memberikan nilai
variable ListProfilSales_Model profilSales; TempResModel
resourceTemp; Dokter_Model [] listDokter agar berisikan data yang terdapat di objectInputStream. Inplementasi perhatikan listing
program berikut : listDokter
= Dokter_Model
[] inObjectStreamDokter.readObject;
resourceTemp = TempResModel inObjectStream2.readObject; profilSales
= ListProfilSales_Model
inObjectStream2Sales.readObject; 4
Setelah dilakukan pengesetan terhadiap variable listDokterm resourceTemp dan profilSales maka variable tersebut telah berisi
data yang ada dalam file sehingga siap untuk diproses. 5
Selesai c.
normalitationQuery
1 akses variable profil sales
2 cari nilai maksimal dari seluruh item profile
3 bagi seluruh bobot dari item profil dengan nilai max
4 selesai
d. settingQuery
1 buat variable bantu double profileQuery[] = new double [jumlah
generic] 2
seting seluruh nilai indek = 0.0 perhatikan listing berikut:
for int i = 0; i profileQuery.length; i++ { profileQuery[i]=0.0;
84
}
3 akses variable profilSales
4 buat variable tempResource
5 isi variable genericRes[] dengan data generic dari kelas variable
tempResource.getGeneric 6
lakukan pencocokan indek 7
i=0 8
selama i tempResource.generic.length , jika tidak lanjut langkah 14
9 j =0
10 selama j profilSales.size jika tidak lanjut langkah 13
11 cek
apakah untuk
index profilSales.getj
== tempResource.generic[i]
a. jika sama cek seting profileQuery[i]=
profilSales.getj.getBobot 12
j++ , ulangi langkah 10 13
i++ , ulangi langkah 8 untuk lebih jelas perhatikan listing program berikut :
public void settingQuery { for int i = 0; i profileQuery.length; i++ {
profileQuery[i]=0.0; }
for int i = 0; i resourceTemp.getGeneric.length; i++ { for int j = 0; j profilSales.size; j++ {
85
ifresourceTemp.getGeneric[i].equalsprofilSales.getj.Generic{ profileQuery[i]=profilSales.getj.getBobot; }}}}
e. getSimilarity
1 buat variable untuk menampung jarak ke empat centroid dengan
query 2
lakukan perhitungan jarak Euclidean terhadap profilQuery dengan resourceTemp.getCentroid[0...3]
a buat variable temporary
double resultC1 = 0; double resultC2 = 0;
double resultC3 = 0; double resultC4 = 0;
b hitung nilai index X1 – index Y2 + index X2- index X22
…. Untuk hasil perhitungan setiap centroid cluster dengan profilQuery simpan dalam variable temporary .
for int i = 0; i 61; i++ { resultC1=resultC1
+ Math.powresourceTemp.getCentroid[0][i]-profileQuery[i],2;
resultC2=resultC2 +
Math.powresourceTemp.getCentroid[1][i]-profileQuery[i],2; resultC3=resultC3
+ Math.powresourceTemp.getCentroid[2][i]-profileQuery[i],2;
resultC4=resultC4 +
Math.powresourceTemp.getCentroid[3][i]-profileQuery[i],2; }
86 c
hitung akar dari masing-masing variable temporary simpan dalam
variable Total_ResultC1
, Total_ResultC2
, Total_ResultC3 , Total_ResultC4
double Total_resultC1 = Math.sqrtresultC1; double Total_resultC2 = Math.sqrtresultC2;
double Total_resultC3 = Math.sqrtresultC3; double Total_resultC4 = Math.sqrtresultC4;
3 ambil centroid cluster dengan jarak terkecil dengan
membandingkan nilai dari Total_ResultC1 , Total_ResultC2 , Total_ResultC3 , Total_ResultC4 , perhatikan contoh pengecekan
berikut :
int Cluster = 0; if Total_resultC1 Total_resultC2 Total_resultC1 Total_resultC3
Total_resultC1 Total_resultC4 { Cluster = 1;
} else if Total_resultC2 Total_resultC1 Total_resultC2 Total_resultC3 Total_resultC2 Total_resultC4 {
Cluster = 2; }
4 kemudian retrun cluster
f. getDokterListResult
1 hitung anggota cluster dari cluster dokter yang terpilih
2 buat objek array dari kelas Dokter_model. Seperti listing program
berikut
Dokter_Model [] tDokter= new Dokter_Model[jumDokterResult];
87 3
copy array dari objek listDokter kedalam tDokter untuk dokter yang masuk kedalam cluster yang dipilih
4 seting variable dokListResult=tDokter;
5 setelah melakukan copy array buatlah variable resDistance[] bertipe
double untuk menyimpan jarak dari setiap dokter dengan query 6
Setelah resDistance dibuat kemudian deklarasikanlah variable tersebut dalam method ini. resDistace= new double[tDokter.length];
7 Hitung jarak antara dokter dalam dengan query menggunakan
Euclidean seperti pada baris program berikut :
for int i= 0; i resDistace.length; i++ { for
int j
= 0;
j tDokter[0].getReekomendasi_obat.getOlahanData.getBobotgeneric.length; j++
{ double
tJum=Math.powtDokter[i].getReekomendasi_obat. getOlahanData.getBobotgeneric[j]-profileQuery[j],2;
resDistace[i]=resDistace[i]+ tJum; }
}
8 Lakukan proses perhitungan akar untuk setiap jarak
for int i = 0; i resDistace.length; i++ { resDistace[i]=Math.sqrtresDistace[i];
}
88 9
Selesai g.
bubleShort
1 akses variabel resDistance[] yang memuat jarak dari setiap dokter
terhadap query 2
urutkan menggunakan algoritma bubleshort dari yang besar menuju yang kecil
Algoritma buble sort : a
Algoritma ini digunakan untuk mengurutkan data dengan metode bubble sort.
b Masukan berupa kumpulan data dalam larik.
c Keluaran akan menghasilkan kumpulan data dalam larik
yang sudah dalam keadaan urut. d
Langkah 0 : Baca data ke dalam larik e
Langkah 1 : Untuk iterasi = 1 sampai N-1 lakukan langkah 2 f
Langkah 2 : Untuk elemen = 0 sampai N-1-iterasi lakukan langkah 3
g Langkah 3 : Test apakah larik[elemen] larik[elemen + 1]
Jika ya, tukarkan nilai kedua elemen ini
3 detail algoritma dalam implementasi :
for int m = 0; m dokListResult.length-1; m++ { for int n = 0; n dokListResult.length-1-m; n++ {
ifresDistace[n]resDistace[n+1]{ double tem= resDistace[n+1];
resDistace[n+1]=resDistace[n]; resDistace[n]=tem;
89
Dokter_Model dT=dokListResult[n+1]; dokListResult[n+1]=dokListResult[n];
dokListResult[n]=dT; }
} }
h. Dokter_Model shortRecomendationint idDokter
1 Method ini sama halnya dengan method BubleShort dimana method
ini untuk mengurutkan obat yang direkomendasikan dokter berdasarkan jumlah terbesar
2 Berikut
adalah algoritma
pengurutan rerkomendasi
obat menggunakan bubleshort
Algoritma buble sort a
Algoritma ini digunakan untuk mengurutkan data dengan metode bubble sort.
b Masukan berupa kumpulan data dalam larik.
c Keluaran akan menghasilkan kumpulan data dalam larik
yang sudah dalam keadaan urut. d
Langkah 0 : Baca data ke dalam larik e
Langkah 1 : Untuk iterasi = 1 sampai N-1 lakukan langkah 2 f
Langkah 2 : Untuk elemen = 0 sampai N-1-iterasi lakukan langkah 3
g Langkah 3 : Test apakah larik[elemen] larik[elemen + 1]
Jika ya, tukarkan nilai kedua elemen ini
90
BAB V HASIL DAN PENGUJIAN
A. Hasil Pengujian Sistem
1. Item Query Yang Tersedia
Tabel 21. Item Query Yang Tersedia
No Generic Obat Profil Query
1 Amikacin
2 Amoxicillin + clavulanic acid
3 Ampicillin sodium,
4 Ascorbic acid
5 Biotin + folic acid + glycine
6 Bupivacaine hydrochloride + dextrose
monohydrate 7
Cefepime 8
Cefoperazone 9
Cefotaxime 10
Cefpirome 11
Ceftazidime 12
Ceftizoxime 13
Ceftriaxone 14
Cefuroxime 15
Ciprofloxacin 16
Citicoline 17
Dexketoprofen 18
Dexmedetomidine hydrochloride 19
Dextrose +lidocaine hydrochloride 20
Diazepam 21
Dipyrone 22
Dobutamine 23
Ephedrine hydrochloride
+ theophylline anhydrous
epoetin alfa 24
Esomeprazole 25
Fentanyl 26
Ferric hydroxide sucrose complex 27
Fluconazole 28
Fosfomycin 29
Furosemide
30 Heparin 31 Hyoscine
32 Imipenem + cilastatin
33 Ketoprofen
34 Ketorolac
35 Levofloxacin
36 Mecobalamin
37 Meropenem
38 Methampyrone + vitamin B
complek 39
Methylprednisolone 40
Metoclopramide hydrochloride 41
Metronidazole 42
Midazolam 43
Moxifloxacin 44
Neostigmine 45
Norepinephrine 46
Omeprazole 47
Ondansetron 48
Oxytocin 49
Pantoprazole 50
paracetamol +
vitamin B
complek 51
Parecoxib 52
Piracetam 53
Propofol 54
Ranitidine 55
rocuronium bromide 56
Tetanus immunoglobulin 57
Tramadol 59
tranexamic acid 60
Vecuronium bromide 61
Vitamin B-Complek