Peramalan Jumlah Penjualan Distributor Telur Terhadap Permintaan Pasar Menggunakan Metode Average-Based Fuzzy Time Series(ABFTS)
TERHADAP PERMINTAAN PASAR MENGGUNAKAN METODE
AVERAGE-BASED FUZZY TIME SERIES
(ABFTS)
SKRIPSI
IKA HASNITA TANJUNG
081402037
PROGRAM STUDI TEKNOLOGI INFORMASI
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
(2)
TIME SERIES (ABFTS)
SKRIPSI
Diajukan untuk melengkapi tugas dan memenuhi syarat mencapai gelar Sarjana Teknologi Informasi
IKA HASNITA TANJUNG 081402037
PROGRAM STUDI S1 TEKNOLOGI INFORMASI
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA
MEDAN 2012
(3)
PERSETUJUAN
Judul : PERAMALAN JUMLAH PENJUALAN
DISTRIBUTOR TELUR TERHADAP PERMINTAAN PASAR MENGGUNAKAN METODE AVERAGE-BASED FUZZY TIME
SERIES (ABFTS)
Kategori : SKRIPSI
Nama : IKA HASNITA TANJUNG
Nomor Induk Mahasiswa : 081402037
Program Studi : SARJANA (S1) TEKNOLOGI INFORMASI Departemen : TEKNOLOGI INFORMASI
Fakultas : ILMU KOMPUTER DAN TEKNOLOGI
INFORMASI
Diluluskan di Medan, 2012
Komisi Pembimbing :
Pembimbing 2 Pembimbing 1
Dra. Elly Rosmaini, M.Si Dr. Erna Budhiarti Nababan, M.IT NIP. 196005201985032002
Diketahui/Disetujui oleh
Program Studi S1 Teknologi Informasi Ketua,
Prof. Opim Salim Sitompul, M.Sc NIP. 196108171987011001
(4)
PERNYATAAN
PERAMALAN JUMLAH PENJUALAN DISTRIBUTOR TELUR TERHADAP PERMINTAAN PASAR MENGGUNAKAN METODE AVERAGE-BASED FUZZY
TIME SERIES (ABFTS)
SKRIPSI
Saya mengakui bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.
Medan, 2012
Ika Hasnita Tanjung 081402037
(5)
PENGHARGAAN
Puji syukur penulis panjatkan kehadirat Allah SWT, yang telah memberikan rahmat dan hidayah-Nya sehingga penulis dapat menyelesaikan Skripsi ini, sebagai syarat untuk memperoleh gelar Sarjana Teknologi Informasi, Program Studi S1 Teknologi Informasi Universitas Sumatera Utara. Dalam penyelesaian Skripsi ini penulis banyak sekali mendapatkan dukungan, saran, dan nasehat dari berbagai pihak.
Dalam kesempatan ini penulis mengucapkan terima kasih kepada: Ibu Dr. Erna Budhiarti Nababan, M.IT, selaku Dosen Pembimbing I dan Ibu Dra. Elly Rosmaini, M.Si, selaku Dosen Pembimbing II, yang telah bersedia meluangkan waktu dan pikiran untuk memberikan motivasi dan saran yang membangun dalam penyelesaian Skripsi ini, Ucapan terima kasih juga ditujukan kepada Ibu Dra. Mardiningsih, M.Si dan Bapak Syahriol Sitorus, S.Si,M.Si selaku dosen penguji dan penulis mengucapkan terima kasih kepada semua dosen Program Studi Teknologi Informasi yang telah memberikan ilmu yang bermanfaat bagi penulis.
Segala hormat dan terima kasih secara khusus penulis ucapkan kepada ayahanda Harmain Sutan Nurdin dan Ibunda Elma Tanjung serta seluruh keluarga atas motivasi, kasih sayang, dan dukungan baik secara materi maupun do’a yang tak pernah putus yang diberikan kepada penulis, tak lupa kepada adik Maslim serta seluruh sahabat penulis Stambuk 2008 khususnya Fanny, Desfi, Ester, Tara, dan Lia atas saran dan dukungan yang sangat bermanfaat.
Penulis berharap bahwa Skripsi ini bermanfaat terutama kepada penulis maupun para pembaca. Sekali lagi penulis ucapkan terima kasih atas segalanya. Semoga segala kebaikan diberikan balasan yang setimpal oleh Allah SWT.
(6)
ABSTRAK
Kegiatan memprediksi atau meramalkan jumlah penjualan untuk periode mendatang, merupakan hal penting bagi distributor telur untuk meningkatkan keuntungan, agar tidak terjadi kekurangan ataupun kelebihan telur yang dipasarkan. Pada penelitian ini, teknik fuzzy di dalam metode average-based fuzzy time series akan diimplementasikan untuk meramalkan jumlah penjualan telur untuk satu minggu ke depan pada salah satu distributor telur di Kabupaten Deli Serdang.
Kata Kunci : Average-Based Fuzzy Time Series, Fuzzy Time Series, Peramalan,Teknik
(7)
USING AVERAGE-BASED FUZZY TIME SERIES (ABFTS) METHOD
ABSTRACT
Predicting or forecasting the number of sales for the coming period is important for egg distributors to increase profits, so that no shortage or surplus eggs are marketed. In this research, average-based fuzzy time series method will be implemented to predict the amount of egg selling for a next one week on one of egg distributors in Deli Serdang.
Keyword: Average-Based Fuzzy Time Series, Forecasting, Fuzzy Technique, Time Series
(8)
Halaman
Persetujuan ii
Pernyataan iii
Penghargaan iv
Abstrak v
Abstract vi
Daftar Isi vii
Daftar Tabel ix
Daftar Gambar x
Bab 1 Pendahuluan 1
1.1 Latar Belakang 2
1.2 Perumusan Masalah 3
1.3 Batasan Masalah 3
1.4 Tujuan Penelitian 3
1.5 Manfaat Penelitian 3
1.6 Metodologi Penelitian 4
1.7 Sistematika Penulisan 5
Bab 2 Landasan Teori 6
2.1 Peramalan 6
2.2 Himpunan Fuzzy 12
2.2.1 Fungsi Keanggotaan 13
2.2.2 Notasi Fuzzy 17
2.2.3 Operasi Himpunan Fuzzy 17
2.2.4 Nilai Linguistik 18
2.3 Peramalan dengan Metode Fuzzy Time Series 18
2.4 Penelitian Terdahulu 19
2.4 Peramalan dengan Metode Average-Based Fuzzy Time Series 21
2.4.1 Interval Berbasis Nilai Rata-rata (Average-Based Lengths) 22
2.4.2 Fuzzy Logical Relationship (FLR) 24
2.4.3 Fuzzy Logical Relationship Group (FLRG) 24
2.4.4 Peramalan dan Defuzzifikasi 24
Bab 3 Analisis dan Perancangan Sistem 27
3.1 Identifikasi Masalah 27
3.2 Data yang Digunakan 28
3.3 Analisis Sistem 29
3.4 Perancangan Sistem 38
3.4.1 Diagram Aliran Data 38
3.4.2 Kamus Data 45
3.4.3 Perancangan Menu Sistem 46
(9)
Bab 4 Implementasi dan Pengujian Sistem 52
4.1 Implementasi Sistem 52
4.1.1 Spesifikasi Perangkat Keras dan Perangkat Lunak yang Digunakan 52 4.1.2 Implementasi Perancangan Antarmuka 53 4.1.3 Implementasi Data 58
4.2 Pengujian Sistem 60
4.2.1 Rencana Pengujian Sistem 60 4.2.2 Kasus dan Hasil Pengujian Sistem 61 4.2.3 Pengujian Kinerja Sistem 67 4.3 Kesimpulan Hasil Pengujian Sistem 74
Bab 5 Kesimpulan dan Saran 76
5.1 Kesimpulan 76
5.2 Saran 76
Daftar Pustaka 77
(10)
Halaman
Tabel 2.1 Produksi dan Selisih Produksi Kopi Dunia Tahun 2000-2005 8
Tabel 2.2 Perbandingan antara Penjualan, Pembelian Bahan Baku, dan Jumlah Karyawan 8
Tabel 2.3 Data Pooled (Panel) Ekspor Impor Kopi Indonesia dan Malaysia Tahun 2005-2007 9
Tabel 2.4 Penelitian Fuzzy Time Series Terdahulu pada Peramalan Pendaftaran Universitas Alabama 21
Tabel 2.5 Pemetaan Basis Peramalan 23
Tabel 2.5 Pemetaan Basis Peramalan 23
Tabel 2.5 Pemetaan Basis Peramalan 23
Tabel 3.1 Rangkuman Data Penjualan Telur Tahun 2009-2011 28
Tabel 3.2 Kamus Data User ID 45
Tabel 3.3 Kamus Data Penjualan 46
Tabel 4.1 Rangkuman Data Penjualan Telur Tahun 2009-2011 58
Tabel 4.2 Rencana Pengujian 60
Tabel 4.3 Hasil Pengujian 61
Tabel 4.4Data Penjualan Telur per Periode 67
Tabel 4.5 Selisih Absolute dan Rata-rata Selisih Absolute 68
Tabel 4.6 Nilai Linguistik 69
Tabel 4.7 Fuzzy Logical Relationship (FLR) 70
Tabel 4.8 Defuzzifikasi Hasil Peramalan 71
Tabel 4.9 Rangkuman Hasil Pengujian untuk Data Penjualan Telur Tahun 2009-2011 73
(11)
Halaman
Gambar 2.1 Data Penjualan Beras per Bulan Tahun 2011 dengan
Pola Horizontal (H) 9
Gambar 2.2 Data Penjualan Seragam Sekolah per Bulan Tahun 2011 dengan Pola Musiman (S) 10
Gambar 2.3 Data Penjualan Mobil per Bulan Tahun 2000-2008 pada PT. Jaya Mandiri dengan Pola Siklis (C) 11
Gambar 2.4 Data Produk Domestik Bruto per Kapita dengan Pola Trend (T) 12
Gambar 2.5 Grafik Fungsi Keanggotaan pada Representasi Linier Naik 13
Gambar 2.6 Grafik Fungsi Keanggotaan pada Representasi Linier Turun 14
Gambar 2.7 Grafik Fungsi Keanggotaan pada Representasi Kurva Segitiga 14
Gambar 2.8 Grafik Fungsi Keanggotaan pada Representasi Kurva Trapesium 15
Gambar 2.9 Grafik Fungsi Keanggotaan pada Representasi Kurva Bentuk Bahu 16
Gambar 2.10 Proses dalam Metode Average-Based Fuzzy Time Series 22
Gambar 3.1 Pola Horizontal Penjualan Telur Tahun 2009-2011 29
Gambar 3.2 Algoritma Average-Based Fuzzy Time Series pada Sistem 30
Gambar 3.3 Himpunan Fuzzy untuk Data Penjualan Telur 35
Gambar 3.4 Diagram Konteks DFD 39
Gambar 3.5 DFD Level 1 40
Gambar 3.6 DFD Level 1 Proses 2.0 41
Gambar 3.7 DFD Level 1 Proses 3.0 43
Gambar 3.8 Struktur Menu Sistem 46
Gambar 3.9 Rancangan Halaman Login 46
Gambar 3.10 Rancangan Halaman Utama 47
Gambar 3.11Rancangan Halaman Pengguna 48
Gambar 3.12Rancangan Halaman Olah Data Penjualan 49
Gambar 3.13 Rancangan Halaman Peramalan 50
Gambar 4.1 Halaman Login 53
Gambar 4.2 Halaman Utama 54
Gambar 4.3 Halaman Pengguna 55
Gambar 4.4 Halaman Olah Data Penjualan 56
Gambar 4.5 Halaman Peramalan 57
Gambar 4.6 Halaman Grafik 58
Gambar 4.7 Database Penjualan Telur 59
Gambar 4.8 Input Data Pada Sistem Peramalan Penjualan Telur 72
Gambar 4.9 Hasil Peramalan oleh Sistem Peramalan Penjualan Telur 73
Gambar 4.10 Pola Data Penjualan Telur dan Hasil Peramalan 75
(12)
ABSTRAK
Kegiatan memprediksi atau meramalkan jumlah penjualan untuk periode mendatang, merupakan hal penting bagi distributor telur untuk meningkatkan keuntungan, agar tidak terjadi kekurangan ataupun kelebihan telur yang dipasarkan. Pada penelitian ini, teknik fuzzy di dalam metode average-based fuzzy time series akan diimplementasikan untuk meramalkan jumlah penjualan telur untuk satu minggu ke depan pada salah satu distributor telur di Kabupaten Deli Serdang.
Kata Kunci : Average-Based Fuzzy Time Series, Fuzzy Time Series, Peramalan,Teknik
(13)
USING AVERAGE-BASED FUZZY TIME SERIES (ABFTS) METHOD
ABSTRACT
Predicting or forecasting the number of sales for the coming period is important for egg distributors to increase profits, so that no shortage or surplus eggs are marketed. In this research, average-based fuzzy time series method will be implemented to predict the amount of egg selling for a next one week on one of egg distributors in Deli Serdang.
Keyword: Average-Based Fuzzy Time Series, Forecasting, Fuzzy Technique, Time Series
(14)
BAB 1
PENDAHULUAN
1.1 Latar Belakang
Kelangsungan sebuah usaha sangat diperlukan oleh setiap organisasi baik yang berorientasi pada profit ataupun yang nonprofit. Dalam organisasi yang berorientasi pada profit, kegiatan usaha yang dilakukan diharapkan dapat berlangsung secara terus menerus untuk jangka waktu yang lama, bahkan kegiatan usaha tersebut diharapkan juga mengalami peningkatan dari segi aktivitas operasi maupun laba yang diperoleh.
Sebagai salah satu usaha yang berorientasi pada profit, distributor telur diharapkan dapat terus meningkatkan keuntungan, salah satunya dengan menyediakan telur sesuai dengan permintaan pasar, agar tidak terjadi kekurangan atau kelebihan telur yang dipasarkan. Menurut hasil survei pada salah satu distributor telur, sering terjadi masalah dalam penyediaan telur karena jumlah telur yang akan dipasarkan tidak sesuai dengan jumlah permintaan, sehingga hal ini sering menyebabkan kerugian. Jika jumlah telur yang disediakan melebihi permintaan, maka telur akan menumpuk di gudang dan akhirnya busuk. Untuk menghindari kerugian yang lebih besar distributor ini terpaksa menjual kepada distributor lain tetapi dengan harga pokok. Sebaliknya jika jumlah telur yang disediakan lebih sedikit dari permintaan pasar, maka distributor ini terpaksa mengambil dari distributor lain untuk mencukupinya, tentu saja dengan harga diatas standar sehingga keuntungan yang diperoleh berkurang. Hal ini tentu saja akan mengancam keberlangsungan usaha tersebut. Jadi, diperlukan suatu sistem otomasi yang dapat memprediksi atau meramalkan jumlah telur yang akan dipasarkan sesuai permintaan dengan suatu metode tertentu.
(15)
Ada beberapa metode yang dikenal dan telah diimplementasikan dalam beberapa penelitian, untuk memprediksi atau meramalkan jumlah permintaan barang yang akan dipasarkan pada periode yang akan datang, diantaranya: Arima Box-Jenkins
dan Jaringan Multilayer Perceptron (Rahmawati, 2007); Metode Kuadrat Terkecil atau least square (Widodo, 2008); Metode Optimasi Linear Programming (Abbas et al. 2008); Metode Double Moving Average (Mulyandi et al. 2010); Metode
Exponentially Weighted Quantile Regression (Anggraeni et al. 2011). Dari berbagai macam metode ini didapatkan tingkat kesalahan peramalan yang berbeda-beda sesuai dengan data yang diteliti.
Pada skripsi ini penulis mencoba melakukan sebuah peramalan jumlah permintaan barang pada suatu usaha yang bergerak pada bidang pendistribusian telur dengan menggunakan metode Average-Based Fuzzy Time Series (ABFTS). Penulis tertarik dengan metode ini karena metode fuzzy time series telah banyak diterapkan diberbagai kasus peramalan seperti peramalan pendaftaran murid baru (Song et al. 1993), peramalan tingkat kecelakaan mobil (Jilani et al. 2008), dan lain sebagainya. metode Average-Based Fuzzy Time Series (ABFTS) ini juga tidak melibatkan banyak variabel, sehingga membuat perhitungan menjadi lebih sederhana (Xihao et al. 2007).
1.2 Perumusan Masalah
Sebelumnya distributor telur sering melakukan kesalahan dalam memprediksi jumlah permintaan telur yang akan dipasarkan. Seringkali telur yang akan dipasarkan melebihi jumlah permintaan pasar. Maka dalam hal ini masalah yang dapat dirumuskan adalah : “Bagaimana memprediksi atau meramalkan jumlah permintaan telur agar sesuai dengan permintaan pasar ?”.
(16)
1.3 Batasan Masalah
Mengingat akan keterbatasan waktu penulisan dan kemampuan, penulis membatasi masalah yang akan dibahas pada skripsi ini. Batasan-batasan masalah yang akan dibahas di dalam skripsi ini antara lain:
a. Data yang akan digunakan merupakan data penjualan telur untuk tiga tahun terakhir pada suatu perusahaan yang bergerak pada bidang pendistribusian telur.
b. Data akan dikelompokkan per minggu dalam hitungan Papan (1 papan adalah 30 butir telur).
c. Sistem yang dibangun hanya menghasilkan peramalan atau prediksi jumlah telur yang akan dipasarkan untuk satu minggu ke depan untuk setiap periode penjualan.
1.4 Tujuan Penelitian
Adapun tujuan penelitian ini adalah untuk melakukan peramalan tentang jumlah permintaan telur yang dipasarkan di minggu yang akan datang oleh suatu perusahaan yang bergerak dalam bidang pendistribusian telur.
1.5 Manfaat Penelitian
Adapun manfaat dari penelitian ini adalah :
a. Mengetahui bagaimana cara mengimplementasikan metode Average-Based
Fuzzy Time Series (ABFTS) pada sistem komputer.
b. Mengetahui tingkat keakuratan metode Average-Based Fuzzy Time Series
(ABFTS) berdasarkan hasil perhitungan error peramalan pada data
(17)
1.6 Metodologi Penelitian
Tahapan yang akan dilakukan pada pelaksanaan penelitian ini adalah sebagai berikut:
a. Studi Literatur
Studi literatur yang dilakukan dalam penelitian ini adalah mengumpulkan bahan referensi mengenai peramalan dan metode average-based fuzzy time series dari berbagai buku, jurnal, artikel dan beberapa referensi lainnya.
b. Analisis Permasalahan
Pada tahap ini dilakukan analisis terhadap hasil studi literatur untuk mengetahui dan mendapatkan pemahaman mengenai metode average-based
fuzzy time series untuk menyelesaikan masalah peramalan permintaan pasar
terhadap suatu barang.
c. Perancangan Sistem
Pada tahap perancangan sistem dilakukan perancangan sistem, pengumpulan data, dan merancang antarmuka. Proses perancangan dilakukan berdasarkan hasil analisis studi literatur yang telah didapatkan.
d. Implementasi Sistem
Pada tahap implementasi sistem ini akan dilakukan pengkodean program dalam sistem komputer menggunakan bahasa pemrograman Visual Basic 2010 dan database SQL Server 2008.
e. Pengujian
Pada tahap ini akan dipastikan apakah sistem peramalan jumlah permintaan pasar pada distribusi telur yang telah dibuat sudah berjalan sesuai harapan.
f. Dokumentasi dan Penyusunan Laporan
Pada tahap ini dilakukan dokumentasi hasil analisis metode average-based
fuzzy time series untuk menyelesaikan masalah peramalan jumlah permintaan
(18)
1.7 Sistematika Penulisan
Sistematika pembahasan yang digunakan untuk menyelesaikan skripsi ini adalah sebagai berikut:
BAB I : PENDAHULUAN
Menjelaskan mengenai latar belakang, perumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, metodologi penelitian, dan sistematika penulisan.
BAB II : LANDASAN TEORI
Membahas beberapa teori penunjang yang berhubungan dengan pokok pembahasan dalam skripsi ini yang secara garis besar berisi tentang sistem peramalan dan metode average-based fuzzy time series.
BAB III : ANALISIS DAN PERANCANGAN SISTEM
Pada bab ini akan membahas analisis sistem, deskripsi sistem, desain sistem yang digunakan dalam pembuatan sistem peramalan jumlah permintaan pasar dalam usaha distribusi telur menggunakan metode average-based fuzzy time series.
BAB IV : IMPLEMENTASI DAN PENGUJIAN SISTEM
Pada bab ini akan dijelaskan mengenai implementasi dan pengujian sistem berdasarkan hasil rancangan yang telah dibuat sebelumnya.
BAB V : KESIMPULAN DAN SARAN
Bab ini memuat kesimpulan dari keseluruhan uraian bab-bab sebelumnya dan saran-saran yang diajukan untuk pengembangan program selanjutnya.
(19)
BAB 2
LANDASAN TEORI
Bab ini membahas teori penunjang yang berhubungan dengan penerapan metode
average-based fuzzy time series pada sistem peramalan jumlah penjualan distributor telur.
2.1 Peramalan
Peramalan (forecasting) merupakan kegiatan memprediksi nilai-nilai sebuah variabel berdasarkan nilai yang diketahui dari variabel tersebut atau variabel yang berhubungan. (Ai, 1999).
Menurut sifatnya, teknik peramalan terbagi menjadi dua jenis yaitu teknik kualitatif dan teknik kuantitatif. Teknik kualitatif merupakan teknik peramalan berdasarkan pendapat suatu pihak, dan data pada teknik kualitatif tidak dapat direpresentasikan secara tegas ke dalam suatu angka atau nilai. Teknik peramalan tersebut misalnya adalah judgment forecast. Sebaliknya, teknik peramalan kuantitatif merupakan teknik peramalan berdasarkan data masa lalu atau disebut data historis dan dapat dibuat dalam bentuk angka (Jumingan, 2009).
Teknik kuantitatif dikelompokkan dalam dua jenis (Ai, 1999) :
1. Model Time Series (Runtun Waktu)
Pada model ini peramalan masa mendatang dilakukan berdasarkan nilai data masa lalu atau disebut data historis. Tujuan metode ini adalah menemukan pola dalam deret data historis dan memanfaatkan pola deret tersebut untuk peramalan masa mendatang. Keuntungan dalam menggunakan model ini adalah peramalan dapat dilakukan secara lebih sederhana dibandingkan dengan model kausal.
(20)
2. Model Regresi (Kausal)
Model ini merupakan suatu model yang mengasumsikan faktor yang diramalkan menunjukkan suatu hubungan sebab akibat dalam satu atau lebih variabel bebas dan menggunakannya untuk meramalkan nilai mendatang dari suatu variabel tak bebas. Keuntungan dalam menggunakan model ini adalah dapat menghasilkan tingkat keberhasilan yang lebih besar dalam pengambilan keputusan yang bijaksana.
Dalam ekonometrika, data dapat dikelompokkan ke dalam tiga jenis menurut waktu pengumpulannya, yaitu data time series (runtun waktu), data cross section
(silang), dan data pooled (panel). Data tersebut tentunya sangat diperlukan dalam penelitian, maupun pengambilan keputusan. Pengumpulan data biasanya memerlukan waktu yang lama karena dapat melibatkan banyak aktivitas seperti mendatangi responden, menginput data, menyunting data, maupun menampilkannya dengan suatu alat analisis tertentu. Berikut akan dibahas beberapa jenis data berdasarkan waktu pengumpulannya (Winarno, 2007).
a. Data Time Series (Runtun Waktu)
Data Time series adalah data yang menggambarkan suatu objek dari waktu ke waktu atau periode secara historis dan terjadi berurutan. Sebagai contoh adalah data harga saham, data ekspor, data nilai tukar (kurs), data produksi, dan lain sebagainya (Winarno, 2007). Pola pergerakan data atau nilai variabel dapat diikuti dengan adanya data time series, sehingga data time series dapat digunakan sebagai dasar untuk (Anwary, 2011):
1. Pembuatan keputusan pada saat ini,
2. Peramalan keadaan perdagangan dan ekonomi pada masa yang akan datang,
3. Perencanaan kegiatan untuk masa depan.
Pada beberapa kasus, misalnya data time series produksi dunia komoditas kopi pada tahun sebelumnya akan mempengaruhi harga kopi dunia pada tahun berikutnya. Oleh karena itu diperlukan data selisih produksi kopi
(21)
dunia tiap periode agar tampak apakah produksi kopi pada tahun selanjutnya bertambah atau berkurang. Seperti dapat dilihat pada Tabel 2.1.
Tabel 2.1 Produksi dan Selisih Produksi Kopi Dunia Tahun 2000-2005
Tahun Produksi Kopi (Ton) Selisih
2000 7.562.713 -
2001 7.407.986 -154.727
2002 7.876.893 468.907
2003 7.179.592 -697.301
2004 7.582.293 402.701
2005 7.276.333 -305.960
b. Data Cross Section (Silang)
Data cross section (silang) terdiri dari beberapa objek data pada waktu tertentu. Misalnya pada suatu restoran terdiri dari data penjualan, data pembelian bahan baku, data jumlah karyawan, dan data relevan lainnya. Seperti dapat dilihat pada Tabel 2.2.
Tabel 2.2 Perbandingan antara Penjualan, Pembelian Bahan Baku, dan Jumlah
Karyawan Nama
Restoran
Penjualan Pembelian Bahan Baku
Jumlah Karyawan
A 19.587.200 10.300.100 20
B 23.854.000 16.200.869 15
C 17.211.000 13.300.357 17
c. Data Pooled (Panel)
Data pooled (panel) adalah data yang menggabungkan data time series (runtun
waktu) dan data cross section (silang). Oleh karena itu data pooled (panel) terdiri dari beberapa objek dan beberapa periode waktu. Seperti dapat dilihat pada Tabel 2.3.
(22)
Tabel 2.3 Data Pooled (Panel) Ekspor Impor Kopi Indonesia dan Malaysia Tahun 2005-2007
Nama Negara Periode Ekspor Impor
Indonesia 2005 443.366 1.654
Indonesia 2006 411.721 5.092
Indonesia 2007 320.600 47.937
Malaysia 2005 666 23.826
Malaysia 2006 1.490 35.368
Malaysia 2007 984 42.165
Adapun pola data pada data time series (runtun waktu) dikelompokkan menjadi empat jenis yaitu (Makridakis et al. 1992) :
1. Pola Horizontal (H) yaitu pola data yang terjadi jika data berfluktuasi di sekitar nilai rata-rata yang konstan. Suatu produk yang penjualannya tidak meningkat atau menurun selama waktu tertentu termasuk ke dalam jenis pola ini. Contoh pola data seperti ini dapat dilihat pada Gambar 2.1.
Gambar 2.1 DataPenjualan Beras per Bulan Tahun 2011 dengan Pola Horizontal (H)
(23)
Pada Gambar 2.1 dapat dilihat bahwa jumlah penjualan beras pada bulan pertama sampai dengan bulan ke-12 Tahun 2011 pada suatu unit usaha pengecer beras berfluktuasi pada nilai rata-rata yang sama yaitu lima karung. Pola data yang sama biasanya juga dapat dijumpai pada jenis barang yang bersifat kebutuhan pokok lainnya seperti minyak goreng, telur,gula dan lain sebagainya.
2. Pola Musiman (S) yaitu pola data yang terjadi jika deret data dipengaruhi faktor musiman (misalnya kuartal tahun tertentu, bulanan, atau hari-hari pada minggu tertentu). Penjualan produk misalnya seperti es krim, seragam sekolah, atau pemanas ruangan masuk ke dalam pola data ini. Contoh pola data seperti ini dapat dilihat pada Gambar 2.2.
Gambar 2.2 DataPenjualan Seragam Sekolah per Bulan Tahun 2011 dengan
Pola Musiman (S)
Pada Gambar 2.2 dapat dilihat bahwa jumlah penjualan seragam sekolah pada bulan pertama sampai dengan bulan ke-12 Tahun 2011 pada suatu toko penyedia seragam sekolah dipengaruhi oleh faktor musiman. Pada bulan pertama dan ketujuh dari setiap tahun adalah waktu dimulainya semester baru di sekolah sehingga kebutuhan dan permintaan seragam sekolah lebih meningkat dari bulan-bulan lainnya.
3. Pola Siklis (C) yaitu pola data yang terjadi jika data dipengaruhi fluktuasi ekonomi jangka panjang seperti yang berhubungan dengan siklus bisnis. Penjualan produk seperti mobil dan baja masuk ke dalam pola data ini. Contoh pola data seperti ini dapat dilihat pada Gambar 2.3.
(24)
Gambar 2.3 DataPenjualan Mobil per Bulan Tahun 2000-2008 pada PT. Jaya Mandiri dengan Pola Siklis (C)
Pada Gambar 2.3 dapat dilihat bahwa jumlah penjualan mobil pada PT. Jaya Mandiri dipengaruhi faktor ekonomi Indonesia tiap tahunnya. Tahun 2002 dan 2008 merupakan tahun dimana perekonomian masyarakat Indonesia lebih baik dari tahun-tahun lainnya, sehingga penjualan mobil yang merupakan kebutuhan tersier juga ikut meningkat.
4. Pola Data Trend (T) yaitu pola data yang terjadi jika terjadi kenaikan ataupun penurunan sekuler jangka panjang pada data. Contoh pola data seperti ini dapat dilihat pada Gambar 2.4.
(25)
Gambar 2.4 Data Produk Domestik Bruto per Kapita dengan Pola Trend(T)
Produk domestik bruto (Gross Domestic Product) merupakan jumlah produk berupa barang dan jasa yang dihasilkan oleh unit-unit produksi di dalam batas wilayah suatu negara (domestik) selama satu tahun. Pada Gambar 2.4 dapat dilihat bahwa jumlah penjualan produk domestik bruto Indonesia mengalami kenaikan jangka panjang pada Tahun 2000-2011.
2.2 Himpunan Fuzzy
Menurut Kusumadewi dan Purnomo (2004), himpunan fuzzy merupakan generalisasi dari himpunan klasik (crisp) yang memiliki elemen-elemen dengan derajat keanggotaan yang dibatasi dengan interval [0, 1].
Anggap Х merupakan suatu himpunan semesta yang memiliki elemen-elemen, dengan setiap elemen dinyatakan dengan x, sehingga Х = x. Himpunan fuzzyA dalam
Х dinyatakan dengan fungsi keanggotaan µA(x) yang menghubungkan setiap elemen
pada interval [0, 1], dengan nilai µA(x) pada x menyatakan derajat keanggotaan dari x
dalam A. Nilai derajat keanggotaan terbesar dari x dalam A adalah nilai µA(x) yang
paling mendekati nilai 1 (Hernasary, 2007). Himpunan fuzzy dinyatakan sebagai berikut :
(26)
2.2.1 Fungsi Keanggotaan
Fungsi Keanggotaan (Membership Function) dalam himpunan fuzzy adalah suatu kurva yang menunjukkan pemetaan elemen-elemen input data ke dalam nilai keanggotaannya (sering juga disebut derajat keanggotaan) yang memiliki interval 0 sampai 1 (Kusumadewi et al. 2004). Beberapa jenis fungsi yang biasa digunakan untuk mendapatkan nilai keanggotaan yaitu (Kusumadewi et al. 2004) :
1. Representasi Linier
Pada representasi linier, pemetaan input ke derajat keanggotaannya digambarkan sebagai suatu garis lurus. Ada dua jenis himpunan fuzzy yang linier, yaitu linier naik dan linier turun. Linier naik dimulai dari domain yang memilki derajat keanggotaan nol (0) lalu bergerak ke kanan menuju ke nilai domain yang memiliki derajat keanggotaan yang lebih tinggi.
Gambar 2.5 Grafik Fungsi Keanggotaan pada Representasi Linier Naik
Fungsi keanggotaan untuk representasi linier naik :
(27)
Linier turun merupakan kebalikan dari linier naik. Linier turun dimulai dari domain yang memilki derajat keanggotaan paling tinggi lalu bergerak ke kanan menuju ke nilai domain yang memiliki derajat keanggotaan yang lebih rendah.
Gambar 2.6 Grafik Fungsi Keanggotaan pada Representasi Linier Turun
Fungsi keanggotaan untuk representasi linier turun :
µ[x] =
(2.3)
2. Representasi Kurva Segitiga
Kurva segitiga pada dasarnya merupakan gabungan antara dua garis (linier).
(28)
Fungsi keanggotaan untuk representasi kurva segitiga :
µ[x] =
(2.4)
3. Representasi Kurva Trapesium
Kurva trapesium pada dasarnya seperti bentuk segitiga, hanya saja ada beberapa titik yang memiliki nilai keanggotaan 1.
Gambar 2.8 Grafik fungsi keanggotaan pada representasi kurva trapesium
Fungsi keanggotaan untuk representasi kurva trapesium :
µ[x] =
(2.5)
4. Representasi Kurva Bentuk Bahu
(29)
Gambar 2.9 Grafik Fungsi Keanggotaan pada Representasi Kurva Bentuk Bahu
Fungsi keanggotaan untuk representasi kurva bentuk bahu pada pembagian suhu temperatur :
Dingin :
µ[x] =
(2.6)
Sejuk :
µ[x] =
(2.7)
Normal :
(30)
Hangat :
µ[x] =
(2.9)
Panas :
µ[x] =
(2.10)
2.2.2. Notasi Fuzzy
Ketika himpunan semesta Хberbentuk diskrit,notasi yang digunakan untuk himpunan
fuzzyA adalah (Hernasary, 2007):
= (2.11)
atau
(2.12)
Ketika himpunan semesta Х berbentuk kontinu, notasi yang digunakan untuk himpunan fuzzyA adalah :
(2.13)
2.2.3 Operasi Himpunan Fuzzy
Jika dinyatakan terdapat dua himpunan fuzzy di dalam himpunan semesta yaitu A1 dan
(31)
himpunan operasi gabungan, irisan, dan complement dinyatakan untuk A1dan A2 pada himpunan semesta yaitu :
Gabungan :
µ
A1∪A2(x) = µ
A1(x) µ
A2(x)
(2.14) Irisan :µ
A1∩A2(x)= µ
A1(x) µ
A2(x)
(2.15)Complement :
µ A
= 1- µ A
(2.16)2.2.4 Nilai Linguistik
Nilai Linguistik adalah nilai dalam bentuk kata atau kalimat, nilai linguistik dari suatu variabel biasanya dibuat berdasarkan nilai numerik variabel tersebut. Sebagai contoh : “Young” adalah nilai linguistik dari variabel “Umur” yang dibuat berdasarkan nilai
numerik variabel tersebut yaitu “5 Tahun” (Hernasary, 2007).
2.3 Peramalan dengan Metode Fuzzy Time Series
Fuzzy time series adalah metode peramalan data yang menggunakan prinsip-prinsip
fuzzy sebagai dasarnya. Sistem peramalan dengan fuzzy time series menangkap pola data pada masa lalu kemudian digunakan untuk memproyeksikan data pada masa yang akan datang (Anwary, 2011).
Jika diasumsikan Y(t); (t = 1,2…,n), adalah himpunan bagian dari U yang menjadi himpunan semesta dimana himpunan fuzzy fi(t); (i=1,2,…,n), telah didefinisikan sebelumnya dan jadikan F(t) menjadi kumpulan fi(t); (i=1,2,…,n). Maka,
F(t) dinyatakan fuzzy time series terhadap Y(t); (t = 1,2…,n).
Dari defenisi tersebut, dapat dilihat bahwa F(t) bisa dianggap sebagai variabel yang mempunyai nilai linguistik dan fi(t); (i=1,2,…,n) bisa dianggap sebagai kemungkinan nilai linguistik dari F(t), dimana fi(t); (i=1,2,…,n) direpresentasikan oleh suatu himpunan fuzzy. Bisa dilihat juga bahwa F(t) adalah suatu fungsi waktu dari t
(32)
misalnya, nilai-nilai dari F(t) dapat berbeda bergantung bahwa kenyataan pada himpunan semesta, bisa berbeda pada waktu yang berbeda. Dan jika F(t) hanya disebabkan oleh F(t-1) maka hubungan ini digambarkan dengan F(t-1)→F(t). (Chen, 1996).
2.4 Penelitian Terdahulu
Model Peramalan time series secara statistik yang telah ada selama ini belum dapat secara efektif diterapkan untuk data historis dalam jumlah yang sedikit, maka metode
fuzzy time series dikembangkan. Song dan Chissom (1993) mengusulkan model time
invariant untuk fuzzy time series. Mereka melakukan proses fuzzifikasi dalam hal pendaftaran di Universitas Alabama pada tahun 1993. Mereka jadi orang pertama yang melakukan peramalan dengan fuzzy time series.
Adapun langkah-langkah metode fuzzy time series dengan model time
invariant yang dirumuskan oleh Song dan Chissom adalah (Huarng, 2000) :
1. Mendefenisikan himpunan semesta yang diasumsikan sebagai U dari variasi data historis yang ada.
2. Membagi himpunan semesta U menjadi sejumlah subhimpunan dengan panjang interval yang sama dengan jumlah subhimpuan yang ditentukan secara acak.
3. Mendefinisikan himpunan fuzzyAi.
4. Fuzzifikasi data historis yang ada.
5. Menyatakan Fuzzy Logical Relationship (FLR).
6. Menjadikan relasi fuzzy orde pertama menjadi satu Fuzzy Logical Relationship Group (FLRG) dan menghitung relasi Ri untuk setiap fuzzy ke-i.
7. Meramalkan output peramalannya dan melakukan defuzzifikasi. 8. Menghitung peramalan.
Pada Tahun 1996, Chen melakukan penelitian lanjutan dan merumuskan model Arithmetic Operation dengan langkah :
(33)
1. Mendefenisikan himpunan semesta yang diasumsikan sebagai U dari variasi data historis yang ada.
2. Membagi himpunan semesta U menjadi sejumlah subhimpunan dengan panjang interval yang sama dengan jumlah subhimpuan yang ditentukan secara acak.
3. Mendefinisikan himpunan fuzzyAi.
4. Fuzzifikasi data historis yang ada.
5. Menyatakan Fuzzy Logical Relationship (FLR).
6. Peramalan.
Selanjutnya Huarng (2000) melakukan penelitian lanjutan tentang apa yang telah diteliti Song dan Chissom pada data pendaftaran di Universitas Alabama. Dari penelitiannya, Huarng berhasil merumuskan model peramalan fuzzy time series baru
yaitu model Heuristic.
Adapun langkah-langkah metode fuzzy time series yang dirumuskan oleh Huarng adalah :
1. Mendefenisikan himpunan semesta yang diasumsikan sebagai U dari variasi data historis seperti yang dirumuskan oleh Song dan Chissom.
2. Membagi himpunan semesta U menjadi sejumlah subhimpunan dengan panjang interval yang sama dengan jumlah subhimpuan yang ditentukan secara acak.
3. Mendefinisikan himpunan fuzzy dengan persamaan
A1 = 1 / u1 + 0.5 / u2 + 0 / u3 + 0 / u4+…+ 0 / ui
A2 = 0.5 / u1 + 1 / u2 + 0.5 / u3 + 0 / u4+…+ 0 / ui
. . .
(34)
Dimana 0 atau 1 adalah derajat keanggotaan himpunan ui pada himpunan fuzzy
Ai,dan apabila derajat keanggotaan maksimum suatu data berada dalam
himpunan fuzzy Ai, maka nilai linguistik atau hasil fuzzifikasi data tersebut
adalah Ai (Haris, 2010).
4. Fuzzifikasi data historis yang ada.
5. Menetapkan Heuristic Fuzzy Logical Relationship Group. 6. Peramalan.
Adapun penelitian sebelumnya dirangkum pada Tabel 2.4 (Stevenson et al. 2009)
Tabel 2.4 Penelitian Fuzzy Time Series Terdahulu pada Peramalan Pendaftaran
Universitas Alabama
No. Peneliti Model Fuzzy Time Series yang digunakan
Tingkat Error
AFER
1. Song dan Chissom Time Invariant 4.3 %
2. Chen Arithmetic Operation 3.11%
3. Huarng Heuristic 1.5%
Adapun perbedaan metode fuzzy time series yang telah diteliti sebelumnya dengan metode average-based fuzzy time series yang akan diimplementasikan pada penelitian ini, terletak pada proses penentuan jumlah himpunan fuzzy yang akan digunakan. Pada penelitian ini jumlah himpunan fuzzy yang digunakan akan ditentukan menurut interval berbasis nilai rata-rata. Dan untuk peramalan, model yang diterapkan pada metode average-based fuzzy time series menerapkan model yang hampir sama dengan model yang diterapkan Chen pada Arithmetic Operation.
2.4 Peramalan dengan Metode Average-Based Fuzzy Time Series
Pada penelitian tentang peramalan dengan metode fuzzy time series sebelumnya disimpulkan bahwa semakin banyak himpunan fuzzy yang digunakan maka tingkat
(35)
fuzzy yang efektif belum ada, sehingga jumlah himpunan fuzzy ditentukan secara acak (Hernasary, 2007). Xihao dan Yimin (2007) melakukan penelitian untuk menentukan jumlah himpunan fuzzy yang efektif , yaitu dengan penentuan interval berbasis nilai rata-rata. Proses penentuan interval inilah yang diterapkan dalam metode
average-based fuzzy time series dan menjadi keunggulannya dibanding metode fuzzy time
series sebelumnya.
Adapun proses dalam metode average-based fuzzy time series dapat dilihat pada Gambar 2.10
Gambar 2.10 Proses dalam Metode Average-Based Fuzzy Time Series
2.4.1 Interval Berbasis Nilai Rata- rata ( Average-Based Lengths)
Interval berbasis nilai rata-rata berpengaruh dalam penentuan jumlah himpunan fuzzy
yang akan digunakan dalam proses peramalan dengan metode average-based fuzzy Menentukan himpunan semesta dari data historis lalu membaginya menjadi
beberapa subhimpunan sesuai interval berbasis nilai rata-rata.
.Mendefinisikan himpunan fuzzydengan persamaan (2.17)
Menentukan derajat keanggotaan tiap data dan merubah data ke dalam nilai linguistik
fuzzy
Menentukan Fuzzy Logical Relationship (FLR)
Menentukan Fuzzy Logical Relationship Group (FLRG)
(36)
time series, Adapun langkah-langkah untuk menentukan interval berbasis nilai rata-rata adalah (Xihao et al. 2007):
1. Kalkulasikan seluruh selisih absolute antara Dt+1 dan Dt (t=1,.., n). Dimana D
adalah data aktual dan t adalah periode. Lalu hitung nilai rata-ratanya. 2. Ambil setengah dari nilai rata-rata selisih absolute (langkah 1).
3. Sesuai nilai yang diperoleh (langkah 2) tetapkan basis nilai tesebut menurut Tabel 2.5.
Tabel 2.5 Pemetaan Basis Peramalan (Xihao et al. 2007).
Range Basis
0.1-1.0 0.1
1.1-10 1
11-100 10
101-1000 100
4. Bulatkan nilai yang diperoleh (langkah 2) sesuai dengan tabel pemetaan basis yang ada pada Tabel 2.5 untuk mendapatkan interval berbasis nilai rata-rata.
Sebagai contoh misalkan terdapat data time series penjualan telur dalam hitungan papan yaitu : 30, 50, 80, 120, 110, dan 70. Maka langkah-langkah untuk mendapatkan interval berbasis nilai rata-rata dari data time series tersebut adalah :
1. Selisih absolute tiap data adalah 20,30,40,10, dan 40 maka rata-ratanya adalah 28.
2. Ambil setengah dari nilai 28, maka diperoleh nilai 14. 3. Menurut Tabel 2.5 nilai 14 termasuk ke dalam basis 10.
4. Bulatkan 14 dengan basis 10, maka didapatkan interval berbasis nilai rata-rata yaitu 10.
(37)
2.4.2Fuzzy Logical Relationship (FLR)
Jika terdapat relasi R (t, t+1 ) sehingga Ai(t+1) = Ai(t) × R (t,t+1) dengan simbol ×
adalah suatu operator maka Ai(t+1) disebabkan oleh Ai(t). fuzzy logical relationship
(FLR) yang ada antara Ai(t+1) dan Ai(t) dinotasikan dengan (Xihao et al, 2007) :
Ai(t) → Ai(t+1) (2.18)
Dimana Ai(t)disebut sebagai “sisi kiri” dan Ai(t+1)disebut “sisi kanan”.
2.4.3 Fuzzy Logical Relationship Group (FLRG)
Fuzzy logical relationship group (FLRG) pada metode average based fuzzy time
series adalah proses mengeliminasi fuzzy logical relationship (FLR) yang berulang dan menggabungkan FLR dengan sisi kiri yang sama kedalam satu grup (Xihao et al. 2007)
Contoh :
Untuk sisi kiri Ai yang sama dan berulang, FLRG dinyatakan sebagai berikut :
Ai→ A(i+1)
Ai→ A(i+1) Ai→ A(i+1), A(i+2) (2.19)
A i→ A(i+2)
… … …
(38)
Pada peramalan dengan metode average-based fuzzy time series, peramalan ditentukan dari fuzzy logical relationship group (FLRG). Jika terdapat FLRG
Ai→ A(i+1), A(i+2)
Maka dapat ditentukan data aktual pada periode t fuzzified pada himpunan fuzzy Ai,
dan untuk peramalan pada periode t+1 diramalkan data akan fuzzified di sekitar himpunan fuzzy A(i+1) dan A(i+2) (Xihao et al. 2007).
Defuzzifikasi adalah cara untuk mendapatkan hasil nilai tegas (crisp) dari himpunan fuzzy (Hernasary, 2007). Proses defuzzifikasi pada metode average-based fuzzy time series diasumsikan (Xihao et al. 2007) :
u
i⊂
U ; (i =1,2,…,n) (2.20)u
i∈
Ai ; (i =1,2,…,n) (2.21)Dimana U adalah himpunan semesta, ui merupakan subhimpunan ke- i dari U dan Ai
adalah himpunan fuzzy dari ui., maka defuzzifikasi pada metode peramalan
average-based fuzzy time series adalah sebagai berikut (Xihao et al. 2007) :
1. Jika hasil fuzzifikasi data pada periode t adalah Aidan hanya ada satu fuzzy logical
relationship (FLR) dengan sisi kiri adalah Ai pada fuzzy logical relationship
group (FLRG) sebagaimana berikut :
Ai→ A(i+1)
Dimana Ai dan A(i+1) adalah himpunan fuzzy dan nilai maksimum derajat
keanggotaan fuzzy A(i+1) terdapat pada himpunan u(i+1), dan midpoint atau nilai
(39)
2. Jika hasil fuzzifikasi data pada periode t adalah Ai dan terdapat beberapa fuzzy
logical relationship (FLR) dengan sisi kiri adalah Ai pada fuzzy logical
relationship group (FLRG) sebagaimana berikut :
Ai→ A(i+1), A(i+2), A(i+3)
Dimana Ai, A(i+1), A(i+2), A(i+3) adalah himpunan fuzzy dan nilai maksimum
keanggotaan fuzzy A(i+1) terdapat pada himpunan u(i+1), nilai maksimum
keanggotaan fuzzy A(i+2) terdapat pada himpunan u(i+2), dan nilai maksimum
keanggotaan fuzzy A(i+3) terdapat pada himpunan u(i+3) dan midpoint atau nilai
tengah dari u(i+1), u(i+2), u(i+3) adalah m1,m2, dan m3 maka hasil peramalan untuk
periode t+1 adalah nilai rata-rata dari m1, m2, dan m3 atau (m1+m2+m3)/3.
3. Jika hasil fuzzifikasi pada periode t adalah Ai dan tidak terdapat logical
relationship (FLR) dengan sisi kiri adalah Ai pada fuzzy logical relationship
group (FLRG) dimana Ai nilai maksimum keanggotaan fuzzy-nya terdapat
pada himpunan ui dan midpoint atau nilai tengah dari ui adalah m, maka hasil
peramalan untuk periode t +1 adalah m.
Dari teori yang telah dibahas sebelumnya, sistem komputasi untuk peramalan
fuzzy time series dapat dilakukan secara lebih mudah dengan metode average-based
fuzzy time series, karena metode ini mempunyai model interval berbasis nilai rata-rata
yang secara terstruktur dapat menentukan jumlah himpunan fuzzy yang akan digunakan sistem, dibandingkan dengan fuzzy time series pada penelitian sebelumnya yang menentukan himpunan fuzzy secara acak dan tidak terstruktur yang menjadikan sistem komputasi menjadi agak rumit. Oleh karena itu pada Bab 3 tentang analisis dan perancangan sistem, penulis akan mengimplementasikan metode average-based fuzzy time series.
(40)
BAB 3
ANALISIS DAN PERANCANGAN SISTEM
Bab ini secara garis besar membahas analisis metode average-based fuzzy timeseries
pada sistem dan tahap-tahap yang akan dilakukan dalam perancangan sistem yang akan dibangun.
3.1 Identifikasi Masalah
Sebagai salah satu usaha yang berorientasi pada profit, distributor telur diharapkan dapat terus meningkatkan keuntungan, salah satunya dengan menyediakan telur sesuai dengan permintaan pasar, agar tidak terjadi kekurangan atau kelebihan telur yang dipasarkan. Menurut hasil survei pada salah satu distributor telur, sering terjadi masalah dalam penyediaan telur karena jumlah telur yang akan dipasarkan tidak sesuai dengan jumlah permintaan, sehingga hal ini sering menyebabkan kerugian. Jika jumlah telur yang disediakan melebihi permintaan, maka telur akan menumpuk di gudang dan akhirnya busuk. Untuk menghindari kerugian yang lebih besar distributor ini terpaksa menjual kepada distributor lain tetapi dengan harga pokok. Sebaliknya jika jumlah telur yang disediakan lebih sedikit dari permintaan pasar, maka distributor ini terpaksa mengambil dari distributor lain untuk mencukupinya, tentu saja dengan harga diatas standar sehingga keuntungan yang diperoleh berkurang. Hal ini tentu saja akan mengancam keberlangsungan usaha tersebut. Jadi, diperlukan suatu sistem otomasi yang dapat memprediksi atau meramalkan jumlah telur yang akan dipasarkan sesuai permintaan dengan suatu metode tertentu untuk periode mendatang.
(41)
3.2 Data yang Digunakan
Data yang digunakan dalam penelitian ini adalah data jumlah penjualan telur pada salah satu distributor telur di Kabupaten Deli Serdang dari Tahun 2009-2011. Data dikelompokkan per minggu agar peramalan dapat dilakukan sesering mungkin. Seluruh data berjumlah 155 data seperti yang dirangkum pada Tabel 3.1
Tabel 3.1 Rangkuman Data Penjualan Telur Tahun 2009-2011
No. Periode Jumlah (Papan)
1. 5 Januari 2009 322
2. 12 Januari 2009 331
3. 19 Januari 2009 383
4. 26 Januari 2009 341
5. 2 Februari 2009 352
6. 9 Februari 2009 390
7. 16 Februari 2009 361
8. 23 Februari 2009 300
9. 2 Maret 2009 342
. . . . . . . . .
70. 3 Mei 2010 350
71. 10 Mei 2010 362
72. 17 Mei 2010 310
. . . . . . . . .
150. 14 November 2011 384
151. 21 November 2011 352
152. 28 Desember 2011 333
153. 5 Desember 2011 322
154. 12 Desember 2011 383
(42)
Dari Tabel 3.1 diatas dapat ditentukan bahwa data penjualan telur dari Tahun 2009-2011 merupakan data time series berbentuk pola horizontal karena data tersebut disusun secara periodik yaitu per minggu dan beruntun serta berfluktuasi pada nilai rata-rata yang konstan yaitu antara 300 sampai dengan 390 papan. Untuk pola data pada Tabel 3.1 dapat dilihat pada Gambar 3.1
Gambar 3.1 Pola Horizontal Penjualan Telur Tahun 2009-2011
3.3 Analisis Sistem
Sistem Peramalan Jumlah Penjualan Distributor Telur terhadap Permintaan Pasar menggunakan Metode Average-Based Fuzzy Time Series merupakan suatu sistem yang dikhususkan untuk membantu penentuan jumlah penjualan telur satu minggu ke depan sesuai dengan permintaan pasar.
Sistem menerima masukan berupa data penjualan telur berbentuk time series
yang berisi jumlah telur yang terjual per minggu. Kemudian data tersebut diproses dengan metode average-based fuzzy time series untuk mendapatkan hasil peramalan satu minggu ke depan. Adapun gambaran algoritma metode average-based fuzzy time series dapat dilihat pada Gambar 3.2.
(43)
Mulai
Input data penjualan telur
Membagi himpunan data penjualan telur menjadi sejumlah bagian sesuai interval
berbasis nilai rata-rata.
Menentukan himpunan fuzzy
Menghitung derajat keanggotaan dan merubah data ke dalam nilai linguistik fuzzy
Defuzzifikasi hasil peramalan
Output berupa hasil peramalan dalam bilangan tegas (crisp)
Selesai
Menentukan Fuzzy Logical Relationship Group Menentukan Fuzzy Logical Relationship
Peramalan
(44)
Adapun cara kerja sistem peramalan yang akan dibangun, dirancang untuk beroperasi sebagai berikut :
1. Input data penjualan telur per minggu ke dalam ke dalam database SQL Server 2008.
2. Sistem yang dibangun akan menentukan himpunan semesta dari data penjualan telur yang telah diinput ke dalam database. Himpunan semesta dari data penjualan telur dapat diinisialkan dengan
U = (Dmin, Dmax) (3.1)
Dimana : Dmin = Data Penjualan Telur Minimal Dmax = Data Penjualan Telur Maksimal
3. Menentukan interval berbasis nilai rata-rata dengan langkah-langkah sebagai berikut :
a. Menjumlahkan seluruh selisih absolute antara Dt+1 dan Dt (t=1,.., n). Dimana D
adalah data penjualan telur dan t adalah periode. Lalu dihitung nilai rata-ratanya.
b. Menentukan setengah dari nilai rata-rata selisih absolute (langkah a).
c. Sesuai nilai yang diperoleh (langkah b) ditetapkan basis nilai tesebut menurut pemetaan basis peramalan pada Tabel 2.5.
d. Membulatkan nilai yang diperoleh (langkah b) sesuai dengan tabel pemetaan basis yang ada pada Tabel 2.5. Hasil pembulatan tersebut merupakan interval berbasis nilai rata-rata.
4. Membagi himpunan semesta U pada persamaan (3.1) menjadi subhimpunan ui
sesuai interval berbasis rata-rata. Dimana ui adalah subhimpunan ke-i dari
(45)
Ada dua cara untuk membagi himpunan semesta U menjadi subhimpunan ui,
yang pertama dengan menjadikan interval berbasis nilai rata-rata sebagai pembaginya, dan yang kedua dengan menjadikan interval berbasis nilai rata-rata sebagai range bagi setiap subhimpunan ui.
1. Pembagian himpunan semesta U menjadi subhimpunan ui dengan menjadikan
interval rata-rata sebagai pembaginya (Haris, 2010):
a.Tetapkan U = (Dmin, Dmax)
Dimana Dmin = Data Penjualan Minimal Dmax = Data Penjualan Maksimal Contoh : U = (300,390)
b. Tetapkan n = Banyak subhimpunan u yang akan digunakan.
n =
(3.2)
Contoh : n =
n = 9
Jadi, ditetapkan himpunan semesta U dapat dibagi sebanyak 9 subhimpunan
ui, yang diketahui dari nilai n.
c. Tetapkan ui sebagai subhimpunan dari himpunan semesta U yang ke-i;
(i = 1,2,…,n), dimana :
ui = (Dmin, D)
.
. (3.3)
. un = (D, Dmax)
D adalah data penjualan ditambah range yang disesuaikan dimulai dari Dmin.
(46)
u2 = (310,320)
u3 = (320,330)
u4 = (330,340)
u5 = (340,350)
u6 = (350,360)
u7 = (360,370)
u8 = (370,380)
u9 = (380,390)
2. Pembagian himpunan semesta U menjadi subhimpunan ui dengan menjadikan
interval berbasis nilai rata-rata sebagai range bagi setiap subhimpunan ui (Xihao
et al. 2007):
a. Tetapkan U = (Dmin, Dmax)
Dimana Dmin = Data Penjualan Minimal; Dmax = Data Penjualan Maksimal; Contoh : U = (300,390).
b. Tetapkan ui sebagai subhimpunan dari himpunan semesta U yang ke-i;
(i = 1,2,…,n), Dimana
ui = (3.4)
r merupakan interval berbasis nilai rata-rata yang telah ditentukan sebelumnya,dan tidak lebih besar dari .
Contoh : Untuk interval berbasis rata-rata bernilai 10
u1 =
= (300,310) u2 =
= (310,320) u3 =
(47)
u4 =
= (330,340) u5 =
= (340,350) u6 =
= (350,360) u7=
= (360,370) u8=
= (370,380) u9=
= (380,390)
Menurut hasil penelitian, persamaan (3.4) akan menjadikan proses komputasi lebih sederhana dari persamaan (3.3), maka sistem peramalan yang akan dibangun akan menggunakan persamaan (3.4) untuk mempermudah proses komputasi dalam penentuan jumlah subhimpunan ui.
5. Mendefinisikan himpunan fuzzy sesuai persamaan (2.17) dan merubah data kedalam nilai linguistik fuzzy. Dari data penjualan telur Tahun 2009-2011 yang dimiliki, variabel jumlah penjualan telur dibagi kedalam 5 interval yaitu :
1. u1 untuk jumlah penjualan telur < 320 papan.
2. u2 untuk 320 papan ≤ jumlah penjualan telur < 340 papan.
3. u3 untuk 340 papan ≤ jumlah penjualan telur < 360 papan.
4. u4 untuk 360 papan ≤ jumlah penjualan telur < 380 papan.
5. u5untuk jumlah penjualan telur ≥ 380 papan.
Dari variabel jumlah penjualan telur diatas dibuat himpunan fuzzy berdasarkan persamaan 2.17
A1(Sangat Menurun) = 1 / u1 + 0.5 / u2 + 0 / u3 + 0 / u4+ 0 / u5.
A2(Menurun) = 0.5 / u1 + 1 / u2 + 0.5 / u3 + 0 / u4+ 0 / u5.
(48)
A4(Meningkat) = 0 / u1 + 0 / u2 + 0.5 / u3 + 1 / u4+ 0.5 / u5.
A5 (Sangat Meningkat) = 0 / u1 + 0 / u2 + 0 / u3 + 0.5 / u4+ 1 / u5.
Dengan ui ⊂ Udiberi simbol ”/” untuk menyatakan derajat keanggotaan ui (i= 1…5)
terhadap Ai (i= 1… 5). Untuk himpunan fuzzy sesuai dengan persamaan (2.17) dapat dilihat pada Gambar 3.3
Gambar 3.3 Himpunan Fuzzy untuk Data Penjualan Telur
Jika data penjualan telur pada periode t adalah D(t), dan D(t)
∈
ui dan jika nilai yangdinyatakan oleh himpunan fuzzy Ai dengan nilai keanggotaan maksimum jatuh pada
ui, maka D(t) dinyatakan fuzzified pada Ai. (Hernasary, 2007).
6. Menentukan Fuzzy Logical Relationship (FLR) untuk setiap data dengan persamaan (2.18).
7. Menentukan Fuzzy Logical Relationship Group (FLRG) dan peramalan dengan persamaan (2.19).
8. Defuzzifikasi untuk mendapatkan hasil peramalan.dengan metode average-based
dengan ketentuan sebagai berikut (Xihao et al.2007): 0
0.5 1
300 320 340 360 380 400
De
ra
ja
t
Ke
an
ggot
aa
n
Data Penjualan Telur
A1 (Sangat Menurun) A2 (Menurun) A3 (Sedang) A4 (Meningkat) A5 (Sangat Meningkat)
(49)
a. Misalkan,hasil fuzzifikasi data pada periode t adalah Ai dan hanya ada satu
fuzzy logical relationship (FLR) dengan sisi kiri adalah Ai sebagaimana
berikut :
Ai→ A(i+1)
Dimana Ai dan A(i+1) adalah himpunan fuzzy dan nilai maksimum
derajat keanggotaan fuzzy A(i+1) terdapat pada himpunan u(i+1), dan midpoint
atau nilai tengah dari u(i+1) adalah m1, maka hasil peramalan untuk periode
t +1 adalah m1.
Contoh :
A1→ A2
Dimana A1 dan A2 adalah himpunan fuzzy dan nilai maksimum derajat keanggotaan fuzzy A2 terdapat pada himpunan u2, dan midpoint atau nilai tengah dari u2adalah 307, maka hasil peramalan untuk periode t +1 adalah 307.
b. Misalkan, hasil fuzzifikasi data pada periode t adalah Ai dan terdapat beberapa
fuzzylogical relationship (FLR) dengan sisi kiri adalah Ai sebagaimana berikut
:
Ai→ A(i+1), A(i+2), A(i+3)
Dimana Ai, A(i+1), A(i+2), A(i+3) adalah himpunan fuzzy dan nilai
maksimum keanggotaan fuzzy A(i+1) terdapat pada himpunan u(i+1), nilai
maksimum keanggotaan fuzzy A(i+2) terdapat pada himpunan u(i+2), dan nilai
maksimum keanggotaan fuzzy A(i+3) terdapat pada himpunan u(i+3) dan
midpoint atau nilai tengah dari u(i+1), u(i+2), u(i+3) adalah m1,m2, dan m3 maka
hasil peramalan untuk periode t + 1 adalah nilai rata-rata dari m1, m2, dan m3
atau (m1+m2+m3)/3.
Contoh :
(50)
Dimana A1, A2, A3, A4 adalah himpunan fuzzy dan nilai maksimum keanggotaan fuzzy A2 terdapat pada himpunan u2, nilai maksimum
keanggotaan fuzzy A3 terdapat pada himpunan u3, dan nilai maksimum
keanggotaan fuzzy A4 terdapat pada himpunan u4 dan midpoint atau nilai
tengah dari u2, u3, u4 adalah 307, 321, dan 335 maka hasil peramalan untuk
periode t+1 adalah nilai rata-rata dari 307, 321, dan 335 atau (307+321+335)/3, yaitu 321.
c. Jika hasil fuzzifikasi data pada periode t adalah Ai dan tidak terdapat fuzzy
logical relationship (FLR) dengan posisi kiri adalah Ai, dimana Ai nilai
maksimum keanggotaan fuzzy-nya terdapat pada himpunan ui dan midpoint
atau nilai tengah dari ui adalah m, maka hasil peramalan untuk periode t +1
adalah m.
Contoh :
A1→
-A1 nilai maksimum keanggotaan fuzzy-nya terdapat pada himpunan u1 dan
midpoint atau nilai tengah dari u1 adalah 305, maka hasil peramalan untuk
periode t +1 adalah 305.
Algoritma average-based fuzzy time series dapat dijelaskan oleh pseudocode berikut :
average_based_fuzzy_time_series {
Dmin ← min(D)
Dmax ← max(D) ave ← 0 n ← D.size
for i=0 to n-2 do
ave = ave + D[i][0] – D[i+1][0]
ave = abs(ave) end for
ave = ave / (2n)
interval = nearest10(ave)
c ← 0
for i=Dmin to Dmax step interval do u[c][0]=i
(51)
u[c][1] = i+interval c = c+1
end for
for i=0 to D.size do idx=0
while (D[i][0] > u[idx][1]) and idx<u.size idx++
A[i]=idx end for
for i=0 to D.size do
flrg[A[i]].add(A[i+1]) end for
for i=0 to D.size do FuzzyResult = 0
if (flrg[A[i]].count<1) Then
FuzzyResult = average(u[A[i]][0], u[A[i]][1]) else
for j=0 to flrg[A[i]].size do
FuzzyResult = FuzzyResult + average(u[A[i]][0],
u[A[i]][1]) end for
FuzzyResult = FuzzyResult / flrg[A[i]].size Result[i] = FuzzyResult
end if end for }
3.4 Perancangan Sistem
Pada tahap perancangan sistem akan dilakukan perancangan bagaimana data penjualan telur diproses di dalam sistem dan dilakukan juga perancangan tentang antarmuka sistem yang akan dibangun.
3.4.1 Diagram Aliran Data
Diagram Aliran Data / Data Flow Diagram (DFD) adalah alat yang biasa dipakai untuk mendokumentasi proses dalam sistem atau sebuah teknis grafis yang menggambarkan aliran informasi dan transformasi yang diaplikasikan pada saat data bergerak dari input menjadi output (Simorangkir, 2012). Gambar 3.4 menggambarkan diagram aliran data dari sistem yang akan dibuat.
(52)
Pengguna
Sistem Peramalan Penjualan Telur dengan
Metode ABFTS
Data Penjualan Telur
Hasil Peramalan Penjualan Telur
Gambar 3.4 Diagram Konteks DFD
Penjelasan proses diagram konteks sistem peramalan penjualan telur dengan metode ABFTS adalah sebagai berikut :
a. Proses
Nama Proses : Sistem Peramalan Penjualan Telur dengan Metode ABFTS Keterangan : Proses untuk melakukan peramalan jumlah penjualan telur
satu minggu ke depan dengan metode ABFTS.
b. Arus Data
Masukan : - Data penjualan telur berupa periode penjualan dan jumlah penjualan.
Keluaran : - Data penjualan telur beserta hasil peramalan untuk satu minggu ke depan
Proses pada diagram konteks diatas dapat dipecah lagi menjadi proses-proses yang lebih kecil dan lengkap dalam DFD Level 1. Diagram untuk DFD level 1dapat dilihat pada Gambar 3.5.
(53)
Gambar 3.5 DFD Level 1
Penjelasan proses DFD Level 1 sistem peramalan penjualan telur dengan metode ABFTS adalah sebagai berikut :
a. Proses 1.0
Nama Proses : Login.
Masukan : username dan password. Keluaran : Pemberitahuan error login. Keterangan : Proses untuk masuk ke sistem.
b. Proses 2.0
Nama Proses : Olah Data Penjualan.
Masukan : Periode penjualan telur beserta jumlah penjualan pada masing- masing periode.
Keluaran : Detail data penjualan telur.
Keterangan : Proses untuk mengolah data penjualan.
c. Proses 3.0
Nama Proses : Peramalan
(54)
pengguna.
Keluaran : Detail data penjualan telur beserta hasil peramalan satu minggu ke depan.
Proses 2.0 pada DFD Level 1 dapat dipecah lagi menjadi proses-proses yang lebih jelas yang dapat dilihat pada Gambar 3.6.
2.1 Tambah Data
Penjualan
2.2 Ubah Data
Penjualan
2.3 Hapus Data
Penjualan
Data Penjualan Pengguna
Input Data Penjualan Baru
Ubah Data Penjualan
Detail Data Penjualan
Hapus Data Penjualan
Detail data penjualan Detail Data Penjualan
Gambar 3.6 DFD Level 1 Proses 2.0
Penjelasan DFD Level 1 Proses 2.0 sistem peramalan penjualan telur dengan metode ABFTS adalah sebagai berikut :
a. Proses 2.1
Nama Proses : Tambah Data Penjualan. Masukan : Data penjualan baru. Keluaran : Detail data penjualan telur.
Keterangan : Proses untuk memasukkan data penjualan telur yang baru.
b. Proses 2.2
Nama Proses : Ubah Data Penjualan.
Masukan : Data baru untuk menggantikan data yang lama. Keluaran : Detail data penjulan telur.
(55)
c. Proses 2.3
Nama Proses : Hapus Data Penjualan.
Masukan : Data penjualan telur yang akan dihapus. Keluaran : Detail data penjualan telur.
Keterangan : Proses untuk menhapus data penjualan telur.
Proses 3.0 pada DFD Level 1 dapat dipecah lagi menjadi proses-proses yang lebih jelas yang dapat dilihat pada Gambar 3.7.
(56)
Gambar 3.7 DFD Level 1 Proses 3.0
Penjelasan DFD Level 1 Proses 3.0 sistem peramalan penjualan telur dengan metode ABFTS adalah sebagai berikut :
a. Proses 3.1
Nama Proses : Mengambil Data Penjualan dari Database.
Masukan : Range periode yang ditentukan pengguna. Keluaran : Detail data penjualan telur.
(57)
b. Proses 3.2
Nama Proses : Penentuan Himpunan Semesta Data Penjualan . Masukan : Data penjualan yang diinginkan pengguna. Keluaran : Himpunan semesta data penjualan.
Keterangan : Proses untuk menentukan himpunan semesta dari data penjualan.
c. Proses 3.3
Nama Proses : Penentuan Interval Berbasis Nilai Rata-rata. Masukan : Himpunan semesta data penjualan.
Keluaran : Interval berbasis nilai rata-rata.
Keterangan : Proses untuk menentukan interval berbasis nilai rata-rata.
d. Proses 3.4
Nama Proses : Pembagian Himpunan Semesta sesuai Interval berbasis nilai rata- rata.
Masukan : interval berbasis nilai rata- rata.
Keluaran : Beberapa subhimpunan dari himpunan semesta data penjualan.
Keterangan : Proses untuk membagi himpunan semesta menjadi beberapa subhimpunan.
e. Proses 3.5
Nama Proses : Perhitungan Derajat Keanggotaan Data Penjualan pada Himpunan Fuzzy.
Masukan : Subhimpunan dari himpunan semesta data penjualan. Keluaran : Nilai linguistik fuzzy.
Keterangan : Proses untuk menentukan derajat keanggotaan data penjualan pada himpunan fuzzy dan merubah data ke dalam nilai
linguistik fuzzy.
(58)
f. Proses 3.6
Nama Proses : Fuzzy Logical Relationship (FLR). Masukan : Nilai linguistik data penjualan.
Keluaran : Fuzzy logical relationship group (FLRG).
Keterangan : Proses untuk menentukan hubungan antar data dan melakukan peramalan penjualan.
g. Proses 3.7
Nama Proses : Defuzzifikasi.
Masukan : Fuzzy Logical Relationship Group (FLRG).
Keluaran : Hasil peramalan berbentuk bilangan tegas atau crisp.
Keterangan : Proses untuk mengubah peramalan secara FLRG ke dalam bilangan tegas atau crisp.
3.4.2 Kamus Data
Kamus data adalah suatu daftar data elemen yang terorganisir dengan defenisi yang tetap dan sesuai dengan sistem sehingga pengguna dan analis sistem mempunyai pengertian yang sama tentang input, output dan komponen data store (Simorangkir, 2011). Kamus data ini berguna pada tahapan implementasi sistem.
Tabel 3.2. Kamus Data User ID
No. Field Tipe Data Panjang Keterangan
1. Kode Varchar 255 Kode pengguna sebagai
primary key
2. Username Varchar 255 Nama Pengguna
(59)
Tabel 3.3. Kamus Data Penjualan
No. Field Tipe Data Panjang Keterangan
1. Kode Varchar 255 Kode penjualan sebagai
primary key
2. Tanggal Date - Periode penjualan
3. Jumlah Int - Jumlah Penjualan
3.4.3 Perancangan Menu Sistem
Gambar 3.8 Struktur Menu Sistem
3.4.4 Perancangan Antarmuka
1. Rancangan Halaman Login
x Username
Password
Ok Cancel
(60)
Halaman ini digunakan untuk masuk ke menu utama sistem. Pengguna diminta untuk mengisi Username dan Password.
2. Rancangan Halaman Utama
Halaman Utama - x
Sistem || Olah Data Penjualan || Peramalan
Pengguna
a Logout b
c
KeluarSISTEM PERAMALAN PENJUALAN TELUR DENGAN METODE ABFTS
Gambar 3.10 Rancangan Halaman Utama
Keterangan :
Pada Halaman Utama terdapat tiga menu pilihan :
a. Menu Sistem yang memungkinkan user untuk pergi ke halaman pengguna, logout
dari halaman utama atau keluar dari sistem.
b. Menu Olah Data Penjualan yang memungkinkan user untuk pergi ke halaman olah data penjualan.
(61)
3. Rancangan Halaman Pengguna
Form Pengguna - x Utama
Kode Penggguna
Username Simpan a
Password Ubah Batal
Konfirmasi Password Hapus
b
Filter
Kode Pengguna Username Cari
c
Gambar 3.11 Rancangan Halaman Pengguna
Keterangan :
a. User dapat memasukkan data pengguna baru berupa username dan password untuk
disimpan pada database.
b. User dapat mencari data pengguna yang telah disimpan sebelumnya di dalam
database untuk diubah atau dihapus dari database.
c. Menampilkan seluruh data pengguna yang tersimpan di dalam database, atau hanya data pengguna yang dicari oleh user.
(1)
MsgBox("Pilih bulan dan tahun") Else
If deconvMonth(BulanCombo.Text) = 1 Or deconvMonth(BulanCombo.Text) = 2 Then
cond = " WHERE tanggal LIKE '%" & TahunCombo.Text & "%-0" & deconvMonth(BulanCombo.Text) & "-%'"
Else
cond = " WHERE tanggal LIKE '%" & TahunCombo.Text & "%-%" & deconvMonth(BulanCombo.Text) & "%-%'"
End If proses() End If End Sub
Private Sub TahunCombo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TahunCombo.SelectedIndexChanged
IsiBulan(TahunCombo.Text) End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Button4.Enabled = True Button3.Enabled = True
cond = "WHERE tanggal BETWEEN '" & Format(Tanggal1DP.Value, "yyyy-MM-dd") & "' AND '" & Format(Tanggal2DP.Value, "yyyy-MM-"yyyy-MM-dd") & "'"
proses() End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
FormGrafik.Show() End Sub
'Print data grid
Private oStringFormat As StringFormat
Private oStringFormatComboBox As StringFormat Private oButton As Button
Private oCheckbox As CheckBox Private oComboBox As ComboBox Private nTotalWidth As Int16 Private nRowPos As Int16 Private NewPage As Boolean Private nPageNo As Int16 Private Header As String
Private sUserName As String = FormUtama.LabelPengguna.Text
Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint oStringFormat = New StringFormat
oStringFormat.Alignment = StringAlignment.Near oStringFormat.LineAlignment = StringAlignment.Center oStringFormat.Trimming = StringTrimming.EllipsisCharacter oStringFormatComboBox = New StringFormat
oStringFormatComboBox.LineAlignment = StringAlignment.Center oStringFormatComboBox.FormatFlags = StringFormatFlags.NoWrap oStringFormatComboBox.Trimming = StringTrimming.EllipsisCharacter
(2)
oButton = New Button oCheckbox = New CheckBox oComboBox = New ComboBox nTotalWidth = 0
For Each oColumn As DataGridViewColumn In DataGridView1.Columns nTotalWidth += oColumn.Width
Next
nPageNo = 1 NewPage = True nRowPos = 0 End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Static oColumnLefts As New ArrayList
Static oColumnWidths As New ArrayList Static oColumnTypes As New ArrayList Static nHeight As Int16
Dim nWidth, i, nRowsPerPage As Int16 Dim nTop As Int16 = e.MarginBounds.Top Dim nLeft As Int16 = e.MarginBounds.Left If nPageNo = 1 Then
For Each oColumn As DataGridViewColumn In DataGridView1.Columns nWidth = CType(Math.Floor(oColumn.Width / nTotalWidth * nTotalWidth * (e.MarginBounds.Width / nTotalWidth)), Int16)
nHeight = e.Graphics.MeasureString(oColumn.HeaderText, oColumn.InheritedStyle.Font, nWidth).Height + 11
oColumnLefts.Add(nLeft) oColumnWidths.Add(nWidth)
oColumnTypes.add(oColumn.GetType) nLeft += nWidth
Next End If
Do While nRowPos < DataGridView1.Rows.Count
Dim oRow As DataGridViewRow = DataGridView1.Rows(nRowPos) If nTop + nHeight >= e.MarginBounds.Height + e.MarginBounds.Top Then
DrawFooter(e, nRowsPerPage) NewPage = True
nPageNo += 1
e.HasMorePages = True Exit Sub
Else
If NewPage Then ' Draw Header
e.Graphics.DrawString(Header, New Font(DataGridView1.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top - e.Graphics.MeasureString(Header, New Font(DataGridView1.Font, FontStyle.Bold), e.MarginBounds.Width).Height - 13)
' Draw Columns
nTop = e.MarginBounds.Top i = 0
For Each oColumn As DataGridViewColumn In DataGridView1.Columns
e.Graphics.FillRectangle(New
SolidBrush(Drawing.Color.LightGray), New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))
e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight)) e.Graphics.DrawString(oColumn.HeaderText,
(3)
New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat)
i += 1 Next
NewPage = False End If
nTop += nHeight i = 0
For Each oCell As DataGridViewCell In oRow.Cells
If oColumnTypes(i) Is GetType(DataGridViewTextBoxColumn) OrElse oColumnTypes(i) Is GetType(DataGridViewLinkColumn) Then
e.Graphics.DrawString(oCell.Value.ToString,
oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat) ElseIf oColumnTypes(i) Is GetType(DataGridViewButtonColumn) Then
oButton.Text = oCell.Value.ToString
oButton.Size = New Size(oColumnWidths(i), nHeight) Dim oBitmap As New Bitmap(oButton.Width,
oButton.Height)
oButton.DrawToBitmap(oBitmap, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))
e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))
ElseIf oColumnTypes(i) Is GetType(DataGridViewCheckBoxColumn) Then
oCheckbox.Size = New Size(14, 14)
oCheckbox.Checked = CType(oCell.Value, Boolean) Dim oBitmap As New Bitmap(oColumnWidths(i), nHeight) Dim oTempGraphics As Graphics =
Graphics.FromImage(oBitmap)
oTempGraphics.FillRectangle(Brushes.White, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))
oCheckbox.DrawToBitmap(oBitmap, New Rectangle(CType((oBitmap.Width - oCheckbox.Width) / 2, Int32),
CType((oBitmap.Height - oCheckbox.Height) / 2, Int32), oCheckbox.Width, oCheckbox.Height))
e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))
ElseIf oColumnTypes(i) Is GetType(DataGridViewComboBoxColumn) Then
oComboBox.Size = New Size(oColumnWidths(i), nHeight) Dim oBitmap As New Bitmap(oComboBox.Width,
oComboBox.Height)
oComboBox.DrawToBitmap(oBitmap, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))
e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))
e.Graphics.DrawString(oCell.Value.ToString,
oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i) + 1, nTop, oColumnWidths(i) - 16, nHeight),
oStringFormatComboBox)
ElseIf oColumnTypes(i) Is GetType(DataGridViewImageColumn) Then
Dim oCellSize As Rectangle = New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight)
Dim oImageSize As Size = CType(oCell.Value, Image).Size e.Graphics.DrawImage(oCell.Value, New
Rectangle(oColumnLefts(i) + CType(((oCellSize.Width - oImageSize.Width) / 2), Int32), nTop + CType(((oCellSize.Height - oImageSize.Height) / 2), Int32), CType(oCell.Value, Image).Width, CType(oCell.Value, Image).Height))
(4)
End If
e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight)) i += 1
Next End If nRowPos += 1 nRowsPerPage += 1 Loop
DrawFooter(e, nRowsPerPage) e.HasMorePages = False End Sub
Private Sub DrawFooter(ByVal e As
System.Drawing.Printing.PrintPageEventArgs, ByVal RowsPerPage As Int32) Dim sPageNo As String = nPageNo.ToString + " of " +
Math.Ceiling(DataGridView1.Rows.Count / RowsPerPage).ToString ' Right Align - User Name
e.Graphics.DrawString(sUserName, DataGridView1.Font, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - e.Graphics.MeasureString(sPageNo, DataGridView1.Font, e.MarginBounds.Width).Width), e.MarginBounds.Top +
e.MarginBounds.Height + 7) ' Left Align - Date/Time
e.Graphics.DrawString(Now.ToLongDateString + " " +
Now.ToShortTimeString, DataGridView1.Font, Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top + e.MarginBounds.Height + 7)
' Center - Page No. Info
e.Graphics.DrawString(sPageNo, DataGridView1.Font, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - e.Graphics.MeasureString(sPageNo, DataGridView1.Font, e.MarginBounds.Width).Width) / 2, e.MarginBounds.Top + e.MarginBounds.Height + 31)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If RadioButton1.Checked Then
Header = "Data penjualan dan peramalan pada bulan " & BulanCombo.Text & " tahun " & TahunCombo.Text
Else
Header = "Data penjualan dan peramalan " & Tanggal1DP.Text & " - " & Tanggal2DP.Text
End If
Dim dlg As New PrintPreviewDialog() dlg.Width = 600
dlg.Height = 700
dlg.Document = PrintDocument1 dlg.ShowDialog()
End Sub End Class
5.
Halaman Grafik
Public Class FormGrafik
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
(5)
dt.Columns.Add("tanggal") dt.Columns.Add("jumlah") dt.Columns.Add("peramalan")
For i = 0 To FormPeramalan.DataGridView1.Rows.Count - 1 Dim dr As DataRow = dt.NewRow
dr("tanggal") =
Format(FormPeramalan.DataGridView1.Rows(i).Cells(1).Value, "yyyy-MM-dd") dr("jumlah") =
Math.Round(FormPeramalan.DataGridView1.Rows(i).Cells(2).Value) dr("peramalan") =
Math.Round(FormPeramalan.DataGridView1.Rows(i).Cells(3).Value) dt.Rows.Add(dr)
Next
Chart1.DataSource = dt
Chart1.Series(0).Name = "Hasil sebenarnya" Chart1.Series.Add("Prediksi")
Chart1.Series(0).IsValueShownAsLabel = True Chart1.Series(1).IsValueShownAsLabel = True Chart1.Series(0).XValueMember = "tanggal" Chart1.Series(1).XValueMember = "tanggal" Chart1.Series(0).YValueMembers = "jumlah" Chart1.Series(1).YValueMembers = "peramalan" Chart1.DataBind()
End Sub
'Print data grid
Private oStringFormat As StringFormat
Private oStringFormatComboBox As StringFormat Private oButton As Button
Private oCheckbox As CheckBox Private oComboBox As ComboBox Private nTotalWidth As Int16 Private nRowPos As Int16 Private NewPage As Boolean Private nPageNo As Int16 Private Header As String
Private sUserName As String = FormUtama.LabelPengguna.Text
Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint oStringFormat = New StringFormat
oStringFormat.Alignment = StringAlignment.Near oStringFormat.LineAlignment = StringAlignment.Center oStringFormat.Trimming = StringTrimming.EllipsisCharacter oStringFormatComboBox = New StringFormat
oStringFormatComboBox.LineAlignment = StringAlignment.Center oStringFormatComboBox.FormatFlags = StringFormatFlags.NoWrap oStringFormatComboBox.Trimming = StringTrimming.EllipsisCharacter oButton = New Button
oCheckbox = New CheckBox oComboBox = New ComboBox nTotalWidth = 0
For Each oColumn As DataGridViewColumn In FormPeramalan.DataGridView1.Columns
nTotalWidth += oColumn.Width Next
nPageNo = 1 NewPage = True nRowPos = 0
(6)
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim myImage As New Bitmap(780, 500)
Dim myRectangle As New Drawing.Rectangle(0, 0, 780, 500) Chart1.DrawToBitmap(myImage, myRectangle)
e.Graphics.DrawImage(myImage, 0, 150) e.Graphics.DrawString(Header, New
Font(FormPeramalan.DataGridView1.Font, FontStyle.Bold), Brushes.Black,
e.MarginBounds.Left, e.MarginBounds.Top - e.Graphics.MeasureString(Header, New Font(FormPeramalan.DataGridView1.Font, FontStyle.Bold),
e.MarginBounds.Width).Height - 13) DrawFooter(e, nRowPos) myImage.Dispose() End Sub
Private Sub DrawFooter(ByVal e As
System.Drawing.Printing.PrintPageEventArgs, ByVal RowsPerPage As Int32) Dim sPageNo As String = nPageNo.ToString + " of 1"
' Right Align - User Name
e.Graphics.DrawString(sUserName, FormPeramalan.DataGridView1.Font, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width -
e.Graphics.MeasureString(sPageNo, FormPeramalan.DataGridView1.Font,
e.MarginBounds.Width).Width), e.MarginBounds.Top + e.MarginBounds.Height + 7) ' Left Align - Date/Time
e.Graphics.DrawString(Now.ToLongDateString + " " +
Now.ToShortTimeString, FormPeramalan.DataGridView1.Font, Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top + e.MarginBounds.Height + 7) ' Center - Page No. Info
e.Graphics.DrawString(sPageNo, FormPeramalan.DataGridView1.Font, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width -
e.Graphics.MeasureString(sPageNo, FormPeramalan.DataGridView1.Font,
e.MarginBounds.Width).Width) / 2, e.MarginBounds.Top + e.MarginBounds.Height + 31)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If FormPeramalan.RadioButton1.Checked Then
Header = "Data penjualan dan peramalan pada bulan " &
FormPeramalan.BulanCombo.Text & " tahun " & FormPeramalan.TahunCombo.Text Else
Header = "Data penjualan dan peramalan " &
FormPeramalan.Tanggal1DP.Text & " - " & FormPeramalan.Tanggal2DP.Text End If
Dim dlg As New PrintPreviewDialog() dlg.Width = 600
dlg.Height = 700
dlg.Document = PrintDocument1 dlg.ShowDialog()
End Sub
Private Sub Chart1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Chart1.Click
End Sub End Class