Implementasi Dan Perancangan Applikasi Penyusunan Jadwal Kerja Perawat Rumah Sakit
IMPLEMENTASI DAN PERANCANGAN APLIKASI
PENYUSUNAN JADWAL KERJA PERAWAT RUMAH SAKIT
SKRIPSI
ADISTY AMELIA DAULAY
091402069
PROGRAM STUDI S1 TEKNOLOGI INFORMASI
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
2015
(2)
IMPLEMENTASI DAN PERANCANGAN APLIKASI
PENYUSUNAN JADWAL KERJA PERAWAT RUMAH SAKIT
SKRIPSI
Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah
Sarjana Teknologi Informasi
ADISTY AMELIA DAULAY
091402069
PROGRAM STUDI S1 TEKNOLOGI INFORMASI
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
2015
(3)
ii
PERSETUJUAN
Judul
: IMPLEMENTASI DAN PERANCANGAN
APLIKASI PENYUSUNAN JADWAL KERJA
PERAWAT RUMAH SAKIT
Kategori
: SKRIPSI
Nama
: ADISTY AMELIA DAULAY
Nomor Induk Mahasiswa
: 091402069
Program Studi
: SARJANA (S1) TEKNOLOGI INFORMASI
Fakultas
: ILMU KOMPUTER DAN TEKNOLOGI
INFORMASI (FASILKOM-TI) UNIVERSITAS
SUMATERA UTARA
Diluluskan di
Medan, Januari 2015
Komisi Pembimbing
:
Pembimbing 2
Pembimbing 1
Dedy Arisandi, ST.,M.Kom M.AndriBudiman, ST.,M.Comp.Sc.,M.E.M
NIP. 19790831 200912 1 002 NIP. 19751008 200801 1 011
Diketahui/Disetujui oleh
Program Studi S1 Teknologi Informasi
Ketua,
M. Anggia Muchtar, ST, M.MI
NIP. 19800 1 110200801 1 010
(4)
iii
PERNYATAAN
IMPLEMENTASI DAN PERANCANGAN APLIKASI PENYUSUNAN JADWAL
KERJA PERAWAT RUMAH SAKIT
SKRIPSI
Saya mengakui bahwa skripsi ini adalah hasil kerja saya sendiri, kecuali beberapa
kutipan dan ringkasan yang masing-masing disebutkan sumbernya.
Medan, Januari 2015
Adisty Amelia Daulay
NIM: 091402069
(5)
iv
PENGHARGAAN
Segala hormat, pujian dan syukur Penulis ucapkan kepada Tuhan Yang Maha
Esa yang senantiasa melimpahkan rahmat dan karunia-Nya sehingga skripsi ini dapat
diselesaikan, sebagai syarat untuk memperoleh gelar Sarjana Teknologi Informasi
pada Program Studi S1 Teknologi Informasi Universitas Sumatera Utara.
Penulis ingin menyampaikan rasa hormat dan terima kasih yang sebesar–
besarnya kepada :
1.
Bapak Prof. Dr. Dr. Syahril Pasaribu, DTM&H, Msc(CTM), Sp.A(K)
selaku Rektor Universitas Sumatera Utara.
2.
Bapak Prof. Muhammad Zarlis selaku Dekan Fakultas Ilmu Komputer dan
Teknologi Informasi Universitas Sumatera Utara.
3.
Bapak M. Anggia Muchtar, ST, M.MI selaku Ketua Program Studi S1
Teknologi Informasi Universitas Sumatera Utara.
4.
Bapak M. Fadly Syahputra, B.Sc.,M.Sc.IT selaku Sekretaris Program
Studi S1 Teknologi Informasi Universitas Sumatera Utara.
5.
Bapak M. Andri Budiman, ST.,M.Comp.Sc.,M.E.M selaku Dosen
Pembimbing I yang telah memberikan bimbingan, saran dan masukan
kepada penulis dalam pengerjaan skripsi ini.
6.
Bapak Dedy Arisandi, ST.,M.Com selaku Dosen Pembimbing II yang
telah memberikan bimbingan, saran dan masukan kepada penulis dalam
pengerjaan skripsi ini.
7.
Bapak M. Fadly Syahputra, B.Sc.,M.Sc.IT selaku Dosen Pembanding I
yang telah memberikan saran dan masukan kepada penulis dalam
pengerjaan skripsi ini.
8.
Bapak Romi Fadilah Rahmat, B.Comp.Sc.,M.Sc selaku Dosen
Pembanding II yang telah memberikan saran dan masukan kepada penulis
dalam pengerjaan skripsi ini.
9.
Dalam kesempatan ini penulis mengucapkan terima kasih yang tidak
terhingga kepada kedua orang tua yang sangat saya cintai, yaitu buat
ayahanda H.Achyar Daulay, ibunda Hj.Elvida dan seluruh keluarga besar
yang selalu memberikan doa, dukungan serta kasih sayang yang tak
henti-hentinya kepada penulis untuk menyelesaikan skripsi ini.
10.
Serta kepada saudara kandung penulis yaitu abang Reza Putrawan Daulay,
SE.,MAP dan kakak Deby Putri Viana Daulay, S.Psi.,MM serta kawan
seperjuangan saya, Syarah Sukmadria,STI, Hani Febrina Rasyad,STI,
(6)
v
11.
Delo Alman Tarigan,STI dan yang terkasih Aprizal Huswandi, SH yang
selalu memberikan penulis semangat dalam menyelesaikan skripsi ini.
12.
Teman-teman seperjuangan Stambuk 2009 di Fakultas Teknologi
Informasi Universitas Sumatra Utara.
13.
Dan Semua pihak yang terlibat langsung ataupun tidak langsung
yang tidak dapat penulis ucapkan satu per satu yang telah membantu
penyelesaian skripsi ini.
Penulis menyadari bahwa skripsi ini masih terdapat kekurangan. Oleh karena
itu, kepada pembaca agar kiranya memberikan kritik dan saran yang bersifat
membangun demi kesempurnaan skripsi ini. Sehingga dapat bermanfaat bagi kita
semuanya.
Medan, Januari 2015
Penulis,
(7)
vi
ABSTRAK
Selama ini penjadwalan yang dilakukan dirumah sakit masi berbentuk manual.
Perkembangan teknologi sudah sangat berkembang pesat. Dengan adanya bantuan
teknologi, semua pekerjaan yang sulit dapat dipermudah dengan menggunakan
berbagai aplikasi yang saat ini banyak diciptakan.Untuk itu akan dibentuk suatu
sistem komputasi yang dapat menggantikan cara manual dan menghasilkan yang lebih
bagus. Ada beberapa macam algoritma untuk melakukan penyusunan penjadwalan.
Beberapa algoritma itu antara lain adalah Algoritma
Simulated Annealing
, Algoritma
Particle Swarm Optimazation
, dan Algoritma Genetika. Serta masih banyak lagi
algortima yang lainnya untuk penjadwalan. Setiap algoritma ini memiliki ciri khas dan
kelebihan masing-masing dalam pengerjaannya. Untuk itu disini penulis mencoba
menyajikan salah satu aplikasi penjadwalan perawat.
(8)
vii
THE IMPLEMENTATION AND DESIGN OF APPLICATION
PREPARATION OF HOSPITAL NURSES WORK SCHEDULE
ABSTRACT
During this time the scheduling in the hospital still shaped manually. The
development of technology has been developing very rapidly. With the help of
technology, all that hard work can be facilitated by using a variety of applications that
currently are created. For it would set up a computing system that can replace the
manual way and produce better. There are several kinds of scheduling algorithms to
do the preparation. Some algorithms that include Simulated Annealing Algorithm,
Particle Swarm Algorithm Optimazation, and Genetic Algorithms. And still many
other algorithms for scheduling. Each algorithm has its own characteristics and
advantages of each in the process. For that here the author tries to present one of the
nurse scheduling applications.
(9)
viii
DAFTAR ISI
Halaman
PERSETUJUAN ...
ii
PERNYATAAN... iii
UCAPAN TERIMA KASIH ...
iv
ABSTRAK ...
vi
ABSTRACT ...
vii
DAFTAR ISI... viii
DAFTAR TABEL ...
xi
DAFTAR GAMBAR ...
xii
Bab 1 PENDAHULUAN
1.1 Latar Belakang ...
1
1.2 Rumusan Masalah ...
2
1.3 Tujuan Penelitian ...
2
1.4 Manfaat Penelitian ...
2
1.5 Batasan Masalah ...
2
1.6 Metodologi Penelitian ...
2
1.7 Sistematika Penulisan ...
3
Bab 2 LANDASAN TEORI
2.1 Penjadwalan ...
5
2.1.1 Teknik-teknik dalam melakukan penjadwalan ...
5
2.1.2 Hal-Hal yang Harus Diperhatikan dalam Melakukan
Penjadwalan ...
6
2.1.3 Implikasi Strategi Penjadwalan ...
6
2.1.4 Keputusan-Keputusan dalam Penjadwalan ...
7
(10)
ix
2.1.6 Algoritma Simulated Annealing ...
9
2.1.7 Algoritma Particle Swarm Optimazation ...
10
Bab 3 ANALISIS DAN PERANCANGAN
3.1 Analisis Data ...
16
3.1.1 Data Identitas Perawat/Karyawan Rumah Sakit ...
16
3.1.2 Data Penjadwalan Perawat/Karyawan Rumah Sakit ...
17
3.1.3 Data Ruangan Perawat/Karyawan Rumah Sakit ...
17
3.1.4 Data Jumlah Karyawan atau Staff Rumah Sakit
Berdasarkan Absen ...
18
3.2 Analisis Sistem...
18
3.2.1 Proses Pengalokasian Pada Proses Penjadwalan ...
19
3.2.2 Proses Penjadwalan ...
20
3.2.3 Proses Penyesuaian ...
21
3.3 Perancangan Sistem ...
22
3.3.1 Diagram Use case...
22
3.3.2 Penjelasan Use case ...
23
3.3.3 General Architecture ...
24
3.4 Perancangan Tampilan Antarmuka ...
25
3.4.1 Rancangan Tampilan Halaman Utama Aplikasi ...
25
3.4.2 Rancangan Tampilan Halaman Menu Shift pada Aplikasi ...
25
3.4.3 Rancangan Tampilan Halaman Ruangan ...
26
3.4.4 Rancangan Tampilan Halaman Perawat ...
27
3.4.5 Rancangan Tampilan Halaman Jadwal ...
27
3.4.6 Rancangan Tampilan Halaman Data Jadwal Jaga Perawat ...
28
Bab 4 IMPLEMENTASI DAN PENGUJIAN
4.1 Implementasi Sistem ...
31
4.1.1 Spesifikasi Perangkat Keras dan Perangkat Lunak yang
Digunakan ...
31
(11)
x
4.2 Hasil Pengujian Sistem ...
38
Bab 5 KESIMPULAN DAN SARAN
5.1 Kesimpulan ...
39
5.2 Saran ...
39
DAFTAR PUSTAKA ...
40
LAMPIRAN
(12)
xi
DAFTAR TABEL
No Tabel
Judul
Halaman
Tabel 3.1
Volume kendaraan pada persimpangan...
21
Tabel 3.2
Tabel menentukan kategori durasi waktu...
32
Tabel 3.3
Tabel menentukan persilangan kemungkinan ...
33
Tabel 3.4
Tabel menentukan kategori lama waktu dengan koefisien ...
33
Tabel 3.5
Tabel menentukan kategori serupa dengan koefisien terbesar ...
34
Tabel 3.6
Tabel Disjungsi ...
34
Tabel 4.1
Penjelasan diagram case ...
37
(13)
xii
DAFTAR GAMBAR
Nomor Gambar
Nama Gambar
Halaman
3.1
Flowchart Sistem ...
18
3.2
Flowchart Algoritma Genetika ...
19
3.3
Flowchart Proses Alokasi Penjadwalan ...
20
3.4
Flowchart Proses Penjadwalan Perawat ...
21
3.5
Flowchart Proses Penyesuaian Jadwal ...
22
3.6
Diagram Use Case ...
23
3.7
General Architecture ...
24
3.8
Rancangan Halaman Utama ...
25
3.9
Rancangan Halaman Shift ...
26
3.10
Rancangan Halaman Ruangan ...
27
3.11
Rancangan Halaman Perawat ...
28
3.12
Rancangan Halalamn Jadwal Perawat ...
29
3.13
Rancangan Halaman Data Jadwal Perawat ...
30
4.1
Tampilan Simulasi Ketika Program Belum
Dijalankan ...
32
4.2
Tampilan Data Para Perawat ...
33
4.3
Tampilan Pemintaan Cuti Perawat ...
34
4.4
Tampilan Cetak Jadwal ...
35
4.5
Tampilan Pratinjau Pada Jadwal Perawat ...
36
(14)
vi
ABSTRAK
Selama ini penjadwalan yang dilakukan dirumah sakit masi berbentuk manual.
Perkembangan teknologi sudah sangat berkembang pesat. Dengan adanya bantuan
teknologi, semua pekerjaan yang sulit dapat dipermudah dengan menggunakan
berbagai aplikasi yang saat ini banyak diciptakan.Untuk itu akan dibentuk suatu
sistem komputasi yang dapat menggantikan cara manual dan menghasilkan yang lebih
bagus. Ada beberapa macam algoritma untuk melakukan penyusunan penjadwalan.
Beberapa algoritma itu antara lain adalah Algoritma
Simulated Annealing
, Algoritma
Particle Swarm Optimazation
, dan Algoritma Genetika. Serta masih banyak lagi
algortima yang lainnya untuk penjadwalan. Setiap algoritma ini memiliki ciri khas dan
kelebihan masing-masing dalam pengerjaannya. Untuk itu disini penulis mencoba
menyajikan salah satu aplikasi penjadwalan perawat.
(15)
vii
THE IMPLEMENTATION AND DESIGN OF APPLICATION
PREPARATION OF HOSPITAL NURSES WORK SCHEDULE
ABSTRACT
During this time the scheduling in the hospital still shaped manually. The
development of technology has been developing very rapidly. With the help of
technology, all that hard work can be facilitated by using a variety of applications that
currently are created. For it would set up a computing system that can replace the
manual way and produce better. There are several kinds of scheduling algorithms to
do the preparation. Some algorithms that include Simulated Annealing Algorithm,
Particle Swarm Algorithm Optimazation, and Genetic Algorithms. And still many
other algorithms for scheduling. Each algorithm has its own characteristics and
advantages of each in the process. For that here the author tries to present one of the
nurse scheduling applications.
(16)
BAB 1
PENDAHULUAN
1.1
Latar Belakang
Sebuah rumah sakit merupakan aspek penting dalam kehidupan sehari-hari. Rumah
sakit yang baik adalah dengan memiliki struktur kerja yang diatur seefesien mungkin.
Seperti penjadwalan pada karyawan yang jelas dan terarah. Dalam manajemen yang
memiliki konsep untuk terus meningkatkan kualitas pelayanan dan kinerja yang telah
diatur. Untuk itu harus diupayakan alat bantu untuk menyusun jadwal kerja berbasis
teknologi informasi.
Selama ini penjadwalan yang dilakukan dirumah sakit masih berbentuk
manual. Perkembangan teknologi sudah sangat berkembang pesat. Dengan adanya
bantuan teknologi, semua pekerjaan yang sulit dapat dipermudah dengan
menggunakan berbagai aplikasi yang saat ini banyak diciptakan. Untuk itu akan
dibentuk suatu sistem komputasi yang dapat menggantikan cara manual dan
menghasilkan yang lebih bagus.
Ada beberapa macam algoritma untuk melakukan penyusunan penjadwalan.
Beberapa algoritma itu antara lain adalah Algoritma
Simulated Annealing
, Algoritma
Particle Swarm Optimazation
, dan Algoritma Genetika. Serta masih banyak lagi
algoritma yang lainnya untuk penjadwalan. Setiap algoritma ini memiliki ciri khas dan
kelebihan masing-masing dalam pengerjaannya.
Beberapa penelitian yang pernah dilakukan untuk penjadwalan antara lain
adalah Aplikasi algoritma genetika untuk optimasi penjadwalan kegiatan belajar
mengajar (Nugraha, 2008) dan Penjadwalan produksi dengan menggunakan algoritma
simulated annealing
(Santoso
et.al
. 2012). Dan dengan adanya aplikasi penjadwalan
ini diharapkan dapat memudahkan penyusunan jadwal pekerja dan dapat membantu
mereka untuk mengimplementasikannya.
(17)
2
1.2 Rumusan Masalah
Bagaimana merancang aplikasi untuk menyusun jadwal tugas perawat rumah sakit.
1.3
Tujuan Penelitian
Adapun tujuan dari penulisan tugas akhir ini adalah untuk menghasilkan aplikasi
penjadwalan rumah sakit yang mudah.
1.4
Manfaat Penelitian
Adapun manfaat dari penulisan tugas akhir ini adalah agar aplikasi ini dapat
digunakan untuk menyusun manajemen penjadwalan yang dapat dilakukan lebih
mudah dan memiliki adaptasi terbaik bagi kondisi rumah sakit.
1.5
Batasan Masalah
Pada tugas akhir ini dilakukan beberapa batasan masalah sebagai berikut :
1.
Aplikasi ini hanya untuk perawat dalam suatu rumah sakit saja.
2.
Populasi awal maksimal 3.
3.
Shift
yang diberikan oleh rumah sakit adalah
shift
pagi,
shift
siang dan
shift
malam.
4.
Aplikasi ini berlaku untuk satu rumah sakit.
1.6
Metode Penelitian
Metode penelitian yang akan digunakan adalah:
1.
Studi Literatur
Pada tahap ini dilakukan dengan membaca dan mempelajari buku-buku
referensi, jurnal atau sumber-sumber lain yang berkaitan dengan tugas akhir
ini, baik berasal dari buku maupun dari internet.
2.
Perancangan Desain Sistem
Pada tahap ini dilakukan perancangan aplikasi mengenai tugas akhir ini,
seperti: menggambar flowchart, perancangan aplikasi, dan perancangan
antarmuka (
interface
) menu-menu yang terdapat pada aplikasi.
(18)
3
3.
Implementasi Sistem
Pada tahap ini akan dilakukan pengkodean dan menerapkan perancangan
aplikasi tersebut ke dalam bahasa pemrograman java android.
4.
Pengujian Sistem
Pada tahap ini akan dilakukan pengujian terhadap aplikasi apakah telah
memenuhi kriteria atau tidak.
5.
Dokumentasi Sistem
Pada tahap ini akan dilakukan penulisan laporan mengenai aplikasi tersebut
yang bertujuan untuk menunjukkan hasil penelitian ini.
1.7
Sistematika Penulisan
Sistematika penulisan skripsi ini dibagi menjadi lima bab yaitu:
BAB 1 : Pendahuluan
Bab ini berisikan konsep dasar untuk penyusunan skripsi.
BAB 2 : Landasan Teori
Pada bab ini dibahas mengenai beberapa teori yang mendukung pembahasan pada bab
selanjutnya.
BAB 3 : Analisis dan Perancangan
Pada bab ini dibahas mengenai permasalahan dalam pembuatan aplikasi, penjelasan
tentang rancangan struktur aplikasi, dan perancangan interface dari aplikasi yang akan
dibuat.
BAB 4 : Implementasi dan Pengujian
Pada bab ini dibahas implementasi dari aplikasi yang akan dibuat. Berisikan gambaran
interface
dari perangkat lunak yang akan dibuat. Setelahnya dilakukan pengujian
untuk melihat aplikasi yang dibuat berhasil dijalankan atau tidak.
BAB 5 : Kesimpulan dan Saran
Bab ini berisi tentang kesimpulan dan saran yang diharapkan dapat bermanfaat untuk
penelitian selanjutnya.
(19)
BAB 2
LANDASAN TEORI
Bab ini akan membahas tentang teori dan konsep dasar yang mendukung
pembangunan dari aplikasi yang dibuat.
2.1
Penjadwalan
Penjadwalan adalah pengaturan waktu dari suatu kegiatan operasi, mencakup kegiatan
mengalokasi fasilitas, peralatan dan tenaga kerja bagi suatu kegiatan operasi serta
menentukan urutan pelaksanaan kegiatan operasi. Penjadwalan atau
scheduling
juga
merupakan salah satu kegiatan penting dalam menjalankan suatu perusahaan atau
instansi yang diperlukan dalam mengalokasikan tenaga operator, mesin dan peralatan
produksi, urutan proses, jenis produk dan sebabgainya. Umumnya disusun dengan
mempertimbangkan berbagai batasan, misalnya meminimalkan waktu proses, waktu
tunggu langganan, tingkat persediaaan serta penggunaaan yang efisien dari fasilitas,
personel dan peralatan (Taufik, 2013).
Penjadwalan pada prinsipnya terjadi baik untuk periode yang panjang (misalnya
tahunan) ataupun periode yang lebih pendek (misalnya harian atau periode jam).
Penjadwalan yang dimaksudkan di sini adalah penjadwalan jangka pendek karena
penjadwalan jangka panjang biasanya dibahas dengan pendekatan lain seperti
manajemen projek. Kalau pun penjadwalan jangka panjang tadi bukan bersifat projek,
yaitu seperti kegiatan rutin tahunan, maka pendekatan penjadwalan jangka pendek ini
pun dapat kita terapkan pada kasus tersebut (Mursyid, 2010).
2.1.1
Teknik-Teknik dalam Melakukan Penjadwalan
Ada dua jenis penjadwalan secara umum yaitu (Taufik, 2013) :
a.
Penjadwalan Maju (
Forward Scheduling
) Pekerjaan dimulai sedini
mungkin sehingga pekerjaaan selesai sebelum batas waktu yang dijanjikan
(20)
5
b.
(
due date
). Konsekuensinya adalah terjadinya akumulasi persediaaan
sampai pekerjaan tersebut diperlukan pada pusat kerja berikutnya.
c.
Penjadwalan Mundur (
Backward Scheduling
)
Kegiatan operasi yang terakhir dijadwalkan lebih dulu, yang selanjutnya
secara berturut-turut ditentukan jadwal untuk kegiatan sebelumnya satu per
satu secara mundur.Konsekuensi dapat meminimalkan persediaaan karena
baru selesai pada saat pekerjaan tersebut diperlukan pada stasiun kerja
berikutnya. Catatan: harus disertai dengan perencanaan dan estimasi waktu
tenggang yang akurat, tidak terjadi
break down
selama proses maupun
perubahan
due date
yang lebih cepat.
2.1.2
Hal-Hal yang Harus Diperhatikan dalam Melakukan Penjadwalan
Ada beberapa hal penting yang sifatnya strategis dapat kita raih jika melakukan
penjadwalan dengan baik (Mursyid, 2010) :
a.
Penjadwalan yang baik membuat organisasi dapat menggunakan aset atau
sumber dayanya dengan lebih efisien dan berefek positif juga pada
pencapaian tujuannya.
b.
Kapasitas yang fleksibel dalam memenuhi kebutuhan pelanggan.
c.
Kepastian dalam melaksanakan penjadawalan yang akan dibuat.
2.1.3
Implikasi Strategi Penjadwalan
Ada 4 macam implikasi dalam strategi penjadwalan (Taufik, 2013), yaitu:
a.
Dengan penjadwalan yang baik, penggunaan aset perusahaan menjadi
lebih efektif sehingga biaya menjadi rendah.
b.
Penggunaan kapasitas menjadi bertambah karena perputaran aktiva
menjadi lebih besar.
c.
Pelayanan pelanggan (
customer service
) menjadi lebih baik.
d.
Mendapatkan keunggulan kompetitif.
2.1.4
Keputusan-Keputusan dalam Penjadwalan
Setiap organisasi yang menjadi objek penelitian selalu memiliki keputusan dalam
penjadwalan. Ini berfungsi sebagai objek kajian dalam sistem pendukung keputusan
(21)
6
nantinya menentukan rancangan penelitian. Perhatikan tabel dibawah ini,
contoh-contoh organisasi beserta keputusannya.
Organisasi
Keputusan Dalam Penjadwalan
Rumah Sakit
Ruang operasi, Perawat, Security, Pasien Rawat Jalan
Universitas
Ruang kelas,Alat Audiovisual, Penjadwalan Dosen dan
Mahasiswa, Jadwal Kursus
Pabrik
Produksi, Pembelian Bahan, Gaji
Café
Cheef, Bartender, Pelayan, Entertainer
Bandara Udara
Jadwal Penerbangan
2.2
Algoritma Genetika
Algoritma ini ditemukan di Universitas Michigan, Amerika Serikat oleh John Holland
(1975) melalui sebuah penelitian dan dipopulerkan oleh salah satu muridnya, David
Goldberg. Algoritma genetik adalah algoritma yang berusaha menerapkan
pemahaman mengenai evolusi alamiah pada tugas-tugas pemecahan-masalah
(
problem solving
). Pendekatan yang diambil oleh algoritma ini adalah dengan
menggabungkan secara acak berbagai pilihan solusi terbaik di dalam suatu kumpulan
untuk mendapatkan generasi solusi terbaik berikutnya yaitu pada suatu kondisi yang
memaksimalkan kecocokannya atau lazim disebut
fitness
. Generasi ini akan
merepresentasikan perbaikanperbaikan pada populasi awalnya. Dengan melakukan
proses ini secara berulang, algoritma ini diharapkan dapat mensimulasikan proses
evolusioner (Ivan, 2008). Algoritma genetika merupakan algoritma pencarian yang
menerapkan proses seleksi alam dan evolusi yang dikemukakan oleh Charles Darwin.
Algoritma genetika pertama kali diperkenalkan oleh John Holland (1975) dari
Universitas Michigan. John Holland menyatakan bahwa setiap masalah yang
berbentuk adaptasi (alami maupun buatan) dapat diformulasikan kedalam terminologi
genetika (Saraswat & Prayanthi, 2012).
(22)
7
Algoritma genetik bukanlah solusi terbaik untuk memecahkan segala masalah.
Sebagai contoh, metode tradisional telah diatur untuk untuk mencari penyelesaian dari
fungsi analitis
convex
yang “berperilaku baik” yang variabelnya sedikit. Pada
kasus-kasus ini, metode berbasis kalkulus lebih unggul dari algoritma genetik karena metode
ini dengan cepat menemukan solusi minimum ketika algoritma genetik masih
menganalisa bobot dari populasi awal. Untuk problemproblem ini pengguna harus
mengakui fakta dari pengalaman ini dan memakai metode tradisional yang lebih cepat
tersebut. Akan tetapi, banyak persoalan realistis yang berada di luar golongan ini.
Selain itu, untuk persoalan yang tidak terlalu rumit, banyak cara yang lebih cepat dari
algoritma genetik (Ivan, 2008).
Sifat algoritma genetika adalah mencari kemungkinan-kemungkinan dari
kandidat solusi untuk mendapatkan yang optimal untuk penyelesaian masalah. Ruang
cakupan dari semua solusi yang layak (
feasible
), yaitu objek-objek diantara solusi
yang sesuai, dinamakan ruang pencarian (
search
space
). Tiap titik dalam ruang
pencarian mempresentasikan satu solusi yang layak. Tiap solusi yang layak dapat
ditandai dengan nilai
fitness
-nya bagi masalah. Algoritma genetika bekerja dari
populasi yang merupakan himpunan solusi yang dihasilkan secara acak. Setiap
anggota himpunan yang merepresentasikan satu solusi masalah. Suatu solusi masalah
berevolusi dalam iterasi yang dinamakan generasi, tiap solusi masalah dievaluasi
berdasarkan fungsi evaluasi (
fitness function
). Pada algoritma genetika,
fitness
biasanya dapat berupa fungsi objektif dari masalah yang akan dioptimalisasi (Saraswat
& Prayanthi, 2012).
2.2.1
Teknik-Teknik dalam Algortima Genetik
Ada 4 teknik yang dapat dilihat dalam
Speech Recognition
(Ivan, 2008) yaitu :
a.
Fitness Function
Setiap individual dievaluasi dengan
fitness function
. Sebuah
fitness
function
mengembalikan nilai tertinggi untuk individual yang terbaik.
Individu akan diurutkan berdasarkan nilai atau disebut dengan
selection
.
(23)
8
b.
Crossover
Untuk setiap pasang induk, sebuah titik
crossover
akan dipilih secara
random dari posisi dalam
string
. Pada gambar titik
crossover
terletak pada
indeks ketiga dalam pasangan pertama dan setelah indeks kelima pada
pasangan kedua.
c.
Mutasi
Pada mutasi, tiap lokasi menjadi sasaran mutasi acak, dengan probabilitas
independen yang kecil. Sebuah digit dimutasikan pada anak pertama,
ketiga, dan keempat. Algoritma genetika mengkombinasikan suatu
kecenderungan menaik dengan pengeksplorasian acak diantara
thread
pencarian paralel. Keuntungan secara matematis dapat tunjukkan bahwa
bila posisi dari kode genetik di permutasikan di awal dengan urutan acak,
crossover
tidak memberikan keunggulan. Secara intuisi, keuntungannya
didapat dari kemampuan
crossover
untuk menggabungkan blok-blok huruf
berukuran besar yang telah berevolusi secara independen untuk melakukan
fungsi yang bermanfaat sehingga dapat menaikkan tingkat
granularity
di
mana pencarian dilakukan.
Metode dan tipe mutasi yang dilakukan juga tergantung pada
encoding
dan permasalahan yang diangkat. Berdasarkan encodingnya
terdapat beberapa macam, diantaranya adalah sebagai berikut (Ihsania,
2010) :
1.
Binary Encoding
Melakukan inversi pada bit yang terpilih, 0 menjadi 1 dan
sebaliknya, 1 menjadi 0.
Contoh : 11001001 => 10001001
2.
Permutation Encoding
Memilih dua nilai dari gen dan menukarnya.
Contoh : ( 1 2 3 4 5 8 9 7 ) => ( 1 8 3 4 5 6 2 9 7 )
Beberapa operator mutasi telah diciptakan untuk representasi
permutasi, seperti metode
inversion
,
insertion
,
displacement
, dan
reciprocal exchange mutation
(Ihsania, 2010).
(24)
9
a.
Inversion Mutation
Inversion mutation
memilih dua posisi dalam sebuah
kromosom dengan cara acak dan kemudian
menginversikan substring di antara dua posisi tersebut.
b.
Insertion Mutation
Insertion Mutation
memilih sebuah gen dengan cara acak
dan memasukkan ke dalam kromosom dengan cara acak
pula.
c.
Dsisplacement Mutation
Displacement Mutation
memilih sebuah sub/sekelompok
gen dengan cara acak kemudian memasukkan ke dalam
kromosom dengan cara acak.
d.
Reciprocal Exchange Mutation (REM)
Reciprocal Exchange Mutation
memilih dua posisi secara
acak, kemudian menukar dua gen dalam posisi tersebut.
3.
Value Encoding
Menentukan sebuah nilai kecil yang akan ditambahkan atau
dikurangkan pada salah satu gen dalam kromosom.
Contoh : ( 1.29 5.68 2.86 4.11 5.55 ) => ( 1.29 5.68 2.73 4.22 5.55)
4.
Tree Encoding
Node yang terpilih akan diubah.
d.
Schema
Teori dari algoritma genetik menjelaskan cara kerjanya menggunakan ide
dari suatu
schema
, suatu substring di mana beberapa posisi tidak
disebutkan. Dapat ditunjukkan bahwa, bila
fitness
rata-rata dari
schema
berada di bawah mean maka jumlah instansiasi dari
schema
di dalam
populasi akan bertambah seiring bertambaahnya waktu. Jelas sekali bahwa
efek ini tidak akan signifikan bila bit-bit yang bersebelahan sama sekali
tidak berhubungan satu sama sekali, karena akan ada beberapa blok
(25)
10
kontigu yang memberikan keuntungan yang konsisten. Algoritma genetik
paling efektif dipakai bila
schema
-
schema
berkorespondensi menjadi
komponen berati dari sebuah solusi. Sebagai contoh, bila string adalah
representasi dari sebuah antena, maka
schema
merepresentasikan
komponen-komponen dari antena, seperti
reflector
dan
deflector
. Sebuah
komponen yang baik cenderung akan berkerja baik pada rancangan yang
berbeda. Ini menunjukkan bahwa penggunaan algoritma genetik yang
benar memerlukan rekayasa yang baik pada representasinya.
2.2.2
Contoh-contoh Pengaplikasian Algoritma Genetik
Algoritma genetika sudah banyak diaplikasikan untuk penyelesaian masalah dan
pemodelan dalam bidang teknologi, bisnis, dan
entertainment
(Ihsania, 2010), seperti :
a.
Optimasi
Algoritma genetika untuk optimasi numerik dan optimasi kombinatorial
seperti
Traveling Salesman Problem
(TSP), perancangan
Integrated circuit
atau IC, optimasi video dan suara.
b.
Pemrograman Otomatis
Algoritma genetika telah digunakan untuk melakukan proses evolusi
terhadap program komputer untuk merancang struktur komputasiona,
seperti
cellular automata
dan
sorting network
.
c.
Machine Learning
Algoritma genetika telah berhasil diaplikasikan untuk memprediksi
struktur protein, dan berhasil diaplikasikan dalam perancangan
neural
networks
(jaringan syaraf tiruan) untuk melakukan proses evolusi terhadap
aturan-aturan pada
learning classifier system
atau
symbolic production
system
, juga digunakan untuk mengontrol robot.
d.
Model Ekonomi
Algoritma genetika telah digunakan untuk memodelkan proses-proses
inovasi dan pembangunan
bidding strategies
.
(26)
11
e.
Model Sistem Imunisasi
Algoritma genetika telah berhasil digunakan untuk memodelkan berbagai
aspek pada sistem imunisasi alamiah, termasuk
somatic mutation
selama
kehidupan individu dan menemukan keluarga dengan gen ganda (
multi-gene families
) sepanjang waktu evolusi.
f.
Model Ekologis
Algoritma genetika berhasil digunakan untuk memodelkan fenomena
ekologis seperti
host-parasite co-evolutions
, simbiosis, dan aliran sumber
daya dalam ekologi.
2.2.3
Masalah-masalah yang Bisa Diselesaikan dengan Algoritma Genetik
Algoritma genetika sangat berguna dan efisien untuk masalah-masalah dengan
karakteristik sebagai berikut (Ihsania, 2010) :
a.
Ruang masalah sangat besar, kompleks, dan sulit dipahami.
b.
Kurang atau bahkan tidak ada pengetahuan yang memadai untuk
merepresentasikan masalah ke dalam ruang pencarian yang lebih sempit.
c.
Tidak tersedianya analisis matematika yang memadai.
d.
Ketika metode-metode konvensional sudah tidak mampu meyelesaikan
masalah yang dihadapi.
e.
Solusi yang diharapkan tidak harus paling optimal, tetapi cukup bagus atau
bisa diterima.
f.
Terdapat batasan waktu, misalnya
real time system
atau sistem waktu
nyata.
2.3
Algoritma Simulated Annealing
Algoritma Simulated Annealing adalah sebagai berikut :
1. Evaluasi keadaan awal. Jika keadaan awal merupakan tujuan, maka pencarian
berhasil dan KELUAR. Jika tidak demikian, lanjutkan dengan menetapkan
keadaan awal sebagai kondisi sekarang.
2. Inisialisasi BEST_SO_FAR untuk keadaan sekarang.
3. Inisialisasi T sesuai dengan
annealing schedule
.
(27)
12
4. Kerjakan hingga solusi ditemukan atau sudah tidak ada operator baru lagi akan
diaplikasikan ke kondisi sekarang.
a. Gunakan operator yang belum pernah digunakan tersebut untuk
menghasilkan kondisi baru.
b. Evaluasi kondisi yang baru dengan menghitung:
Δ
E = nilai sekarang – nilai keadaan baru.
i. Jika kondisi baru merupakan tujuan, maka pencarian berhasil dan KELUAR.
ii. Jika bukan tujuan, namun memiliki nilai yang lebih baik daripada kondisi
sekarang, maka tetapkan kondisi baru sebagai kondisi sekarang. Demikian
pula tetapkan BEST_SO_FAR untuk kondisi yang baru tadi. D-23
iii. Jika nilai kondisi baru tidak lebih baik dari kondisi sekarang, maka tetapkan
kondisi baru sebagai kondisi sekarang dengan probabilitas:
p' = e
−Δ
E / T
Langkah ini biasanya dikerjakan dengan membangkitkan suatu bilangan
random r pada range [0 1]. Jika r < p’, maka perubahan kondisi baru menjadi
kondisi sekarang diperbolehkan. Namun jika tidak demikian, maka tidak
akan dikerjakan apapun.
2.3.1
Konsep Dasar Simulated Annealing
Ide dasar simulated annealing terbentuk dari pemrosesan logam . Annealing
(memanaskan kemudian mendinginkan) dalam pemrosesan logam ini adalah suatu
proses bagaimana membuat bentuk cair berangsur-angsur menjadi bentuk yang lebih
padat seiring dengan penurunan temperatur. Simulated annealing biasanya digunakan
untuk penyelesaian masalah yang mana perubahan keadaan dari suatu kondisi ke
kondisi yang lainnya membutuhkan ruang yang sangat luas, misalkan perubahan
gerakan dengan menggunakan permutasi pada masalah
Travelling Salesman Problem
.
Pada simulated annealing, ada 3 parameter yang sangat menentukan, yaitu: tetangga,
gain, temperatur, pembangkitan bilangan random. Tetangga akan sangat berperan
dalam membentuk perubahan pada solusi sekarang. Pembangkitan bilangan random
akan berimplikasi adanya probabilitas.
(28)
13
2.4
Algoritma Particle Swarm Optimazation
Particle Swarm Optimization adalah salah satu metode optimasi yang terinspirasi dari
perilaku gerakan kawanan hewan seperti ikan (school of fish), hewan herbivor (herd),
dan burung (flock) yang kemudian tiap objek hewan disederhanakan menjadi sebuah
partikel. Suatu partikel dalam ruang memiliki posisi yang dikodekan sebagai vektor
koordinat. Vektor posisi ini dianggap sebagai keadaan yang sedang ditempati oleh
suatu partikel di ruang pencarian. Setiap posisi dalam ruang pencarian merupakan
alternatif solusi yang dapat dievaluasi menggunakan fungsi objektif. Setiap partikel
bergerak dengan kecepatan v.
Particle Swarm Optimization atau yang kita kenal dengan PSO menerapkan
sifat masing-masing individu dalam satu kelompok besar. Kemudian menggabungkan
sifat-sifat tersebut untuk menyelesaikan permasalahan. Particle Swarm Optimization
pertama kali dimunculkan pada tahun 1995, sejak saat itulah para peneliti banyak
menurunkan dan mengembangkan metode PSO.
Ciri khas dari PSO adalah pengaturan kecepatan partikel secara heuristik dan
probabilistik. Jika suatu partikel memiliki kecepatan yang konstan maka jika jejak
posisi suatu partikel divisualisasikan akan membentuk garis lurus. Dengan adanya
faktor eksternal yang membelokkan garis tersebut yang kemudian menggerakkan
partikel dalam ruang pencarian maka diharapkan partikel dapat mengarah, mendekati,
dan pada akhirnya mencapai titik optimal. Faktor eksternal yang dimaksud antara lain
posisi terbaik yang pernah dikunjungi suatu partikel, posisi terbaik seluruh partikel
(diasumsikan setiap partikel mengetahui posisi terbaik setiap partikel lainnya), serta
faktor kreativitas untuk melakukan eksplorasi.
Particle Swarm Optimization memiliki kesamaan sifat dengan teknik
komputasi seperti Algoritma Genetika (Genetic Algorithm). Sistem PSO diinisialisasi
oleh sebuah populasi solusi secara acak dan selanjutnya mencari titik optimum dengan
cara meng-update tiap hasil pembangkitan. Metode optimasi yang didasarkan pada
swarm intelligence ini disebut algoritma behaviorally inspired sebagai alternatif dari
algoritma genetika, yang sering disebut evolution-based procedures. Dalam konteks
optimasi multivariabel, kawanan diasumsikan mempunyai ukuran tertentu atau tetap
(29)
14
dengan setiap partikel posisi awalnya terletak di suatu lokasi yang acak dalam ruang
multidimensi. Setiap partikel diasumsikan memiliki dua karakteristik: posisi dan
kecepatan. Setiap partikel bergerak dalam ruang/space tertentu dan mengingat posisi
terbaik yang pernah dilalui atau ditemukan terhadap sumber makanan atau nilai fungsi
objektif. Setiap partikel menyampaikan informasi atau posisi bagusnya kepada
partikel yang lain dan menyesuaikan posisi dan kecepatan masing-masing berdasarkan
informasi yang diterima mengenai posisi yang bagus tersebut.
(30)
BAB 3
ANALISIS DATA DAN PERANCANGAN
3.1
Analisis Data
Dalam penelitian ini data yang diambil adalah data-data jadwal perawat rumah sakit
secara manual selama batas waktu tertentu, data perawat/karyawan/dokter, data
shift
siang dan
shift
malam.
3.1.1
Data Identitas Perawat/Karyawan Rumah Sakit
Data jadwal perawat atau karyawan diambil dari rumah sakit yang dilakukan sebagai
objek penelitian sebagai bahan dasar sampe sistem. Data tersebut kemudian
dimasukkan ke dalam database berupa bahan dasar sebagai data penjadwalan nantinya
terhadap sistem. Semua data tersebut digunakan ketika aplikasi dijalankan. Database
identitas karyawan ditetapkan sebagai database karyawan dimana merupakan data
setiap karyawan baik itu perawat,
staff, office boy
, dokter dll, yang berisi tentang
identitas karyawan dan jabatannya dalam menjalankan tugas di rumah sakit tersebut.
Tabel 3.1 Data Perawat
Nama
Alamat
No HP
Agusmanto B
Jl. Sunggal 89
08137728382
Mila Fania
Jl. Veteran 88
08127272727
Nia Fransiska
Jl. Sekip 83
08123477777
Rudi Hartono
Jl. Sriwijaya 76
08137777363
(31)
16
3.1.2
Data Penjadwalan Perawat/Karyawan Rumah Sakit
Database penjadwalan perawat/karyawan rumah sakit ditetapkan sebagai database
jadwal kerja karyawan dimana merupakan data setiap karyawan baik itu perawat,
staff, office boy
, dokter dll, yang berisi tentang jadwal kegiatan karyawan tersebut
sehari-harinya dalam menjalankan tugas di rumah sakit tersebut.
Tabel 3.2 Data Penjadwalan Kerja Karyawan
Nama
Shift
Jadwal Jam
Agusmanto B
pagi
08.00-14.00 WIB
Mila Fania
malam
20.00-02.00 WIB
Nia Fransiska
siang
14.00-20.00 WIB
Rudi Hartono
pagi
20.00-02.00 WIB
Benny Geril
siang
08.00-14.00 WIB
3.1.3
Data Ruangan Perawat/Karyawan Rumah Sakit
Database ruangan perawat/karyawan rumah sakit ditetapkan sebagai database
ruangan karyawan dimana merupakan data setiap karyawan baik itu perawat,
staff
,
office boy
, dokter dll, yang berisi tentang jadwal ruangan karyawan tersebut
sehari-harinya dalam menjalankan tugas di rumah sakit tersebut.
Tabel 3.3 Data Ruang Kerja Karyawan
Nama
Shift
Ruangan
Nia Fransiska
Siang
VIP A1
Rudi Hartono
Malam
Ekonomi C03
Benny Geril
Siang
UGD
Mila Fania
Malam
UGD
Nia Fransiska
Siang
Ekonomi C04
3.1.4
Data Jumlah Karyawan atau Staff Rumah Sakit Berdasarkan Absen
Database jumlah perawat/karyawan rumah sakit ditetapkan sebagai database absensi
karyawan dimana merupakan data setiap karyawan baik itu perawat,
staff, office boy
,
(32)
17
dokter dll, yang berisi tentang jadwal karyawan yang hadir dan yang tidak dapat hadir
tersebut sehari-harinya dalam menjalankan tugas di rumah sakit tersebut.
Tabel 3.4 Data Absen Karyawan Rumah Sakit
Shift
Jumlah
Tidak Hadir
Shift
pagi
28 orang
3 orang
Shift
Siang
34 orang
2 orang
Shift
Malam
18 orang
3 orang
3.2
Analisis Sistem
Analisis suatu sistem bertujuan untuk mengidentifikasi permasalahan yang ada pada
sistem tersebut. Analisis ini sangat diperlukan sebagai dasar perancangan sistem
sebelum dibangun. Analisis sistem mencakup beberapa bagian yaitu desain data,
deskripsi sistem, dan implementasi desain.
Penelitian ini memiliki beberapa tahapan-tahapan proses sebagai berikut :
1.
User
atau berhadapan dengan sistem aplikasi pembelajaran dengan
menggunakan alat bantu berupa komputer untuk melakukan penjadwalan.
2.
Setelah aplikasi pembelajaran dimulai.
User
akan mulai melakukan
pembelajaran dengan memasukkan data
shift
yang ada.
3.
Data
shift
yang kemudian diisi dengan melakukan jam
shift
yaitu pukul
keberapa sampai pukul berapa dan jenis
shift
yang ditujukan padanya.
4.
Selanjutnya masuk ke dalam proses ruangan.
5.
Pada proses penentuan ruangan diisi dengan memasukkan nama ruangannya
dan jumlah perawat yang akan bekerja pada ruangan tersebut.
6.
Pada kategori perawat berisikan tentang identitas identitas setiap perawat yang
terdaftar di dalam rumah sakit tersebut.
7.
Kemudian masuk pada tahap penjadwalan rumah sakit.
8.
Pada tahap penjadwalan rumah sakit ini di input beberapa poin sebagai dasar
untuk menentukan
fitness
nya dalam menentukan jadwal kerja perawat di
rumah sakit.
(33)
18
9.
Pada proses penjadwalan adapun
field field
yang harus diisi adalah nama
ruangan,
shift
malam atau
shift
siang dan kemudian nama dari perawat yang
akan menerima tugas jaga tersebut.
10.
Pada hasil
output
akan ditentukan berapa jumlah ruangan nya, jumlah
perawatnya, jumlah
shift
nya yang berjalan disertai dengan nilai
fitness
nya.
11.
Adapun bentuk agoritma penjadwalan dapat dilihat pada
flowchart
pada
gambar 3.1.
(34)
19
3.2.1
Proses Algoritma Genetika
Adapun proses dari Algoritma Genetika dalama menentukan
fitness
dapat dilihat pada
flowchart
dibawah ini.
(35)
20
3.2.2
Proses Pengalokasian Pada Proses Penjadwalan
Proses Penglokasian merupakan proses yang langkah-langkahnya sebagai berikut :
1.
Sistem melakukan inisialisasi pasien dan perawat.
2.
Melakukan aturan alokasi perawat.
3.
Kemudian mengalokasikan jumlah perawat.
4.
Semua data ter
update
ke database data haasil alokasi perawat.
Gambar 3.3 Flowchart Proses Alokasi Penjadwalan
PASIEN
PERAWAT
ATURAN
ALOKASI
PERAWAT
JUMLAH
PERAWAT
DATA
HASIL
ALOKASI
(36)
21
3.2.3
Proses Penjadwalan
Proses penjadwalan memiliki langkah-langkah sebagai berikut :
1.
Inisialisasi pola tiap perawat.
2.
Melakukan proses optimasi perawat.
3.
Update
data perawat untuk cuti dan libur nasional.
4.
Update
jadwal perawat.
5.
Setelah dilakukan, maka jadwal perawat keluar. Berikut adalah bentuk
flowchart
nya pada gambar 3.3.
(37)
22
3.2.4
Proses Penyesuaian
Proses penyesuaian memiliki langkah-langkah sebagai berikut :
1.
Pada penyimpanan data jadwal perawat ada dua yaitu, pertama adalah jawal
dan yang kedua adalah perawat-jadwal.
2.
Ketika database di
update
, maka terjadi perpindahan data
shift
sesuai dengan
kebutuhan.
3.
Setelah itu
output
akan keluar, data jadwal boleh dibaca oleh perawat rumah
sakit.
4.
Berikut adalah bentuk
flowchart
nya pada gambar 3.4.
Gambar 3.5 Flowchart Proses Penyesuaian Jadwal
PERAWAT DAN
JADWAL
JADWAL
UPDATE DATABASE
TERJADI PERPINDAHAN SHIFT
LIHAT JADWAL HARI INI
(38)
23
3.3
Perancangan Sistem
3.3.1
Diagram
Use Case
Pada sistem pembelajaran ini, terdapat satu pengguna dalam aturan sistemnya.
Gambar diagram
use case
dari sistem ini dapat dilihat pada gambar 3.5.
(39)
24
3.3.2
Penjelasan
Use Case
Berikut ini adalah pendefinisan
use case
berdasarkan diagram yang digambarkan oleh
gambar 3.5.
Tabel 3.5 Defenisi Use Case
No
Use Case
Deskripsi
1
Mulai
Mulai untuk
update
data
2
Shift
Memasukkan data
shift
dan jam kerja.
3
Ruangan
Menentukan ruangan yang sesuai dengan data
shift
4
Perawat
Berisikan tentang semua identitas dari perawat.
5
Jadwal
Menentukan jadwal tetap dari perawat.
6
Tampilan jadwal
perawat
Halaman dimana perawat melihat jam kerja
shift
mereka.
7
Update database
Database perawat.
3.3.3
General Architecture
Rancangan keseleruhan sistem dapat ditampilakan dalam gambaran secara umum
melalui general arsitektur berdasarkan gambar 3.6 dibawah ini.
(40)
25
3.4
Perancangan Tampilan Antarmuka
Perancang tampilan antarmuka bertujuan untuk menggambarkan ide tampilan
antarmuka sistem yang dibuat.
3.4.1
Rancangan Tampilan Halaman Utama Aplikasi
Halaman ini berisikan halaman awal dari aplikasi ketika pertama kali dijalankan.
Perhatikan gambar 3.7 di bawah.
(41)
26
3.4.2
Rancangan Tampilan Halaman Menu
Shift
pada Aplikasi
Halaman utama merupakan halam yang menampilkan ketika menu
shift
dijalankan
untuk pertama kali. Rancangan tampilan halaman utama program dapat dilihat pada
gambar dibawah ini. Rancangan aplikasinya dapat dilihat pada gambar 3.8 yang
terdapat di bawah ini.
(42)
27
3.4.3
Rancangan Tampilan Halaman Ruangan
Halaman ini merupakan halaman berisi ruangan dimana perawat bekerja dengan
jadawal
shift
yang ada. Rancangan tampilan ruangan dapat dilihat pada gambar 3.9 di
bawah ini.
(43)
28
3.4.4
Rancangan Tampilan Halaman Perawat
Halaman ini berisikan tentang identitas dan nama-nama seluruh perawat rumah sakit.
Rancangan tampilan pada halaman pembelajaran angka dasar dapat dilihat pada
gambar 3.10 berikut ini.
(44)
29
3.4.5
Rancangan Tampilan Halaman Jadwal
Halaman ini berisikan tentang penjadwalan yang dilakukan pada setiap perawat rumah
sakit yang ada. Gambarannya dapat dilihat seperti gambar 3.11 dibawah ini.
(45)
30
3.4.6
Rancangan Tampilan Halaman Data Jadwal Jaga Perawat
Halamana ini berisikan tentang informasi yang akan dilihat oleh seluruh perawat
rumah sakit untuk dapat melihat jadwal
shift
mereka. Untuk tampilan aplikasinya
seperti pada gambar 3.12.
(46)
BAB 4
IMPLEMENTASI DAN PENGUJIAN
Tahapan yang dilakukan setelah analisis dan perancangan sistem adalah implementasi
dan pengujian sistem. Tahapan ini diperlukan untuk mengetahui apakah media
teknologi informasi tersebut berhasil atau tidak. Berikut merupakan hasil
implementasi dan pengujian dari sistem yang sudah dibangun.
4.1
Implementasi Sistem
Sesuai dengan hasil analisis dan perancangan sistem yang telah dibuat, dilakukanlah
implementasi perancangan menjadi aplikasi penjadwalan yang ditujukan membantu
staf rumah sakit dalam menentukan jadwal-jadwal perawat setiap bulannya dengan
menggunakan Algoritma Genetika ke dalam bahasa pemrograman PHP.
4.1.1
Spesifikasi Perangkat Keras dan Perangkat Lunak yang Digunakan
Sistem dibuat di dalam lingkungan perangakat keras yang memiliki spesifikasi sebagai
berikut:
1.
Processor standart.
2.
Memory RAM yang digunakan 2 GB.
3.
Kapasitas Hardisk 500 GB.
Selain perangkat keras, sistem juga dibuat dalam lingkungan spesifikasi perangkat
lunak sebagai berikut:
1.
Windows 7 Ultimate.
2.
Dreamwaver.
(47)
32
4.1.2
Tampilan-Tampilan Desain Penjadwalan Rumah Sakit
Tampilan halaman utama aplikasi merupakan tampilan desain
user
interface
ketika
aplikasi dijalankan. Pada tampilan utama terdapat empat panel dimana masing masing
panel berisi halaman halaman dalam proses terbentuknya penjadwalan perawat rumah
sakit dengan metode genetika. Adapun tampilannya dapat dilihat pada gambar 4.1.
Pada gambar diatas tampak halaman utama pada penjadwalan perawat dimana
halaman didesain sebaik mungkin dengan hasil yang tidak terlampau mencolok.
Pada halaman depan terdapat panel
dashboard
yang berfungsi sebagai halaman utama
yang berisikan tentang informasi yang ada di sekitar penjadwalan rumah sakit.
Selanjutnya pada panel perawat merupakan halaman yang berisikan tentang semua
data para perawat yang bekerja di dalam rumah sakit tersebut. Untuk lebih jelas nya
perhatikan gambar dibawah ini.
(48)
33
Gambar diatas berisikan tentang nama, alamat, no telepon dan data-data penting
perawat yang dibutuhkan oleh pihak rumah sakit.
Sedangkan pada panel libur adalah halaman dimana admin dapat melihat semua
perawat yang sudah mengajukan jadwal untuk libur berdasarkan ketentuan dari pihak
rumah sakit. Pihak rumah sakit menerima ajuan apabila ada perawat yang mengajukan
untuk libur/cuti. Apabila sesuai maka admin akan menyetujui ajuan dari perawat
tersebut. Namun apabila tidak cocok maka admin akan mengeluarkan data dimana
sebaiknya dia mengajukan libur/cuti. Berikut adalah tampilan laman libur perawat
rumah sakit.
(49)
34
Perawat dapat mengajukan cuti/libur sesuai dengan ketentuan rumah sakit, misalnya
dalam satu minggu tidak diperbolehkan ada 10 perawat yang mengajukan cuti/libur.
Kemudian pada panel selanjutnya adalah tabel dimana admin mencetak semua jadwal
yang sudah dikeluarkan oleh sistem penjadwalan berdasarkan data yang sudah diinput
ke dalam sistem penjadwalan rumah sakit. Perhatikan gambar berikut.
(50)
35
Apabila admin ingin mencetak jadwal, admin dapat langsung mengklik tombol panel
cetak jadwal. Setelah dicetak maka akan di tempel di mading informasi rumah sakit
agar setiap perawat dapat melihat jadwal mereka dalam sebulan penuh.
(51)
36
Namun sebelum admin mencetak hasil dari jadwal. Admin dapat meninjau
ulang/meriview semua jadwal terlebih dahulu sebelum dicetak dan ditempelkan ke
dalam mading informasi rumah sakit. Untuk pratinjau dari jadwal rumah sakit dapat
dilihat pada gambar berikut ini.
(52)
37
Namun sebelum proses pratinjau. Sistem akan mengeluarkan beberapa sampel jadwal
pada admin. Kemudian hak pada admin yang menentukan jadawal mana yang akan
dipilih berdasarkan beberapa sampel hasil yang dikeluarkan oleh sistem. Perahatikan
gambar dibawah ini. Ada terdapat beberapa individu yang dikeluarkan oleh sistem dan
gamber berikut merupakan tampilan sebagian dari individu yang ada.
(53)
38
4.2
Hasil Pengujian Sistem
Hasil dari seluruh pengujian dapat dilihat seperti pada tabel 4.1 dibawah ini.
Pada tabel diatas tampak hasil dari penjadwalan dimana biru menandakan shift pagi,
kuning menandakan shift siang, hijau menandakan shift malam dan warna merah
menandakan libur yang dikonvert ke dalam bentuk file “.pdf”. Pada hasil analisis
diatas tampak beberapa perawat yang dijadikan sampel sebagai perawat perawat yang
bekerja dalam sebuah rumah sakit. T1 sampe T31 merupakan hari dalam satu bulan,
dimana hari yang diambil adalah hari yang terbanyak.
(54)
BAB 5
KESIMPULAN DAN SARAN
5.1
Kesimpulan
Dari hasil pembahasan tentang Perancangan Aplikasi Penjadwalan Perawat dengan
menggunakan algoritma genetika maka diambil kesimpulan sebagai berikut :
1
Dengan adanya aplikasi penjadwalan ini, maka pihak rumah sakit yang memakai
dapat lebih mudah menyajikan informasi tentang jadwal penjadwalan perawat
rumah sakit setiap bulannya.
2
Mempermudah rumah sakit dalam pencarian data, proses evaluasi apabila pihak
rumah sakit ingin melihat data-data dalam beberapa bulan terakhir.
3
Aplikasi sistem penjadwalan perawat rumah sakit ini sudah berjalan menuju
100%.
5.2
Saran
Untuk pengembangan lebih lanjut maka penulis memberikan saran yang sangat
bermafaat dan dapat membantu proses penjadwalan rumah sakit bagi peneliti
selanjutnya, yaitu :
Perlunya pengembangan aplikasi agar setiap perawat memiliki ID dan
password
sehingga perawat dapat memantau kapan jadwal tugasnya masing-masing dan perawat
dapat mengajukan cuti melalui akunnya masing-masing secara
online
.
(55)
40
DAFTAR PUSTAKA
Abdennadher, S. and Schlenker, H., 1999.
Nurse Scheduling using Constraint Logic
Programming
. American Association for Artificial Intelligence.
Abdullah, A. 2003. Perangkat Lunak Optimasi Alokasi dan Penjadwalan Perawat
Rumah Sakit. Skripsi. Institut Teknologi Sepuluh Nopember. Surabaya.
Ahuja, R.K., Magnanti, T.L., dan Orlin, J.B. 1993.“Network Flows: Theory,
Algorithm, and Applications”, Prentice Hall.
Aickelin, U. & Dowsland, K.A., 2000.
An Indirect Genetic Algorithm for a Nurse
Scheduling Problem
. Computer and Operations Research.
Glover, F., Laguna, M., 1997. “Tabu Search”, Dordrecht : Kluwer Academic
Publisher Group.
Gunes, E. D., 1999. “Workforce Scheduling”,Department of Industrial Engineering,
Bilkent University.
Hernani, S. E., 2002. “Pola Tenaga Keperawatan Rumah Sakit Mardi Rahayu Tahun
2002”, Rumah Sakir Mardi Rahayu Kudus.
Hertz, A., Taillard, E., 2000. “A Tutorial on Tabu Search”, University of Montreal,
Centre of Research and Transportation.
Miller, H.E., Pierskalla, W.P., and Rath, G.J., 1976. “Nurse Scheduling Using
Mathematical Programming”, Operations Research.
Muhammad, A. 2006.
Aplikasi Algoritma Genetik Untuk Optimasi Penjadwalan Mata
Kuliah
. Universitas Komputer Indonesia.
(56)
41
Nugraha, Ivan. 2008. Aplikasi Algoritma Genetik Untuk Optimasi Penjadwalan
Kegiatan Belajar Mengajar. Skripsi. Institut Teknologi Bandung.
Randy L. Haupt . 2004.
Practical Genetic Algorithms
. A John Wiley & Sons, Inc.
Suwadi, R., 2003. Alokasi dan Penjadwalan Perawat pada Rumah Sakit Mardi Rahayu
Kudus. Skripsi. Institut Teknologi Surakarta: Surabaya.
Wilhelm, E. 2005.
A Hybrid Grouping Genetic Algorithm for Examination
Timetabling
. University of Applied Sciences.
(57)
LAMPIRAN
LISTING PROGRAM
Index. Php
<?php session_start();
include "koneksi/koneksi.php"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="">
<meta name="author" content="">
<link href='img/icon.png' rel='shortcut icon'/> <title>Penjadwalan Perawat</title>
<!-- Bootstrap Core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS -->
<link href="css/plugins/metisMenu/metisMenu.min.css" rel="stylesheet"> <!-- Custom CSS -->
<link href="css/penjadwalanperawat.css" rel="stylesheet"> <!-- Custom Fonts -->
<link href="font-awesome-4.1.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> </head>
<body style="image: url('img/login.jpg');repeat: no-repeat; background-position: right top; background-attachment: fixed;">
<? if (!isset($_SESSION[admin])&& !isset($_GET['action'])) { ?> <div class="container intro-header">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div class="panel-heading text-center" style="color:white;text-shadow: 0px 0px 5px #333;">
<h1 class="h1-plus"><strong>Penjadwalan Perawat</strong></h1>
<h3 class="h3-plus">Menggunakan Algoritma Genetika</h3>
</div>
<hr class="intro-divider">
(58)
<form role="form" action="?action=cek_login" method="post">
<fieldset class="col-md-6 col-md-offset-3"> <div class="form-group">
<? if(isset($_GET['pesan']) && $_GET['pesan']=="gagal") {
echo "<div class='alert alert-warning' role='alert'>Periksa kembali username atau password Anda</div>";
} ?> </div>
<div class="form-group">
<input class="form-control" placeholder="Username" name="username" type="username" autofocus>
</div>
<div class="form-group">
<input class="form-control" placeholder="Password" name="password" type="password" value="">
</div>
<input type="submit" name="button" class="btn btn-lg btn-success btn-block" value="Login">
</fieldset> </form> </div> </div> </div> </div>
<!-- Footer --> <footer>
<div class="container">
<div class="row text-center"> <div class="col-lg-12"> <br>
<p class="copyright text-muted small" style="color:white;text-shadow: 0px 0px 5px #333;">Copyright © Adisty Amelia Daulay 2014. All Rights Reserved</p>
<br> </div> </div>
</div> </footer> <? } ?>
<? if($_GET['action']=="cek_login"){ $user=$_POST['username']; $pass=md5($_POST['password']);
$query=mysql_query("SELECT * FROM tbl_pengguna WHERE password='$pass' limit 1"); $jlh=mysql_num_rows($query);
if($jlh>0) {
$fetch = mysql_fetch_array($query); $_SESSION[admin]=$user; $_SESSION[level]=$fetch[level]; ?> <script> setTimeout(function(){document.location.href = "home.php?module=dashboard"}, 2000); </script>
(59)
<meta http-equiv="refresh" content="0;home.php?module=dashboard"><?php } else {
?><meta http-equiv="refresh" content="0;?pesan=gagal"><?php }
} elseif(isset($_SESSION[admin])&& !isset($_GET['action'])) {
?> <meta http-equiv="refresh" content="0;home.php?module=dashboard"><?php } ?>
<!-- jQuery Version 1.11.0 -->
<script src="js/jquery-1.11.0.js"></script> <!-- Bootstrap Core JavaScript --> <script src="js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript -->
<script src="js/plugins/metisMenu/metisMenu.min.js"></script> <!-- Custom Theme JavaScript -->
<script src="js/penjadwalanperawat.js"></script> </body>
(60)
Home.php
<?php session_start();
if(!isset($_SESSION[admin])){ header('location: ./?Dashboard'); }
function status($status){
echo'<script type="text/javascript"> alert("'.$status.'");
{
window.history.go(-1) }
</script>'; }
include "koneksi/koneksi.php"; include "part/head.php"; ?>
<body>
<div id="wrapper">
<? include "part/menu.php"; ?>
<div id="page-wrapper" style="background-image: url('img/dashboard.jpg');"> <? include "content.php"; ?>
</div>
<!-- /#page-wrapper --> <? include "part/footer.php"; ?> </div>
<!-- /#wrapper --> </body>
(61)
Content.php
<?php
session_start();
switch($_GET['module']) {
case "dashboard":
include "modul/dashboard.php"; break;
case "dlogout":
include "modul/dlogout.php"; break;
case "perawat":
include "modul/perawat.php"; break;
case "libur":
include "modul/libur.php"; break;
case "cetak_jadwal":
include "modul/cetak_jadwal.php"; break;
default:
echo "Maaf Modul belum tersedia"; }
(62)
Cetakjadwal.php <? include "koneksi/koneksi.php"; ?> <div class="row"> <div class="col-lg-12">
<h1 class="page-header">Cetak Jadwal</h1> </div>
<!-- /.col-lg-12 --> </div>
<!-- /.row --> <?
/** Function **/ // Random Jadwal function getRJ($length) {
// Gen = 1, perawat i mendapat shift pagi pada hari ke-t // Gen = 2, perawat i mendapat shift sore pada hari ke-t // Gen = 3, perawat i mendapat shift malam pada hari ke-t
// Gen = 4, perawat i mendapat libur spesial atau cuti pada hari ke-t
// Gen = A-J, tingkat prioritas perawat i mendapat hari libur dasar pada hari ke-t, J terendah (untuk mutasi)
$gen = "1234ABCDEFGHIJ"; $validCharNumber = strlen($gen);
$result = "";
for ($i = 0; $i < $length; $i++) {
$index = mt_rand(0, $validCharNumber - 1); $result .= $gen[$index]; }
return $result; }
// Random Mutation function getRS($length) { $gen = "123";
$validCharNumber = strlen($gen);
$result = "";
for ($i = 0; $i < $length; $i++) {
$index = mt_rand(0, $validCharNumber - 1); $result .= $gen[$index]; }
return $result; }
function getRL($length) { $gen = "BCDEFGHIJ";
$validCharNumber = strlen($gen);
(63)
for ($i = 0; $i < $length; $i++) {
$index = mt_rand(0, $validCharNumber - 1); $result .= $gen[$index]; }
return $result; }
function str_split_php4($text, $split){
//place each character of the string into and array $array = array();
for($i=0; $i < strlen($text); $i++){ $key = NULL;
for ($j = 0; $j < $split; $j++){ $key .= $text[$i];
}
array_push($array, $key); }
return $array; }
// Syarat Batasan 1 - Total perawat libur dalam 1 hari melebihi total perawat yang ditentukan rumah sakit
function batasan1($tanggal, $individu) {
$sqlbatasan1 = mysql_query("SELECT * FROM ga_gen WHERE tanggal = '".$tanggal."' AND id_individu = '".$individu."' AND nama_gen BETWEEN 'A' AND 'J' ORDER BY nama_gen");
/* determine number of rows sqlbatasan1 set */ $rowbatasan1 = mysql_num_rows($sqlbatasan1); return $rowbatasan1;
}
// Syarat Batasan 2 - Total hari libur yang diterima 1 perawat selama 31 hari melebihi total hari yang ditentukan rumah sakit
function batasan2($kromosom, $individu) {
$sqlbatasan2 = mysql_query("SELECT * FROM ga_gen WHERE id_kromosom = '".$kromosom."' AND id_individu = '".$individu."' AND nama_gen BETWEEN 'A' AND 'J'");
/* determine number of rows sqlbatasan2 set */ $rowbatasan2 = mysql_num_rows($sqlbatasan2); return $rowbatasan2;
}
// Syarat Batasan 3 - Total perawat shift pagi dalam 1 hari kurang dari total perawat yang ditentukan rumah sakit yaitu 4
function batasan3($tanggal, $individu) {
$sqlbatasan3 = mysql_query("SELECT * FROM ga_gen WHERE tanggal = '".$tanggal."' AND id_individu = '".$individu."' AND nama_gen = '1' ORDER BY nama_gen");
/* determine number of rows sqlbatasan3 set */ $rowbatasan3 = mysql_num_rows($sqlbatasan3); return $rowbatasan3;
}
// Syarat Batasan 4 - Total perawat shift siang dalam 1 hari kurang dari total perawat yang ditentukan rumah sakit yaitu 4
(1)
protected function _border_hidden($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {
return; }
// Border rendering functions
protected function _border_dotted($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {
$this->_border_line($x, $y, $length, $color, $widths, $side, $corner_style, "dotted", $r1, $r2); }
protected function _border_dashed($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {
$this->_border_line($x, $y, $length, $color, $widths, $side, $corner_style, "dashed", $r1, $r2); }
protected function _border_solid($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {
// TODO: Solve rendering where one corner is beveled (radius == 0), one corner isn't. if ( $corner_style !== "bevel" || $r1 > 0 || $r2 > 0 ) {
// do it the simple way
$this->_border_line($x, $y, $length, $color, $widths, $side, $corner_style, "solid", $r1, $r2); return;
}
list($top, $right, $bottom, $left) = $widths; // All this polygon business is for beveled corners... switch ($side) {
case "top":
$points = array($x, $y, $x + $length, $y,
$x + $length - $right, $y + $top, $x + $left, $y + $top);
$this->_canvas->polygon($points, $color, null, null, true); break;
case "bottom":
$points = array($x, $y, $x + $length, $y,
$x + $length - $right, $y - $bottom, $x + $left, $y - $bottom);
$this->_canvas->polygon($points, $color, null, null, true); break;
case "left":
$points = array($x, $y, $x, $y + $length,
$x + $left, $y + $length - $bottom, $x + $left, $y + $top);
$this->_canvas->polygon($points, $color, null, null, true); break;
(2)
$points = array($x, $y, $x, $y + $length,
$x - $right, $y + $length - $bottom, $x - $right, $y + $top);
$this->_canvas->polygon($points, $color, null, null, true); break;
default: return; } }
protected function _apply_ratio($side, $ratio, $top, $right, $bottom, $left, &$x, &$y, &$length, &$r1, &$r2) {
switch ($side) { case "top":
$r1 -= $left * $ratio; $r2 -= $right * $ratio; $x += $left * $ratio; $y += $top * $ratio;
$length -= $left * $ratio + $right * $ratio; break;
case "bottom": $r1 -= $right * $ratio; $r2 -= $left * $ratio; $x += $left * $ratio; $y -= $bottom * $ratio;
$length -= $left * $ratio + $right * $ratio; break;
case "left":
$r1 -= $top * $ratio; $r2 -= $bottom * $ratio; $x += $left * $ratio; $y += $top * $ratio;
$length -= $top * $ratio + $bottom * $ratio; break;
case "right":
$r1 -= $bottom * $ratio; $r2 -= $top * $ratio; $x -= $right * $ratio; $y += $top * $ratio;
$length -= $top * $ratio + $bottom * $ratio; break;
default: return; } }
protected function _border_double($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {
(3)
$third_widths = array($top / 3, $right / 3, $bottom / 3, $left / 3); // draw the outer border
$this->_border_solid($x, $y, $length, $color, $third_widths, $side, $corner_style, $r1, $r2); $this->_apply_ratio($side, 2/3, $top, $right, $bottom, $left, $x, $y, $length, $r1, $r2); $this->_border_solid($x, $y, $length, $color, $third_widths, $side, $corner_style, $r1, $r2); }
protected function _border_groove($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {
list($top, $right, $bottom, $left) = $widths;
$half_widths = array($top / 2, $right / 2, $bottom / 2, $left / 2);
$this->_border_inset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2);
$this->_apply_ratio($side, 0.5, $top, $right, $bottom, $left, $x, $y, $length, $r1, $r2); $this->_border_outset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2); }
protected function _border_ridge($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {
list($top, $right, $bottom, $left) = $widths;
$half_widths = array($top / 2, $right / 2, $bottom / 2, $left / 2);
$this->_border_outset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2);
$this->_apply_ratio($side, 0.5, $top, $right, $bottom, $left, $x, $y, $length, $r1, $r2); $this->_border_inset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2); }
protected function _tint($c) { if ( !is_numeric($c) ) return $c;
return min(1, $c + 0.16); }
protected function _shade($c) { if ( !is_numeric($c) )
return $c;
return max(0, $c - 0.33); }
protected function _border_inset($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {
switch ($side) { case "top":
(4)
case "left":
$shade = array_map(array($this, "_shade"), $color);
$this->_border_solid($x, $y, $length, $shade, $widths, $side, $corner_style, $r1, $r2); break;
case "bottom": case "right":
$tint = array_map(array($this, "_tint"), $color);
$this->_border_solid($x, $y, $length, $tint, $widths, $side, $corner_style, $r1, $r2); break;
default: return; } }
protected function _border_outset($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {
switch ($side) { case "top": case "left":
$tint = array_map(array($this, "_tint"), $color);
$this->_border_solid($x, $y, $length, $tint, $widths, $side, $corner_style, $r1, $r2); break;
case "bottom": case "right":
$shade = array_map(array($this, "_shade"), $color);
$this->_border_solid($x, $y, $length, $shade, $widths, $side, $corner_style, $r1, $r2); break;
default: return; } }
// Draws a solid, dotted, or dashed line, observing the border radius
protected function _border_line($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $pattern_name, $r1 = 0, $r2 = 0) {
list($top, $right, $bottom, $left) = $widths;
$width = $$side;
$pattern = $this->_get_dash_pattern($pattern_name, $width); $half_width = $width/2;
$r1 -= $half_width; $r2 -= $half_width; $adjust = $r1/80; $length -= $width;
switch ($side) { case "top":
$x += $half_width; $y += $half_width;
if ( $r1 > 0 ) {
$this->_canvas->arc($x + $r1, $y + $r1, $r1, $r1, 90-$adjust, 135+$adjust, $color, $width, $pattern);
(5)
}
$this->_canvas->line($x + $r1, $y, $x + $length - $r2, $y, $color, $width, $pattern);
if ( $r2 > 0 ) {
$this->_canvas->arc($x + $length - $r2, $y + $r2, $r2, $r2, 45-$adjust, 90+$adjust, $color, $width, $pattern);
} break;
case "bottom": $x += $half_width; $y -= $half_width;
if ( $r1 > 0 ) {
$this->_canvas->arc($x + $r1, $y - $r1, $r1, $r1, 225-$adjust, 270+$adjust, $color, $width, $pattern);
}
$this->_canvas->line($x + $r1, $y, $x + $length - $r2, $y, $color, $width, $pattern);
if ( $r2 > 0 ) {
$this->_canvas->arc($x + $length - $r2, $y - $r2, $r2, $r2, 270-$adjust, 315+$adjust, $color, $width, $pattern);
} break;
case "left":
$y += $half_width; $x += $half_width;
if ( $r1 > 0 ) {
$this->_canvas->arc($x + $r1, $y + $r1, $r1, $r1, 135-$adjust, 180+$adjust, $color, $width, $pattern);
}
$this->_canvas->line($x, $y + $r1, $x, $y + $length - $r2, $color, $width, $pattern);
if ( $r2 > 0 ) {
$this->_canvas->arc($x + $r2, $y + $length - $r2, $r2, $r2, 180-$adjust, 225+$adjust, $color, $width, $pattern);
} break;
case "right":
$y += $half_width; $x -= $half_width;
if ( $r1 > 0 ) {
$this->_canvas->arc($x - $r1, $y + $r1, $r1, $r1, 0-$adjust, 45+$adjust, $color, $width, $pattern); }
$this->_canvas->line($x, $y + $r1, $x, $y + $length - $r2, $color, $width, $pattern);
if ( $r2 > 0 ) {
$this->_canvas->arc($x - $r2, $y + $length - $r2, $r2, $r2, 315-$adjust, 360+$adjust, $color, $width, $pattern);
(6)
} break; } }
protected function _set_opacity($opacity) {
if ( is_numeric($opacity) && $opacity <= 1.0 && $opacity >= 0.0 ) { $this->_canvas->set_opacity( $opacity );
} }
protected function _debug_layout($box, $color = "red", $style = array()) {
$this->_canvas->rectangle($box[0], $box[1], $box[2], $box[3], CSS_Color::parse($color), 0.1, $style);
} }