Implementasi Dan Perancangan Applikasi Penyusunan Jadwal Kerja Perawat Rumah Sakit

(1)

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 &copy; 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);

} }