Perancangan Algoritma Branch and Bound

23 1. Performa Perangkat lunak yang akan dibangun dapat melaksanakan tugasnya dengan waktu yang tidak terlalu lama. 2. Efisiensi Sistem atau perangkat lunak yang akan dibangun harus sesederhana mungkin agar mudah digunakan oleh pengguna user dan responsif. 3. Ekonomi Sistem atau perangkat lunak yang akan dibangun harus dapat bekerja dengan baik tanpa harus mengeluarkan biaya tambahan dalam penggunaan perangkat keras maupun perangkat lunak. 4. Informasi Sistem harus mampu menyediakan informasi tentang data yang akan digunakan pada sistem. 5. Kontrol Perangkat lunak yang dibangun akan menampilkan pesan error untuk setiap input yang tidak sesuai. 6. Pelayanan Sistem yang telah dirancang bisa dikembangkan ke tingkat yang lebih kompleks lagi bagi pihak-pihak yang ingin mengembangkan sistem tersebut.

3.2 Perancangan Algoritma Branch and Bound

Pada tahap ini terdapat empat hal penting, yaitu pengkategorian kalori berdasarkan umur, penggolongan asam urat berdasarkan kadar purin dalam darah, perhitungan nilai kalori setiap bahan makanan, dan proses perhitungan Algoritma Branch and Bound. 3.2.1 Pengkategorian Kalori Berdasarkan Umur Pengkategorian kalori dibagi berdasarkan jenis kelamin, yaitu laki-laki dan wanita, seperti yang tercantum pada tabel 3.1 dibawah ini. Universitas Sumatera Utara 24 Tabel 3.1 Kalori Berdasarkan Umur Laki-laki Umur Kalori 10-12 th 2050 13-15 th 2400 16-18 th 2600 19-29 th 2550 30-49 th 2350 50-64 th 2250 60+ th 2050 3.2.2 Penggolongan Asam Urat Berdasarkan Kadar Purin Pada keadaan normal, kandungan asam urat dalam tubuh adalah : a. Pria : 3,7 7 mgdL b. Wanita : 2,4 5,7 mgdL Penderita asam urat di golongkan berdasarkan kandungan asam urat yaitu : 1. Golongan I a. Pria : 7 8,5 mgdL b. Wanita : 5,8 7 mgdL Makanan yang diperbolehkan kurang dari 200 mg purin 2. Golongan II a. Pria : 8,5 9 mgdL b. Wanita : 7 8 mgdL Makanan yang diperbolehkan kurang dari 150 mg purin 3. Golongan III a. Pria : 9 mgdL b. Wanita : 8 mgdL [2] Makanan yang diperbolehkan kurang dari 100 mg purin Wanita Umur Kalori 10-12 th 2050 13-15 th 2350 16-18 th 2200 19-29 th 1900 30-49 th 1800 50-64 th 1750 60+ th 1600 Universitas Sumatera Utara 25 3.2.3 Perhitungan Nilai Kalori Setiap Bahan Makanan Untuk menghitung nilai kalori bahan makanan diperlukan beberapa instrumen antara lain : 1. Nilai kalori makanan 1 gram karbohidrat dapat menghasilkan 4 kalori 1 gram Lemak menghasilkan 9 kalori 1 gram protein menghasilkan 4 kalori 2. Daftar kompoisi bahan makanan DKBM DKBM berupa tabel lampiran B yang memuat berbagai jenis makanan beserta kandungan zat gizinya. Kandungan zat gizi yang terbaca dalam DKBM merupakan kandungan setiap 100 Gram bahan makanan. 3. Ukuran Rumah Tangga URT URT berupa daftar takaran bahan makanan yang dapat dilihat pada lampiran E. Cara menghitung nilai kalori setiap bahan makanan dapat di lihat pada contoh makanan pagi dengan menu berikut :  1 gelas Nasi  1 mangkuk sayur kacang  1 potong Tempe  1 buah jeruk  1 potong daging ayam  1 gelas susu Hal pertama yang dilakukan adalah menyesuaikan menu makanan dan URT, sehingga menu makanan menjadi :  1 Gelas Nasi URT 125 gr  1 mangkuk sayur kacang URT 50 gr  1 potong Tempe URT 25  1 buah jeruk URT 50  1 potong daging ayam URT 50  1 gelas susu URT 200 Universitas Sumatera Utara 26 Cara Perhitungan : 1 gelas nasi : A Bdd bahan yg dapat dimakan nasi = 100 dilihat pada tabel DKBM B 1 gelas nasi = 125 Gr dilihat pada tabel tabel URT C Setiap 100 Gram Nasi mengandung : dilihat pada tabel tabel DKBM C1 Karbohidrat : 40,6 gram C2 Lemak : 0,1 Gram C3 Protein : 2,1 Gram Karbohidrat 100100 125100 40,6 4 203 Kalori A B C1 Kalori zat gizi Lemak 100100 125100 0.1 9 1,13 Kalori A B C2 Kalori zat gizi Protein 100100 125100 2,1 4 10,5 Kalori A B C3 Kalori zat gizi Sehingga total kalori untuk 1 gelas nasi adalah 203 + 1,13 + 10,5 = 214,63 Kalori. Hal yang sama kita lakukan pada menu makanan berikutnya. 1 Gelas Mangkuk sayur Kacang URT= 50 Gr  Karbohidrat = 75100 X 50100 X 7.8 X 4 = 11.7 Kal  Lemak = 75100 X 50100 X 0.3 X 9 = 1.0 Kal  Protein = 75100 X 50100 X 2.7 X 4 = 4.0 kal ---------------- + = 16.7 Kal 1 Potong Tempe URT= 25 Gr  Karbohidrat = 100100 25100 9,1 4 = 9,1 Kal  Lemak = 100100 25100 7,7 9 = 17.33 Kal  Protein = 100100 25100 14 4 = 14 kal ---------------- + = 40.43 Kal Universitas Sumatera Utara 27 1 Potong Daging ayam URT= 50 Gr  Karbohidrat = 58100 50100 0 4 = 0 Kal  Lemak = 58100 50100 25 9 = 62.25 Kal  Protein = 58100 50100 18.2 4 = 21.11 kal ---------------- + = 83.36 Kal 1 Gelas Susu Sapi URT= 200 Gr  Karbohidrat = 100100 200100 4.3 4 = 30.1 Kal  Lemak = 100100 200100 3.5 9 = 63.9 Kal  Protein = 100100 200100 3.2 4 = 25.6 kal ---------------- + = 115.1 Kal 1 Buah Jeruk URT= 50 Gr  Karbohidrat = 71100 50100 11,2 4 = 15.9 Kal  Lemak = 71100 50100 0.2 9 = 0.64 Kal  Protein = 71100 50100 0.9 4 = 1.29 kal ---------------- + = 17,82 Kal Sehingga jumlah nilai kalori makanan tersebut adalah = 488,04 Kal. 3.2.4 Proses Perhitungan Algoritma Branch And Bound Algoritma Branch Bound BB juga merupakan metode pencarian di dalam ruang solusi secara sistematis. Ruang Solusi diorganisasikan ke dalam pohon ruang status dan dibangun dengan skema Breadth-First Search BFS. Pada penelitian ini algoritma BB digunakan untuk menyelesaikan masalah knapsack 0-1 yang diimplementasikan pada penentuan menu makanan penderita asam urat. Pada tahap sebelumnya diperoleh jumlah kalori setiap bahan makanan, sehingga dapat dijadikan contoh persoalan knapsack 0-1 dimana n = 6. Untuk variabel B sebagai berat maksimum, dalam persoalan ini adalah kalori dapat kita misalkan sebesar 210 kalori. Sedangkan variabel p dalam persoalan ini adalah jumlah protein. Universitas Sumatera Utara 28 Tabel 3.2 Keterangan Kalori, Protein dan pibi Bahan Makanan-i pi bi pibi 1 potong daging ayam 9.1 83.36 0.109 1 potong tempe 3.5 40.43 0.087 1 mangkok sayur kacang 1.35 16.7 0.081 1 gelas susu sapi 6.4 115.1 0.056 1 buah jeruk 0.45 17.82 0.025 1 gelas nasi 2.63 214.63 0.012 Pada contoh di atas, makanan telah diurut mengecil sesuai dengan pibi, dengan menggunakan algoritma BB cara mengerjakan adalah : Menghitung batas atas upper bound disetiap simpul kemungkinan, dengan menggunakan : ub = p + B – bpi+1bi+1 dimana : p = protein B = kalori maksimum b = kalori item Penyelesaian : Untuk mencari ub maksimum protein terbesar adalah :  Ambil 0 item, masukkan density maximum dari item ub = 0 + 210 – 0 0.109 = 22,89 gr. Setelah kita mengambil 1 item, kita hitung upper bound di setiap simpul dengan :  Semua bagian item 1 9.1 , 83.36 + sebagian dari item 2 3.5, 40.43 ub = 9.1 + 210 - 83.36 0.087= 20,12 Jika tidak mengambil item 1, maka : ub = 210 – 0 0.087 = 18,27 Selanjutnya mengambil item 2 untuk dihitung upper bound seperti pada item 1 sebelumnya. Universitas Sumatera Utara Gambar 3.2 Pohon ruang status penyelesaian knapsack dengan algoritma branch and bound 0022.89 9.1020.12 0018.27 12.6123.7919.5 9.183.3619.4 13.95140.4917.84 12.6123.7917.43 10.45100.0616.6 9.183.3616.19 13.95140.4915.69 255.59 238.89 12.6123.7914.76 10.45100.0613.2 215.7 15.5198.4615.78 9.183.3612.3 13.95140.4914.78 14.4158.3115 12.6123.7913.63 13.5141.6114.32 10.45100.0611.76 10.9117.8812 15.5198.4615.64 216.28 9.183.3610.62 9.55101.1810.86 14.4158.3114.4 13.95140.4913.95 13.5141.6113.5 12.6123.7912.6 10.9117.8810.9 10.45100.0610.45 15.5198.4615.64 9.55101.189.55 9.183.369.1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 R STSU VW X VW Y VZ[ Z \] V _ U` TSa W [ b V c ` Ua \ [ V T V d e f Universitas Sumatera Utara 30 3.2.1 Pseudocode Pseudocode adalah deskripsi dari algoritma program komputer yang menggunakan struktur sederhana dari beberapa bahasa pemrograman, tetapi bahasa tersebut hanya ditujukan agar dapat dipahami manusia. Tujuan penggunaan utama dari pseudocode adalah untuk memudahkan manusia dalam memahami prinsip-prinsip dari suatu algoritma ataupun metode. Dari aplikasi sistem yang dibangun, pseudocode mengenai implementasi algoritma Branch and Bound akan di jabarkan seperti pada tabel 3.3 dibawah ini. Tabel 3.3 Kode Program Untuk Membuat Algoritma Branch and Bound No Kode 1 t1 = mysql_querySELECT FROM bb_temp ORDER BY density DESC; 2 n1 = array; k1 = array; p1 = array; f1 = array; 3 whilerow = mysql_fetch_arrayt1{ array_pushn1,row[food]; array_pushk1,row[kalori]; array_pushp1,row[protein]; array_pushf1,row[id_food]; } 4 function knapSolveFastw,v,i,aW,m { global numcalls; numcalls ++; echo Called with i=i, aW=aWbr; if issetm[i][aW] { return array m[i][aW], m[picked][i][aW] ; } else { if i == 0 { if w[i] = aW { m[i][aW] = v[i]; m[picked][i][aW] = arrayi; return arrayv[i],arrayi; Universitas Sumatera Utara 31 } else { m[i][aW] = 0; m[picked][i][aW] = array; return array0,array; } } list without_i,without_PI = knapSolveFastw, v, i-1, aW,m,pickedItems; if w[i] aW { m[i][aW] = without_i; m[picked][i][aW] = array; return arraywithout_i,array; } else { list with_i,with_PI = knapSolveFastw, v, i-1, aW - w[i],m,pickedItems; with_i += v[i]; if with_i without_i { res = with_i; picked = with_PI; array_pushpicked,i; } else { res = without_i; picked = without_PI; } m[i][aW] = res; m[picked][i][aW] = picked; return array res,picked; } } } 5 numcalls = 0; m = array; pickedItems = array; kalsql= mysql_querySELECT kal FROM kalori_temp; kal = mysql_fetch_arraykalsql; 6 list m4,pickedItems = knapSolveFastk1, p1, sizeofp1-1,kal[kal],m,pickedItems; Universitas Sumatera Utara 32 7 foreachpickedItems as key { totalVal += p1[key]; totalWt += k1[key]; echodiv class=temp div class=p1.n1[key].div div class=p2; takar=mysql_querySELECT FROM dkbm WHERE dkbm.id_food=f1[key]; tkr=mysql_fetch_arraytakar; ukur=tkr[ukuran]; gram=tkr[urt]; echoukur gram gram div div class=p3.p1[key].div div class=p4.k1[key].divdiv; } echo divdivbr; persen=totalWtklm[kal]100; kali=substrpersen,0,4; Keterangan : 1. Menampilkan seluruh data dari tabel bb_temp secara urut berdasarkan density. 2. Mendeklarasi variabel menjadi tipe data array. 3. Mendeklarasi kembali variabel menjadi array berindeks. 4. Fungsi pemecahan masalah k ghij h k k dengan lm h g k n hgo l pqgor 5. Mendeklarasi variabel baru dan nilai inisiasinya. 6. Pemecahan masalah dengan fungsi knapSolveFast berdasarkan variabel yang telah di deklarasikan. 7. Menampilkan hasil pemecahan masalah berupa Makanan yang dapat Anda Makan.

3.1 Flowchart Sistem Secara Umum