PENENTUAN MENU MAKANAN PENDERITA ASAM URAT
SKRIPSI
HEDI HERMAWAN HARAHAP
111421069
PROGRAM STUDI EKSTENSI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
SKRIPSI
Diajukan untuk melengkapi tugas akhir dan memenuhi syarat memperoleh ijazah
Sarjana Ilmu Komputer
HEDI HERMAWAN HARAHAP
111421069
PROGRAM STUDI EKSTENSI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
PERSETUJUAN
Judul
: IMPLEMENTASI ALGORITMA BRANCH AND
BOUND PADA PENENTUAN MENU MAKANAN
PENDERITA ASAM URAT
Kategori
: SKRIPSI
Nama
: HEDI HERMAWAN HARAHAP
Nomor Induk Mahasiswa : 111421069
Program Studi
: EKSTENSI S1 ILMU KOMPUTER
Departemen
: ILMU KOMPUTER
Fakultas
: ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
Diluluskan di
Medan, 11 Februari 2014
Komisi Pembimbing
:
Pembimbing 2
Pembimbing 1
Dian Rachmawati, S.Si, M.Kom
Dr. Poltak Sihombing, M.Kom
NIP. 19830723 200912 2 004
NIP. 19620317 199103 1 001
Diketahui/Disetujui oleh
Program Studi S1 Ilmu Komputer
Ketua,
PERNYATAAN
IMPLEMENTASI ALGORITMA BRANCH AND BOUND PADA
PENENTUAN MENU MAKANAN PENDERITA ASAM URAT
SKRIPSI
Saya mengakui bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa
kutipan dan ringkasan yang masing-masing telah disebutkan sumbernya.
Medan, 11 Februari 2014
PENGHARGAAN
Alhamdulillah, puji dan syukur ke hadirat Allah SWT, yang hanya dengan rahmat
dan izin-Nya penulis dapat menyelesaikan penyusunan skripsi ini, sebagai syarat untuk
memperoleh gelar Sarjana Komputer, pada Program Studi S1 Ilmu Komputer Fakultas
Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara.
Ucapan terima kasih penulis sampaikan kepada:
1.
Bapak Dr. Poltak Sihombing, M.Kom selaku Ketua Program Studi S1 Ilmu
Komputer dan selaku Dosen Pembimbing I yang telah memberikan bimbingan,
saran dan masukan kepada penulis dalam pengerjaan skripsi ini.
2.
Ibu Dian Rachmawati, S.Si, M.Kom selaku Dosen Pembimbing II yang telah
memberikan bimbingan, saran dan masukan kepada penulis dalam pengerjaan
skripsi ini.
3.
Bapak M. Andri Budiman, ST, M.Comp.Sc, MEM selaku Dosen Pembanding I
yang telah memberikan kritik dan saran dalam penyempurnaan skripsi ini.
4.
Bapak Handrizal, S.Si, M.Comp.Sc selaku Dosen Pembanding II yang telah
memberikan kritik dan saran dalam penyempurnaan skripsi ini.
5.
Seluruh tenaga pengajar dan pegawai di Program Studi S1 Ilmu Komputer
Fasilkom-TI USU.
6.
Ayahanda Drs. Hamron Harahap, Ibunda Fadillah Hasibuan S.Pd serta kakanda
Fadli Hardiansyah Harahap S.Kep, Ns yang selalu memberikan kasih sayang dan
dukungannya kepada penulis.
7.
Keluarga besar Ekstensi Ilmu Komputer, khususnya semua teman dan sahabat
angkatan 2011 yang tidak dapat disebutkan satu persatu, terima kasih atas ide,
saran, dan kerja samanya selama ini.
Semoga Allah SWT melimpahkan berkah kepada semua pihak yang telah
memberikan bantuan, perhatian, serta dukungan kepada penulis dalam menyelesaikan
skripsi ini. Akhirnya, semoga skripsi ini bermanfaat bagi pribadi, keluarga, masyarakat,
organisasi dan negara.
ABSTRAK
Penyakit asam urat erat kaitannya dengan pola makan. Jika pola makan tidak dirubah,
kadar asam urat dalam darah yang berlebihan akan menimbulkan penumpukan kristal
asam urat. Apabila kristal terbentuk dalam cairan sendi, maka akan terjadi penyakit gout
(asam urat). Kendala yang dialami oleh penderita asam urat dalam menentukan pola
makan adalah ketidakmampuan dalam menentukan jumlah kalori yang dibutuhkannya
dan pengetahuan yang kurang tentang pola makan sehat dan konsumsi gizi yang tepat
pada penderita asam urat. Penentuan menu makanan dapat diselesaikan dengan
menggunakan algoritma
Branch and Bound
dengan memperhatikan Tabel Angka
Kecukupan Gizi dan Daftar Komposisi Bahan Makanan (DKBM). Proses optimasi
dilakukan terhadap menu makanan pilihan
user
yang telah dihitung jumlah karbohidrat,
lemak, protein, dan kadar purin yang cocok sesuai dengan kalori perhari. Implementasi
sistem menggunakan bahasa pemrograman PHP dan MySQL. Hasil penelitian adalah
algoritma
Branch and Bound
telah berhasil diterapkan untuk mengoptimasi masalah
sehingga mampu menghasilkan daftar makanan yang dapat dikonsumsi oleh
user
.
THE IMPLEMENTATION OF ALGORITHMS BRANCH AND BOUND IN
THE DETERMINATION OF CUISINES PATIENTS OF URIC ACID
ABSTRACT
Uric acid disease closely related to diet. If the diet is not changed, the levels of uric acid
in the blood will cause excessive buildup of uric acid crystals. When the crystals form
in joints of liquid, then there will be disease gout (uric acid). The constraints
experienced by sufferers of gout in determining the pattern of eating is the inability to
determine the number of calories that it needs and knowledge that is less about the
pattern of healthy eating and proper nutrition consumption in people with gout.
Determination of food menu can be solved using Branch and Bound algorithm with
attention to the Tabel Angka Kecukupan Gizi and Daftar Komposisi Bahan Makanan
(DKBM). The optimization process done to the food menu selection the user who has
calculated the amount of carbohydrates, fats, proteins, and the levels of matching
according to purin calories per day. System implementation using the programming
language PHP and MySQL. Research results are Bound and Branch algorithms have
been successfully applied to optimizing problems so it is able to generate a list of foods
that can be consumed by the user.
DAFTAR ISI
Hal.
Persetujuan
ii
Pernyataan
iii
Penghargaan
iv
Abstrak
v
Abstract
vi
Daftar Isi
vii
Daftar Tabel
ix
Daftar Gambar
x
Daftar Lampiran
xi
Bab 1 Pendahuluan
1.1 Latar Belakang
1
1.2 Rumusan Masalah
2
1.3 Batasan Masalah
2
1.4 Tujuan Penelitian
3
1.5 Manfaat Penelitian
3
1.6 Metodologi Penelitian
3
1.7 Sistematika Penulisan
4
Bab 2 Landasan Teori
2.1 Algoritma
5
2.2 Algoritma Pencarian
6
2.3 Pohon
6
2.4 Pencarian Buta
7
2.4.1 Algoritma
Depth First Search
(DFS)
7
2.4.2 Algoritma
Breadth-First Search
(BFS)
9
2.4.3 Algoritma
Best First Search
10
2.5 Algoritma Optimasi
11
2.5.1 Algoritma
Branch and Bound
12
2.6
Knapsack Problem
13
2.6.1
Knapsack
dengan Algoritma
Greedy
14
2.6.2
Knapsack
dengan Algoritma
Branch and Bound
15
2.7 Asam Urat
17
2.7.1 Defenisi Asam Urat
17
2.7.2 Gejala Penyebab Asam Urat
18
2.7.3 Tahapan Asam Urat
19
Bab 3 Analisis dan Perancangan Sistem
3.1 Analisis Sistem
21
3.1.1 Analisis Masalah
21
3.1.2 Analisis Kebutuhan
22
3.1.2.1 Kebutuhan Fungsional
22
3.1.2.2 Kebutuhan Nonfungsional
22
3.2 Perancangan Algoritma
Branch and Bound
23
3.2.1 Pengkategorian Kalori Berdasarkan Umur
23
3.2.2 Penggolongan Asam Urat Berdasarkan Kadar Purin
24
3.2.3 Perhitungan Nilai Kalori Setiap Bahan Makanan
25
3.2.4 Proses Perhitungan Algoritma
Branch And Bound
27
3.2.5 Pseudocode
30
3.3
Flowchart
Sistem Secara Umum
32
3.4
Data Flow Diagram
(DFD)
33
3.4.1 Diagram Konteks
34
3.4.2
Data Flow Diagram
Level 1
35
3.4.3
Data Flow Diagram
Level 2 Proses 4
37
3.5 Kamus Data
38
3.6 Perancangan Antarmuka (Interface)
43
3.6.1 Daftar
43
3.6.2 Data Lengkap
43
3.6.3 Edit Data
44
3.6.4 Pemilihan Menu Makanan
45
3.6.5 Hasil Pemilihan
46
3.6.6 Daftar Menu Makanan
47
Bab 4 Implementasi Program
4.1 Spesifikasi Perangkat
48
4.1.1 Perangkat Keras
48
4.1.2 Perangkat Lunak
49
4.2 Penggunaan Program
49
4.2.1 Halaman Utama
49
4.2.1.1 Halaman Login
50
4.2.1.2 Halaman Daftar
51
4.2.1.3 Halaman Edit Data
52
4.2.2 Halaman Pemilihan Makanan
52
4.2.3 Halaman Administrator
53
4.3 Pengujian Sistem
53
Bab 5 Kesimpulan dan Saran
5.1 Kesimpulan
56
5.2 Saran
56
DAFTAR TABEL
Hal.
Tabel 2.1
Algoritma
greedy
pada
knapsack
15
Tabel 2.2
Contoh persoalan
knapsack
15
Tabel 3.1
Kalori Berdasarkan Umur
24
Tabel 3.2
Keterangan Kalori, Protein dan pi/bi
28
Tabel 3.3
Kode Program Untuk Membuat Algoritma Branch and Bound
30
Tabel 3.4
Tabel Admin
38
Tabel 3.5
Tabel akg_men
39
Tabel 3.6
Tabel bb_temp
39
Tabel 3.7
Tabel dkbm
39
Tabel 3.8
Tabel jenisk
40
Tabel 3.9
Tabel modul
40
Tabel 3.10
Tabel pasien
41
Tabel 3.11
Tabel kelompok
41
Tabel 3.12
Tabel umur
41
Tabel 3.13
Tabel food_temp
42
Tabel 3.14
Tabel golongan
42
DAFTAR GAMBAR
Hal.
Gambar 2.1
Struktur Data dari Pohon
7
Gambar 2.2
Tahapan pembentukan pohon DFS
7
Gambar 2.3
Matriks bidak
8
Gambar 2.4
Pohon ruang status yang terbentuk pencarian DFS
8
Gambar 2.5
Persoalan menyusun mainan yang terdiri atas 3 buah blok
9
Gambar 2.6
Pohon ruang status yang dibentuk selama pencarian solusi
dengan metode BFS
10
Gambar 2.7
Langkah-langkah yang dilakukan oleh algoritma
Best First Search
11
Gambar 2.8
Ilustrasi permasalahan
knapsack
pada penyakit asam urat
14
Gambar 2.9
Pohon ruang status yang terbentuk penyelesaian
knapsack
16
Gambar 3.1
Diagram Ishikawa Masalah Penelitian
21
Gambar 3.2
Pohon ruang status penyelesaian
knapsack
dengan algoritma
branch and bound
29
Gambar 3.3
Flowchart Sistem Secara Umum
33
Gambar 3.4
Diagram Konteks
34
Gambar 3.5
DFD Level 1
35
Gambar 3.6
DFD Level 2 Proses 4 Branch and Bound
37
Gambar 3.7
Halaman Daftar
43
Gambar 3.8
Halaman Data Lengkap
44
Gambar 3.9
Halaman Edit Data
45
Gambar 3.10
Halaman Pemilihan Menu Makanan
46
Gambar 3.11
Halaman Hasil Pemilihan Menu Makanan
46
Gambar 3.12
Halaman Daftar Menu Makanan
47
Gambar 4.1
Halaman Utama
49
Gambar 4.2
Halaman Login
50
Gambar 4.3
Halaman Informasi Login Kembali
50
Gambar 4.4
Halaman Daftar
51
Gambar 4.5
Halaman Data User
51
Gambar 4.6
Halaman Edit Data
52
Gambar 4.7
Halaman Pemilihan Menu Makanan
52
Gambar 4.8
Halaman Data Makanan Administrator
53
Gambar 4.9
Halaman Daftar User Baru
53
Gambar 4.10
Halaman Profil User
54
Gambar 4.11
Halaman Halaman Pemilihan Menu Makanan
54
Gambar 4.12
Halaman Keterangan Makanan
55
DAFTAR LAMPIRAN
Hal.
A.
Listing
Program
A-1
B. Daftar Kandugan Bahan Makanan (DKBM) Tahun 2005
B-1
C. Tabel Angka Kecukupan Gizi 2004 bagi Orang Indonesia
C-1
D. Daftar Makanan Yang Harus Dipantang Dan Diperbolehkan
Bagi Penderita Asam Urat
D-1
E. Ukuran Rumah Tangga (URT)
E-1
ABSTRAK
Penyakit asam urat erat kaitannya dengan pola makan. Jika pola makan tidak dirubah,
kadar asam urat dalam darah yang berlebihan akan menimbulkan penumpukan kristal
asam urat. Apabila kristal terbentuk dalam cairan sendi, maka akan terjadi penyakit gout
(asam urat). Kendala yang dialami oleh penderita asam urat dalam menentukan pola
makan adalah ketidakmampuan dalam menentukan jumlah kalori yang dibutuhkannya
dan pengetahuan yang kurang tentang pola makan sehat dan konsumsi gizi yang tepat
pada penderita asam urat. Penentuan menu makanan dapat diselesaikan dengan
menggunakan algoritma
Branch and Bound
dengan memperhatikan Tabel Angka
Kecukupan Gizi dan Daftar Komposisi Bahan Makanan (DKBM). Proses optimasi
dilakukan terhadap menu makanan pilihan
user
yang telah dihitung jumlah karbohidrat,
lemak, protein, dan kadar purin yang cocok sesuai dengan kalori perhari. Implementasi
sistem menggunakan bahasa pemrograman PHP dan MySQL. Hasil penelitian adalah
algoritma
Branch and Bound
telah berhasil diterapkan untuk mengoptimasi masalah
sehingga mampu menghasilkan daftar makanan yang dapat dikonsumsi oleh
user
.
THE IMPLEMENTATION OF ALGORITHMS BRANCH AND BOUND IN
THE DETERMINATION OF CUISINES PATIENTS OF URIC ACID
ABSTRACT
Uric acid disease closely related to diet. If the diet is not changed, the levels of uric acid
in the blood will cause excessive buildup of uric acid crystals. When the crystals form
in joints of liquid, then there will be disease gout (uric acid). The constraints
experienced by sufferers of gout in determining the pattern of eating is the inability to
determine the number of calories that it needs and knowledge that is less about the
pattern of healthy eating and proper nutrition consumption in people with gout.
Determination of food menu can be solved using Branch and Bound algorithm with
attention to the Tabel Angka Kecukupan Gizi and Daftar Komposisi Bahan Makanan
(DKBM). The optimization process done to the food menu selection the user who has
calculated the amount of carbohydrates, fats, proteins, and the levels of matching
according to purin calories per day. System implementation using the programming
language PHP and MySQL. Research results are Bound and Branch algorithms have
been successfully applied to optimizing problems so it is able to generate a list of foods
that can be consumed by the user.
PENDAHULUAN
1.1. Latar Belakang
Asam urat sudah dikenal sejak 2.000 tahun yang lalu dan menjadi salah satu penyakit
tertua yang dikenal manusia. Dulu, penyakit ini juga disebut "penyakit para raja" karena
penyakit ini diasosiasikan dengan kebiasaan mengonsumsi makanan dan minuman yang
enak-enak. Penyakit asam urat erat kaitannya dengan pola makan. Salah satu cara
penyembuhan tentu dengan mengontrol asupan makanan. Jika pola makan tidak
dirubah, kadar asam urat dalam darah yang berlebihan akan menimbulkan penumpukan
kristal asam urat. Apabila kristal terbentuk dalam cairan sendi, maka akan terjadi
penyakit gout (asam urat).
Berdasarkan jurnal penelitian
Best Practice & Research Clinical Rheumatology
pada tahun 2010, terhadap 4683 orang dewasa menunjukkan bahwa angka prevalensi
gout dan hiperurisemia di Indonesia pada pria adalah masing-masing 1,7 dan 24,3%.
Dimana rasio perbandingan laki-laki dan perempuan adalah 34:1 untuk gout, dan 2:1
untuk hiperurisemia. [1]
Menurut data yang diperoleh dari Rumah Sakit Nasional Cipto Mangunkusumo
(RSCM), Jakarta, penderita penyakit gout dari tahun ketahun semakin meningkat dan
terjadi kecenderungan diderita pada usia yang semakin muda. Hal ini tebukti dengan
hasil rekam medik RSCM pada tahun 1993-1995 mengalami kenaikan yaitu pada tahun
1993 tercatat 18 kasus, pria 13 kasus dan wanita 5 kasus (1 kasus umur 2 - 25 tahun, 12
kasus umur 30-50 tahun, dan 5 kasus umur > 65 tahun). Pada tahun 1995 jumlah kasus
yang tercatat adalah 46 kasus, 37 pria dan 9 wanita ( 2 kasus umur 2-25 tahun, 40 kasus
umur 30-50 tahun dan 4 kasus umur > 65 tahun ). Jadi prevalensi kejadian gout lebih
banyak terjadi antara umur 30-50 tahun. [21]
Oleh sebab itulah, penulis tertarik untuk membuat penelitian ini yang
purin tanpa mengurangi asupan gizi seimbang. Masalah tersebut akan diselesaikan
dengan menggunakan Algoritma
branch and bound
dengan memperhatikan Tabel
Angka Kecukupan Gizi Tahun 2004 [2] dan Daftar Komposisi Bahan Makanan
(DKBM).[3]
1.2. Rumusan Masalah
Masalah yang akan diselesaikan pada penelitian ini adalah :
1. Bagaimana mengoptimalkan menu makanan penderita asam urat yang sesuai
dengan Angka Kecukupan Gizi tanpa menimbulkan kambuhnya asam urat.
2. Bagaimana menerapkan algoritma
branch and bound
untuk mengoptimalkan
menu makanan penderita asam urat
1.3. Batasan Masalah
Batasan masalah yang dapat diambil dari latar belakang di atas adalah :
1. Pengguna dari aplikasi ini adalah penderita asam urat.
2. Sumber asam urat berasal dari buku Bebas Penyakit Asam Urat Tanpa Obat,
sedangkan Tabel Angka Kecukupan Gizi bagi Orang Indonesia dan Daftar
Komposisi Bahan Makanan (DKBM) berasal dari Departemen Kesehatan RI.
3. Penelitian tidak membahas hubungan antara jumlah kalori dan jumlah purin pada
setiap bahan makanan.
4. Masalah yang akan diselesaikan adalah pengoptimalan menu makanan penderita
semua golongan asam urat dengan memperhatikan keluaran dari aplikasi berupa
daftar menu makanan dan daftar kandungan bahan makanan.
5. Keluaran dari aplikasi ini berupa daftar menu makanan berdasarkan tingkat purin
per makanan dan kalori yang dibutuhkan.
6. Masukan dari pengguna berupa jenis kelamin, golongan asam urat, umur, berat
badan, dan menu makanan yang dinginkan.
7. Pembahasan hanya dibatasi pada analisa dan perancangan aplikasi dengan
menggunakan bahasa pemrograman PHP,
Database Management System
MySql,
1.4. Tujuan Penelitian
Tujuan dari penelitian ini adalah menciptakan sebuah aplikasi menu makanan berbasis
web
bagi penderita semua jenis asam urat.
1.5. Manfaat Penelitian
Penelitian ini diharapkan dapat bermanfaat bagi penderita asam urat untuk menentukan
menu makanan serta memberi gambaran bahwa optimisasi dapat digunakan pada
masalah kesehatan khususnya penyakit asam urat.
1.6. Metodologi Penilitian
Metode penelitian yang akan dilakukan dalam penyelesaian skripsi ini adalah :
1. Studi Literatur
Tahap ini dilakukan dengan mempelajari referensi bahan literatur, mengumpulkan
informasi yang berkaitan algoritma
branch and bound
,
knapsack
, dan asam urat.
2. Analisis dan Perancangan Sistem
Merancang solusi dalam bentuk aplikasi menggunakan model struktur analisis
fungsional, non fungsional /
flowchart
,
Data Flow Diagram
(
DFD
), dan kamus data.
3. Implementasi
Tahap ini dilakukan dengan mengimplementasikan model dan skema pada tahap
perancangan. Model dan skema diterapkan kedalam bahasa pemrograman PHP
yang dipadukan dengan penggunaan CSS. Di tahap ini akan dihasilkan aplikasi
web
penentuan menu makanan penderita asam urat.
4. Pengujian
Pengujian difokuskan pada pengoptimalan menu makanan tanpa menimbulkan
asam urat pada aplikasi yang digunakan.
5. Dokumentasi
Dokumentasi dihasilkan dengan membuat skripsi sebagai laporan dari hasil
1.7. Sistematika Penulisan
Sistematika penulisan dari skripsi ini terbagi dari lima bab, yaitu sebagai berikut :
BAB 1 : PENDAHULUAN
Bab ini akan menjelaskan mengenai latar belakang pemilihan judul, perumusan
masalah, pembatasan masalah, tujuan penelitian, manfaat penelitian, metodologi, dan
sistematika penulisan.
BAB 2 : LANDASAN TEORI
Bab ini akan membahas teori-teori yang berkaitan dengan algoritma, pohon, algoritma
Breadth-First Search, Depth First Search, Best First Search, dan Branch and Bound.
Serta algoritma G
reedy
, asam urat, dan informasi tambahan yang berhubungan dengan
skripsi ini.
BAB 3 : ANALISIS DAN PERANCANGAN SISTEM
Bab ini terdiri dari merancang solusi dalam bentuk aplikasi menggunakan model
struktur analisis fungsional, non fungsional /
flowchart
,
Data Flow Diagram
(
DFD
),
dan kamus data.
BAB 4 : IMPLEMENTASI PROGRAM
Bab ini membahas tentang cara kerja dari hasil implementasi berupa aplikasi dan
mengulas analisis hasil pengujian terhadap implementasi algoritma
Branch and Bound
pada penentuan menu makanan penderita asam urat, apakah menemukan kesalahan atau
tidak.
BAB 5 : KESIMPULAN DAN SARAN
Bab terakhir ini akan memuat kesimpulan isi dari keseluruhan uraian bab-bab
sebelumnya dan saran-saran dari hasil yang diperoleh yang diharapkan dapat
t
Asal kata algoritma berasal dari nama penulis buku arab yang terkenal yaitu Abu Ja far
Muhammad Ibnu Musa Al-Khuwarizmi. Al-Khuwarizmi dibaca orang barat menjadi
a
lgorism.
Al-Khuwarizmi menulis buku yang berjudul
Kitab Al Jabar Wal-Muqabala
yang artinya Buku pemugaran dan pengurangan (
The book of restoration and
reduction
). Dari judul buku itu kita juga memperoleh akar kata Aljabar (
Algebra
).
Perubahan kata dari
algorism
menjadi
algorithm
muncul karena kata
algorism
sering dikelirukan dengan
arithmetic
, sehingga akhiran
sm
berubah menjadi
thm.
Karena perhitungan dengan angka Arab sudah menjadi hal yang biasa, maka lambat
laun kata
algorithm
berangsur-angsur dipakai sebagai metode perhitungan (komputasi)
secara umum, sehingga kehilangan makna kata aslinya. Dalam bahasa Indonesia, kata
algorithm
diserap menjadi algoritma
.
[10]
Terdapat beberapa definisi mengenai kata algoritma, antara lain :
1. Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang
disusun secara sistematis. [11]
2. Algoritma adalah
urutan logis pengambilan suatu
keputusan dalam
memecahkan suatu permasalahan. [12]
t
!carian
Pencarian adalah suatu proses mencari solusi dari suatu permasalahan melalui
sekumpulan kemungkinan ruang keadaan (
state space
). Ruang keadaan merupakan
suatu ruang yang berisi semua keadaan yang mungkin. Dalam ilmu komputer, sebuah
algoritma pencarian dijelaskan secara luas merupakan algoritma yang menerima
masukan berupa sebuah masalah dan menghasilkan sebuah solusi untuk masalah
tersebut, yang biasanya didapat dari evaluasi beberapa kemungkinan solusi.
Himpunan semua kemungkinan solusi dari sebuah masalah disebut ruang
pencarian. Algortima pencarian
brute-force
atau pencarian
uninformed
menggunakan
metode yang sederhana dan sangat intuitif pada ruang pencarian, sedangkan algoritma
pencarian
informed
menggunakan heuristik untuk menerapkan pengetahuan tentang
struktur dari ruang pencarian untuk berusaha mengurangi banyaknya waktu yang
dipakai dalam pencarian [14]
2.3.
Pohon
Untuk menghindari kemungkinan adanya proses pelacakan suatu
node
secara berulang,
maka digunakan struktur pohon. Sebuah pohon adalah suatu struktur data yang
digunakan secara luas yang menyerupai struktur pohon dengan sejumlah simpul yang
terhubung. Pohon adalah graf tak-berarah terhubung yang tidak mengandung sirkuit.
Dengan setiap kemungkinan solusi dianggap sebagai sebuah simpul dan akar dari
pohon, banyak algoritma yang menggunakan ruang solusi berupa pohon ini karena lebih
memudahkan dalam penelusuran solusi yang ada berupa simpul-simpul pohon. [4]
"# $
bar 2.1 Struktur Data dari Pohon.
[5]
2.4.
Pencarian Buta
2.4.1.
Algoritma Depth First Search (DFS)
Pencarian dengan metode ini dilakukan dari
node
awal secara mendalam hingga yang
paling akhir (
dead-end
) atau sampai ditemukan. Dengan kata lain, simpul cabang atau
anak yang terlebih dahulu dikunjungi.[15] Sebagai ilustrasinya dapat dilihat pada
gambar 2.2.
0
1 4
0
2 3 5 6
1 4
0
2 3 5
1 4
0
2 3
2 1
0
3 0
1
2 1
0
(i) (ii) (iii) (iv) (v) (vi) (vii)
Gambar 2.2 Tahapan pembentukan pohon DFS
[7]
Algoritma DFS:
1. Masukkan simpul akar ke dalam antrian Q (
Queue
) . Jika simpul akar = simpul
solusi, maka Stop.
2. Jika Q kosong, tidak ada solusi. Stop.
3. Ambil simpul v dari kepala (
head
) antrian. Jika kedalaman simpul v sama
dengan batas kedalaman maksimum, kembali ke langkah 2.
anak dari simpul v adalah simpul tujuan, berarti solusi telah ditemukan, kalau
tidak, kembali lagi ke langkah 2.
Penerapan DFS dapat dilihat pada contoh dibawah ini.
Sebuah bidak (pion) bergerak di dalam sebuah matriks pada gambar 2.3. Bidak dapat
memasuki elemen matriks mana saja pada baris paling atas. Dari elemen matriks yang
berisi 0, bidak dapat bergerak ke bawah jika elemen matriks di bawahnya berisi 0; atau
berpindah horizontal (kiri atau kanan) jika elemen di bawahnya berisi 1. Bila bidak
berada pada elemen yang berisi 1, ia tidak dapat bergerak kemanapun. Tujuan
permainan ini adalah mencapai elemen matriks yang mengandung 0 pada baris paling
bawah.
%& '
bar 2.3 Matriks bidak
Operator yang digunakan:
DOWN pindahkan bidak satu posisi ke bawah
LEFT
pindahkan bidak satu posisi ke kiri
RIGHT pindahkan bidak satu posisi ke kanan
S6 (3,2) S5 (3,1) S4 (2,1) S7 (2,3) S10 (2,2) S11 (2,1) S12 (3,1) S13 (2,3) S15 (2,4) S16 (3,4) S17 (4,4) S3 (2,2) S9 (1,2) S14 (1,4) S2 (1,2) S8 (1,3) S18 (1,4) S1 (1,1) S0 S6 (3,2) S5 (3,1) S4 (2,1) S7 (2,3) S10 (2,4) S11 (3,4) S12 (4,4) S3 (2,2) S9 (1,4) S2 (1,2) S8 (1,3) S13 (1,4) S1 (1,1) S0
Gambar 2.4 Pohon ruang status yang terbentuk pencarian DFS
[7]
1
2
3
4
1
1
0
0
0
2
0
0
1
0
3
0
1
0
0
2.4.2.
Algoritma Breadth-First Search (BFS)
Algoritma BFS adalah salah satu teknik pencarian sederhana, dimana pada teknik ini
simpul akar dikembangkan terlebih dahulu, kemudian simpul-simpul yang dihasilkan
dari simpul akar dikembangkan lagi selanjutnya. Umumnya, semua simpul-simpul pada
kedalaman
d
di pohon pencarian dikembangkan sebelum pada kedalaman
d+1
. Dalam
suatu pencarian, dimungkinkan adanya suatu pengulangan pengembangan simpul yang
tidak terbatas.
Hal ini akan menghabiskan waktu pencarian dengan mengembangkan
node
yang
sudah diperluas sebelumnya. Seperti keadaan pengulangan {(1,2,3), (1), (2,3), (1,2,3),
(1), (2), (3), (1,2,3),
}. Pencarian untuk permasalahan ini adalah tanpa batas. Untuk
menghindarinya, dapat dipotong sebagian dari keadaan yang yang diulangi menuju ke
suatu ukuran terbatas. Ada tiga metode yang berhubungan dengan keadaan yang
diulangi, salah satunya adalah tidak kembali pada keadaan yang baru saja didatangi,
fungsi perluasan simpul harus mencegah terjadinya pengembangan simpul dari simpul
orang-tua (
parent
) yang sama [6]. Seperti contoh berikut dimana sebuah mainan yang
terdiri atas 3 buah blok (dinomori 1, 2, dan 3) pada gambar 2.5.
1
2
3
3
2
1
(a) Susunan awal
(b) Susunan akhir
() *
bar 2.5 Persoalan menyusun mainan yang terdiri atas 3 buah blok
[7]
Prinsip dari persoalan menyusun mainan ini adalah :
1. Operator perpindahan : Pindahkan X ke Y , yang berarti memindahkan objek
X ke atas objek yang lain.
2. Pada setiap saat, hanya satu buah blok yang boleh dipindahkan.
3. Operator tidak digunakan untuk membangkitkan status yang sama lebih dari
satu kali.
1
2 3
3 2
1 3
1
2 2
1 3
1 3 2
1 2 3
3 2
1 2
3
1 3
1 2
1 2 3
3 2 1
S0:
S1: S2:
S3:
S4: S5: S6: S7:
S8:
S9: S10:
+, -
bar 2.6 Pohon ruang status yang dibentuk
selama pencarian solusi dengan metode BFS
[7]
Dengan mengikuti lintasan dari simpul akar (S0) ke simpul solusi (S10), kita
memperoleh konfigurasi urutan perpindahan blok dari status awal sampai ke status
akhir. Dengan metode BFS, jika terdapat sebuah solusi, maka BFS menjamin dapat
menemukannya, dan jika terdapat lebih dari satu buah solusi, BFS selalu menemukan
solusi pertama pada aras pohon yang paling rendah.[7]
2.4.3.
Algoritma Best First Search
terpilih dan selanjutnya akan dibangkitkan semua suksesor B. Demikian seterusnya
sampai ditemukan
node
tujuan.
./ 0
bar 2.7 Langkah-langkah yang dilakukan
oleh algoritma
Best First Search
[16]
2.5.
Algoritma Optimasi
Algoritma Optimasi (
Optimization Algorithms)
didefenisikan sebagai suatu cabang
ilmu dari matematika terapan dan analisa numerik yang membahas optimasi dengan
kriteria yang bersifat tunggal, ganda atau bahkan mungkin konflik. Kriteria
diekspresikan sebagai himpunan fungsi matematika F = {f1, f2,
, fn} yang disebut
fungsi-fungsi objektif. [17]
Algoitma optimasi sedikit berbeda dengan algoritma pencarian (
search
algorithmn
). Pada algoritma pencarian terdapat suatu kriteria tertentu yang menyatakan
apakah elemen
xi
merupakan solusi atau bukan. Sebaliknya pada algoritma optimasi
mungkin tidak terdapat kriteria tersebut, melainkan hanya fungsi-fungsi objektif yang
Step 2
Step 1
Step 3
A
bisa dikatakan sebagai generalisasi dari algoritma pencarian atau dengan kata lain,
algoritma pencarian adalah kasus khusus dari algoritma optimasi. Salah satu algoritma
optimasi adalah algoritma
Branch and Bound
.
2.5.1. Algoritma Branch and Bound
Sebagaimana pada algortima
backtracking
, algoritma
Branch & Bound (B&B)
juga
merupakan metode pencarian di dalam ruang solusi secara sistematis. Ruang Solusi
diorganisasikan ke dalam pohon ruang status. Pembentukan pohon ruang status pada
algoritma B&B berbeda dengan pembentukan pohon pada algoritma runutbalik. Bila
pada algoritma
backtracking
ruang solusi dibangun secara
Depth-First Search
(DFS),
maka pada algoritma B&B ruang solusi dibangun dengan skema
Breadth-First Search
(BFS).
Pada algoritma B&B, pencarian ke simpul solusi dapat dipercepat dengan
memilih simpul hidup berdasarkan nilai ongkos (
cost
). Setiap simpul hidup
diasosiasikan dengan sebuah ongkos yang menyatakan nilai batas (
bound
). Simpul
hidup yang menjadi simpul-E ialah simpul yang mempunyai nilai batas terkecil (strategi
pencarian berdasarkan biaya terkecil (
least cost search
)). Pada prakteknya, nilai batas
untuk setiap simpul umumnya berupa taksiran atau perkiraan. Fungsi heuristik untuk
menghitung taksiran nilai tersebut dinyatakan secara umum sebagai :
c(
i
) = f(
i
) + g(
i
)
yang dalam hal ini,
c (i) = ongkos untuk simpul i
f (i) = ongkos mencapai simpul i dari akar
g (i) = ongkos mencapai simpul tujuan dari simpul akar i (perkiraan)
Nilai c digunakan untuk mengurutkan pencarian. Simpul berikutnya yang dipilih
untuk diekspansi adalah simpul yang memiliki c minimum (simpul-E). Strategi memilih
simpul-E seperti ini dinamakan strategi pencarian berdasarkan biaya terkecil (
least cost
search
).
Prinsip dari algoritma
Branch and Bound
ini adalah :
2. Jika
Q
kosong, tidak ada solusi . Stop.
3.
Jika
Q
tidak kosong, pilih dari antrian
Q
simpul
I
yang mempunyai (
i
) paling
kecil. Jika terdapat beberapa simpul
i
yang memenuhi, pilih satu secara
sembarang.
4. Jika simpul
i
adalah simpul solusi, berarti solusi sudah ditemukan, stop. Jika
simpul
i
bukan simpul solusi, maka bangkitkan semua anak-anaknya. Jika
i
tidak
mempunyai anak, kembali ke langkah 2.
5. Untuk setiap anak
j
dari simpul
i
, hitung (
j
), dan masukkan semua anak-anak
tersebut ke dalam antrian
Q
.
6. Kembali ke langkah 2. [4]
1232
Knapsack problem
Knapsack problem
adalah suatu masalah bagaimana cara menentukan pemilihan barang
dari sekumpulan barang dimana setiap barang tersebut mempunyai berat dan profit
masing-masing, sehingga dari pemilihan barang tersebut didapatkan profit yang
maksimum. Dalam penelitian ini, barang digantikan dengan makanan yang diterapkan
dalam penentuan menu makanan penderita asam urat. Dimana setiap jenis makanan
mempunyai tingkat purin, kalori, protein, dan lemak masing-masing. Sehingga dari
penentuan makanan tersebut didapatkan asupan gizi yang maksimum.
45 6
bar 2.8 Ilustrasi permasalahan
knapsack
pada penyakit asam urat
2.6.1. Knapsack dengan Algoritma Greedy
Algoritma
Greedy
merupakan metode yang paling populer untuk memecahkan
persoalan optimasi. Salah satu masalah yang sering di selesaikan adalah masalah
knapsack
. Terdapat beberapa strategi
greedy
yang heuristik yang dapat digunakan untuk
memilih objek yang akan dimasukkan ke dalam
knapsack
, antara lain :
1. Greedy by profit.
a. Pada setiap langkah, pilih objek yang mempunyai keuntungan terbesar.
b. Mencoba memaksimumkan keuntungan dengan memilih objek yang paling
menguntungkan terlebih dahulu.
2. Greedy by weight.
a. Pada setiap langkah, pilih objek yang mempunyai berat teringan.
3.
Greedy by density
.
a. Pada setiap langkah,
knapsack
diisi dengan objek yang mempunyai p
i/w
iterbesar.
b. Mencoba memaksimumkan keuntungan dengan memilih objek yang
mempunyai keuntungan per unit berat terbesar.
4. Pemilihan objek berdasarkan salah satu dari ketiga strategi di atas
tidak menjamin
akan memberikan solusi optimal. [19]
Penerapan algoritma
Greedy
pada persoalan
knapsack
seperti contoh berikut.
Kapasitas
knapsack
K = 100.
789 :;<=>? ;@ABC
t
D8greedy
pada
knapsack
[19]
Properti Objek
Greedy by
Solusi
Optimal
i
wi
pi
pi/wi
profit
weight
density
1
100
40
0,4
1
0
0
0
2
50
35
0,7
0
0
1
1
3
45
18
0,4
0
1
0
1
4
20
4
0,2
0
1
1
0
5
10
10
1,0
0
1
1
0
6
5
2
0,4
0
1
1
1
Total bobot
100
80
85
100
Total keuntungan
40
34
51
55
2.6.2. Knapsack dengan Algoritma Branch and Bound
Penerapan algoritma B&B pada persoalan
knapsack
seperti contoh berikut.
Tabel 2.2 Contoh persoalan
knapsack
Item Berat (kg) Profit Profit / Berat
1
4
$40
10
2
7
$42
6
3
5
$25
5
4
3
$12
4
Kapasitas maksimum = 10 kg
membutuhkan solusi optimal. Berbeda halnya dengan metode
lower bounding
yang
berfungsi untuk menentukan suatu batas bawah dari fungsi objektif.
Untuk menghitung batas atas (
upper bound
), digunakan :
Penyelesaian :
Untuk mencari ub maksimum (keuntungan terbesar) adalah :
Ambil 0 item, masukkan
density maximum
dari item
ub = 0 + (10
–
0)*(10) = $100
Setelah kita mengambil 1 item, kita hitung
upper bound
dengan :
Semua bagian item 1 (4, $40) + sebagian dari item 2 (7, $42)
ub = $40 + (10-4)*6 = $76
Jika tidak mengambil item 1, maka :
ub = (10
–
0) * ($6) = $60
w = 0, v = 0 ub = 100
w = 4, v = 40
ub = 76 w = 0, v = 0
ub = 60
w = 11 w = 4, v = 40
ub = 70
w = 9, v = 65
ub = 69 w = 4, v = 40
ub = 64
w = 12 w = 9, v = 65
ub = 65
EF G
bar 2.9 Pohon ruang status yang terbentuk penyelesaian
knapsack
[18]
ub = p + (B
–
b)*(pi+1/bi+1)
1
3
2
4
with
1
without 1
with
2
without
2
with
3
with
4
without
4
5
6
7
8
inferior to
node 8
tidak
feasible
tidak
feasible
inferior to
node 8
optimal solution
without
3
lebih rendah dari
node
8
lebih rendah dari
node
8
4
4
2
without
1
dimana :
p = Profit
HIJI K LMNOPM Q
2.7.1. Defenisi Asam Urat
Asam urat adalah asam yang berbentuk kristal-kristal yang merupakan hasil akhir dari
metabolisme purin (bentuk turunan nukleoprotein), yaitu salah satu komponen asam
nukleat yang terdapat pada inti sel-sel tubuh. Secara alamiah, purin terdapat dalam
tubuh kita dan dijumpai pada semua makanan dari sel hidup, yakni makanan dari
tanaman (sayur, buah, kacang-kacangan) atau pun hewan (daging, jeroan, ikan sarden).
Setiap orang memiliki asam urat di dalam tubuh karena pada setiap metabolisme
normal dihasilkan asam urat. Asam urat yang terdapat di dalam tubuh kita tentu saja
kadarnya tidak boleh berlebihan. Asam urat dapat berlebih disebabkan adanya pemicu,
yaitu makanan dan senyawa lain yang banyak mengandung purin. Sesungguhnya tubuh
menyediakan 85 persen senyawa purin untuk kebutuhan setiap hari, hal ini berarti
bahwa kebutuhan purin dari makanan hanya sekitar 15 persen. Asam urat pun dapat
merupakan faktor risiko untuk penyakit jantung koroner.
Kristal asam urat akan merusak
endotel
(lapisan bagian dalam pembuluh darah)
koroner Karena itu siapapun yang kadar asam uratnya tinggi harus berupaya untuk
menurunkannya agar kerusakan tidak merembet ke organ-organ tubuh yang lain. Dalam
kaitan ini juga terdapat fungsi ginjal yang bekerja mengatur kestabilan kadar asam urat
dalam tubuh dimana sebagian sisa asam urat dibuang melalui air seni.
Apabila asam urat berlebihan dan ginjal tidak mampu lagi mengatur
kestabilannya, maka asam urat in akan menumpuk pada jaringan dan sendi, dan pada
saat kadar asam urat tinggi maka akan timbul rasa nyeri yang hebat terutama pada
daerah persendian.
Pada umumnya para pria lebih banyak terserang asam urat, dan kadar asam urat
kaum pria cenderung meningkat sejalan dengan peningkatan usia. Sedangkan Pada
wanita pada wanita presentasinya lebih kecil, dimana peningkatannya juga cenderung
berjalan sejak dimulainya masa
menopause.
Jadi selama seorang wanita mempunyai hormon
estrogen
, maka pembuangan
asam uratnya ikut terkontrol. Ketika sudah tidak mempunyai
estrogen
, seperti saat
menopause
, barulah wanita tersebut dapat terkena asam urat. Kalau peningkatan asam
urat ini melewati ambang batas yang bisa ditolerir, maka persoalan akan timbul pertama
adalah pada ginjal, sendi, dan saluran kemih. Kadar asam urat normal pada pria dan
wanita berbeda. Kadar asam urat normal pada pria berkisar 3,5
7 mg/dl dan pada
wanita 2,6
6 mg/dl. Kadar asam urat diatas normal disebut hiperurisemia.[8]
2.7.2. Gejala / Penyebab Asam Urat
Sekitar 90% penyakit asam urat disebabkan oleh ketidakmampuan ginjal membuang
asam urat secara tuntas dari tubuh melalui air seni. Sebagian kecil lainnya karena tubuh
memproduksi asam urat secara berlebihan. Penyakit asam urat kebanyakan diderita oleh
pria di atas 40 tahun dan wanita yang telah menopause. Penderita asam urat biasanya
juga memiliki keluhan lain seperti tekanan darah tinggi, penyakit ginjal, diabetes dan
aterosklerosis. Separuh dari penderita asam urat adalah orang yang kegemukan. Apabila
dibiarkan, maka penyakit asam urat bisa berkembang menjadi batu ginjal dan
mengakibatkan gagal ginjal.
Gejala khas dari asam urat atau artritis gout adalah serangan akut biasanya
bersifat monoartikular (menyerang satu sendi saja), disertai dengan gejala
pembengkakan, kemerahan, nyeri hebat, panas dan gangguan gerak dari sendi yang
terserang yang terjadi mendadak (akut) yang mencapai puncaknya kurang dari 24 jam.
2.7.3. Tahapan Asam Urat
Tahap pertama disebut tahap gout artritis akut
Pada tahap ini penderita akan mengalami serangan artritis yang khas dan serangan
tersebut akan menghilang tanpa pengobatan dalam waktu 5
7 hari. Karena cepat
menghilang, maka sering penderita menduga kakinya keseleo atau kena infeksi
sehingga tidak menduga terkena penyakit gout dan tidak melakukan pemeriksaan
lanjutan.
Tahap kedua disebut sebagai tahap artritis gout intermiten akut.
Setelah melewati masa gout interkritikal selama bertahun-tahun tanpa gejala,
penderita akan memasuki tahap ini, ditandai dengan serangan artritis yang khas.
Selanjutnya penderita akan sering mendapat serangan (kambuh) yang jarak antara
serangan yang satu dan serangan berikutnya makin lama makin rapat dan lama,
serangan makin lama makin panjang, serta jumlah sendi yang terserang makin
banyak.
Tahap ketiga disebut sebagai tahap gout artritis kronik bertofus.
Tahap ini terjadi bila penderita telah menderita sakit selama 10 tahun atau lebih.
Pada tahap ini akan terjadi benjolan-benjolan di sekitar sendi yang sering meradang
yang disebut sebagai tofus. Tofus ini berupa benjolan keras yang berisi serbuk
seperti kapur yang merupakan deposit dari kristal monosodium urat. Tofus ini akan
mengakibatkan kerusakan pada sendi dan tulang di sekitarnya. Tofus pada kaki bila
ukurannya besar dan banyak akan mengakibatkan penderita tidak dapat
menggunakan sepatu lagi.
2.7.4. Penggolongan Asam Urat
Penyakit asam urat digolongkan menjadi penyakit gout primer dan penyakit gout
sekunder :
Penyakit gout primer
Penyakit gout sekunder
Penyakit ini disebabkan antara lain karena meningkatnya produksi asam urat karena
nutrisi, yaitu mengonsumsi makanan dengan kadar purin yang tinggi.
Pada keadaan normal, kandungan asam urat dalam tubuh adalah :
a. Pria
: 3,7
7 mg/dL
b. Wanita : 2,4
5,7 mg/dL
Penderita asam urat di golongkan berdasarkan kandungan asam urat yaitu :
1. Golongan I
a. Pria
: 7
8,5 mg/dL
b. Wanita : 5,8
7 mg/dL
2. Golongan II
a. Pria
: 8,5
9 mg/dL
b. Wanita : 7
8 mg/dL
3. Golongan III
ANALISIS DAN PERANCANGAN SISTEM
3.1
Analisis Sistem
Analisis sistem terdiri dari fase-fase berbeda yang mendeskripsikan pengembangan
sistem. Dalam tugas akhir ini, ada dua fase analisis yaitu: analisis masalah, dan analisis
kebutuhan. Analisis masalah bertujuan untuk memahami kelayakan masalah. Analisis
kebutuhan dilakukan untuk menjelaskan fungsi-fungsi yang ditawarkan dan mampu
dikerjakan sistem.
3.1.1
Analisis Masalah
Penentuan menu makanan bagi penderita asam urat merupakan suatu hal yang sulit bagi
penderita asam urat itu sendiri. Hal ini terjadi karena setiap makanan memiliki kadar
purin masing-masing. Masalah penelitian ini secara umum ditunjukkan pada gambar
3.1, yaitu diagram Ishikawa (
fishbone/cause and effect diagram
).
Gambar 3.1 Diagram Ishikawa Masalah Penelitian
Machine Method
People
penentuan menu makanan penderita asam urat
Material NESCO Muticheck
Menghitung kalori manual
Kesulitan memilih komposisi makanan Buku Asam Urat
Kesulitan menghitung kalori
Menentukan menu makanan manual
[image:35.595.125.523.543.729.2]Buku Kalori Tabel Daftar Purin
Berdasarkan gambar 3.1, masalah utama ditunjukkan oleh segi empat paling
kanan (kepala ikan), yaitu penentuan menu makanan. Sedangkan segi empat lainnya
yang dihubungkan oleh sebuah garis ke tulang utama (garis horizontal yang terhubung
ke kepala ikan) adalah kategori masalah. Garis horizontal selanjutnya yang ditunjukkan
oleh tulang-tulang kecil yang diwakili oleh garis panah yang mengarah ke tulang-tulang
kategori masalah adalah sebab dari masalah yang berada pada kepala.
3.1.2
Analisis Kebutuhan
Analisis kebutuhan terbagi dua bagian, yaitu kebutuhan fungsional dan kebutuhan
nonfungsional. Kebutuhan fungsional mendeskripsikan aktivitas yang disediakan suatu
sistem. Sedangkan kebutuhan nonfungsional mendeskripsikan fitur, karakteristik dan
batasan lainnya.
3.1.2.1 Kebutuhan Fungsional
Kebutuhan fungsional adalah fungsi-fungsi yang harus dipenuhi pada aplikasi yang
dirancang. Kebutuhan fungsional yang harus dipenuhi aplikasi yang dirancang adalah
sebagai berikut:
a. Sistem mampu menentukan jumlah kalori yang dibutuhkan perhari berdasarkan
data yang telah di input
user
.
b. Sistem mampu menentukan golongan asam urat berdasarkan kadar purin yang
telah di input
user
.
c. Sistem mampu melakukan pemisahan makanan yang dilarang dikonsumsi
dengan tidak dilarang berdasarkan golongan asam urat.
d. Sistem mampu menentukan bahan dan menu makanan yang telah di pilih oleh
user
dengan algoritma
branch and bound
dan disesuaikan dengan waktu makan.
3.1.2.2 Kebutuhan Nonfungsional
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,
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 mg/dL
b. Wanita : 2,4
5,7 mg/dL
Penderita asam urat di golongkan berdasarkan kandungan asam urat yaitu :
1. Golongan I
a. Pria
: 7
8,5 mg/dL
b. Wanita : 5,8
7 mg/dL
Makanan yang diperbolehkan kurang dari 200 mg purin
2. Golongan II
a. Pria
: 8,5
9 mg/dL
b. Wanita : 7
8 mg/dL
Makanan yang diperbolehkan kurang dari 150 mg purin
3. Golongan III
a. Pria
: > 9 mg/dL
b. Wanita : > 8 mg/dL [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
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)
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
100/100
* 125/100
* 40,6
* 4
203
Kalori
(A)
(B)
(C1)
Kalori zat gizi
Lemak
100/100
* 125/100
* 0.1
* 9
1,13
Kalori
(A)
(B)
(C2)
Kalori zat gizi
Protein
100/100
* 125/100
* 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 =
75/100 X 50/100 X 7.8 X 4
=
11.7 Kal
Lemak
=
75/100 X 50/100 X 0.3 X 9
=
1.0 Kal
Protein
=
75/100 X 50/100 X 2.7 X 4
=
4.0 kal
--- +
=
16.7 Kal
1 Potong Tempe ( URT= 25 Gr)
Karbohidrat =
100/100 * 25/100 * 9,1* 4
=
9,1 Kal
Lemak
=
100/100 * 25/100 * 7,7 * 9
=
17.33 Kal
Protein
=
100/100 * 25/100 * 14 * 4
=
14 kal
--- +
1 Potong Daging ayam ( URT= 50 Gr)
Karbohidrat =
58/100 * 50/100 * 0 * 4
=
0 Kal
Lemak
=
58/100 * 50/100 * 25 * 9
=
62.25 Kal
Protein
=
58/100 * 50/100 * 18.2 * 4
=
21.11 kal
--- +
=
83.36 Kal
1 Gelas Susu Sapi ( URT= 200 Gr)
Karbohidrat =
100/100 * 200/100 * 4.3 * 4
=
30.1 Kal
Lemak
=
100/100 * 200/100 * 3.5 * 9
=
63.9 Kal
Protein
=
100/100 * 200/100 * 3.2 * 4
=
25.6 kal
--- +
=
115.1 Kal
1 Buah Jeruk ( URT= 50 Gr)
Karbohidrat =
71/100 * 50/100 * 11,2 * 4
=
15.9 Kal
Lemak
=
71/100 * 50/100 * 0.2 * 9
=
0.64 Kal
Protein
=
71/100 * 50/100 * 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
(B&B) 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
B&B 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
Tabel 3.2 Keterangan Kalori, Protein dan pi/bi
Bahan Makanan-i
pi
bi
pi/bi
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 pi/bi, dengan
menggunakan algoritma B&B cara mengerjakan adalah :
Menghitung batas atas (
upper bound
) disetiap simpul kemungkinan, dengan
menggunakan :
ub = p + (B
–
b)*(pi+1/bi+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
Gambar 3.2 Pohon ruang status penyelesaian
knapsack
dengan algoritma
branch and bound
9.1/0/20.12 0/0/18.2712.6/123.79/19.5 9.1/83.36/19.4
13.95/140.49/17.84 12.6/123.79/17.43 10.45/100.06/16.6 9.1/83.36/16.19
13.95/140.49/15.69
255.59 238.89 12.6/123.79/14.76 215.7 10.45/100.06/13.2 15.5/198.46/15.78 9.1/83.36/12.3
13.95/140.49/14.78 14.4/158.31/15
12.6/123.79/13.63 13.5/141.61/14.32
10.45/100.06/11.76 10.9/117.88/12
15.5/198.46/15.64 216.28
9.1/83.36/10.62 9.55/101.18/10.86
14.4/158.31/14.4
13.95/140.49/13.95
13.5/141.61/13.5 12.6/123.79/12.6 10.9/117.88/10.9
10.45/100.06/10.45
15.5/198.46/15.64 9.55/101.18/9.55 9.1/83.36/9.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
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
[image:44.595.112.524.330.765.2]dibawah ini.
Tabel 3.3 Kode Program Untuk Membuat Algoritma
Branch and Bound
No
Kode
1
$t1 = mysql_query("SELECT * FROM bb_temp ORDER BY
density DESC");
2
$n1 = array();
$k1 = array();
$p1 = array();
$f1 = array();
3
while($row = mysql_fetch_array($t1)){
array_push($n1,$row['food']);
array_push($k1,$row['kalori']);
array_push($p1,$row['protein']);
array_push($f1,$row['id_food']);
}
4
function knapSolveFast($w,$v,$i,$aW,&$m) {
global $numcalls;
$numcalls ++;
// echo "Called with i=$i, aW=$aW<br>";
if (isset($m[$i][$aW])) {
return array( $m[$i][$aW], $m['picked'][$i][$aW] );
} else {
if ($i == 0) {
if ($w[$i] <= $aW) {
$m[$i][$aW] = $v[$i];
} else {
$m[$i][$aW] = 0;
$m['picked'][$i][$aW] = array();
return array(0,array());
}
}
list ($without_i,$without_PI) =
knapSolveFast($w, $v, $i-1, $aW,$m,$pickedItems);
if ($w[$i] > $aW) {
$m[$i][$aW] = $without_i;
$m['picked'][$i][$aW] = array();
return array($without_i,array());
} else {
list ($with_i,$with_PI) = knapSolveFast($w, $v, ($i-1),
($aW - $w[$i]),$m,$pickedItems);
$with_i += $v[$i];
if ($with_i > $without_i) {
$res = $with_i;
$picked = $with_PI;
array_push($picked,$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_query("SELECT kal FROM kalori_temp");
$kal = mysql_fetch_array($kalsql);
7
foreach($pickedItems as $key) {
$totalVal += $p1[$key];
$totalWt += $k1[$key];
echo"<div class='temp'>
<div class='p1'>".$n1[$key]."</div>
<div class='p2'>";
$takar=mysql_query("SELECT * FROM dkbm WHERE
dkbm.id_food='$f1[$key]'");
$tkr=mysql_fetch_array($takar);
$ukur=$tkr[ukuran];
$gram=$tkr[urt];
echo"$ukur ($gram gram) </div>
<div
class='p3'>".$p1[$key]."</div>
<div
class='p4'>".$k1[$key]."</div></div>";
}
echo "</div></div><br>";
$persen=($totalWt/$klm[kal])*100;
$kali=substr($persen,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
ghijh kk
dengan
lmh g knhgolpqgor5.
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
st
o
w
knh muadalah bagan yang mempunyai arus menggambarkan langkah - langkah
penyelesaian suatu masalah. Secara umum penulis menggambarkan tahapan - tahapan
dalam implementasi algoritma
v mhg kn hgo vpqgoyang digunakan dalam penelitian
Gambar 3.3
Flowchart
Sistem Secara Umum
3.2
Data Flow Diagram
(DFD)
Pemodelan proses adalah cara formal untuk menggambarkan bagaimana aplikasi
beroperasi. Mengilustrasikan aktivitas-aktivitas yang dilakukan dan bagaimana data
berpindah di antara aktivitas-aktivitas itu. Ada banyak cara untuk mempresentasikan
model proses. Cara yang populer adalah dengan menggunakan
w xy x z{o
w
wi
x|} x~(DFD).
w xyx z {o
w
wi
x|} x~(DFD) adalah alat yang menggambarkan aliran data
melalui sistem dan kerja atau pengolahan yang dilakukan oleh sistem tersebut [20].
DFD dari aplikasi yang dibuat dimulai dari DFD level 0 hingga DFD level 2.
Mulai
-
Identitas Penderita
Nama
Alamat
Jenis Kelamin
Usia
-
Kadar Asam Urat
Data Makanan :
-
Bahan Makanan
-
Tingkat Purin
-
Kandungan gizi
Jenis Makanan yang diinginkan
Berat minimum dan maksimum makanan
Perhitungan Algoritma
Branch and Bound
Selesai
Daftar Menu dan
Kandungan Bahan Makanan
3.4.1
Diagram Konteks
Aliran data bersumber dari pengguna yang dimasukkan ke dalam sistem, yang
kemudian akan diproses dan menghasilkan output daftar menu makanan.
User
memasukkan informasi data pribadi seperti nama, umur, jenis kelamin, berat badan,
kadar purin serta keterangan lain yang dibutuhkan pada sistem ini.
Gambar 3.4 Diagram Konteks
Penjelasan proses diagram konteks DFD yaitu sebagai berikut:
a. Arus Data
Masukan :
Data
user
Update
data makanan
Keluaran :
Respon
update
data makanan
Daftar menu makanan
Akses
b. Entitas Luar
Nama Entitas : Admin
Keterangan : Merupakan bagian yang mengontrol dan memperbaiki sistem
Masukan :
Username
Password
Sistem Penentuan
Menu Makanan
User
Admin
data
user
menu makanan
hak akses
data hasil
update
hak akses
id_admin
data makanan
0
Update
data makanan
Keluaran :
Respon
update
data makanan
Nama Entitas :
User
Keterangan : Pengguna yang menggunakan sistem.
Masukan :
Username
Data
user
Keluaran :
Daftar menu makanan
3.4.2
Data Flow Diagram Level 1
Proses yang ada pada DFD Level 0 dipecah lagi menjadi proses-proses yang lebih kecil
[image:49.