OPTIMASI PENGENDALIAN PERSEDIAAN SPARE PART ...
-
Upload
khangminh22 -
Category
Documents
-
view
2 -
download
0
Transcript of OPTIMASI PENGENDALIAN PERSEDIAAN SPARE PART ...
i
OPTIMASI PENGENDALIAN PERSEDIAAN SPARE PART MENGGUNAKAN ALGORITMA GENETIKA UNTUK
MENINGKATKAN PRODUKTIVITAS (STUDI KASUS: PT.PPA JAKARTA)
SKRIPSI
Diajukan Sebagai Salah Satu Syarat Untuk Memperoleh Gelar
SARJANA KOMPUTER
Program Studi TEKNIK INFORMATIKA
OLEH :
NAMA : AHMAD YANI
NIM : 011401503125048
PROGRAM STUDI TEKNIK INFORMATIKA
PROGRAM SARJANA (S1) FAKULTAS TEKNIK
UNIVERSITAS SATYA NEGARA INDONESIA JAKARTA
2018
v
KATA PENGANTAR
Puji dan syukur kami panjatkan ke hadirat Allah SWT yang telah melimpahkan
rahmat dan karuniaNya sehingga penulisan skripsi ini yang berjudul “Optimasi
Pengendalian Persediaan Menggunakan Algoritma Genetika untuk Meningkatkan
Produktivitas (studi kasus: PT.PPA Jakarta)” dapat diselesaikan dengan baik. Shalawat
serta salam tercurahkan kepada Rasulullah SAW, Keluarga dan Sahabatnya.
Dalam menyelesaikan penulisan skripsi ini, saya ingin mengucapkan terimakasih yang
tak terhingga kepada semua pihak yang membantu kelancaran penulisan skripsi ini, baik
dorongan secara moral maupun materil. Sulit rasanya bagi penulis untuk menyelesaikan
penulisan skripsi ini tanpa adanya bantuan dan motivasi yang pada kesempatan ini penulis
ingin mengucapkan terima kasih kepada :
1. Ibu Dr.Yusriani Sapta Dewi,M.Si, selaku Rektor Universitas Satya Negara Indonesia.
2. Ibu. Ir.Nurhayati,M.Si, selaku Dekan Fakultas Teknik Universitas Satya Negara Indonesia.
3. Bpk. Zulkifli, S.Kom.,M.Kom, selaku Kepala Prodi Teknik Informatika
4. Bpk. Teguh Budi Santoso, S.Kom.,M.Kom, selaku Dosen Pembimbing I dan Bpk. Zulkifli,
S.Kom.,M.Kom, selaku Dosen Pembimbing II atas bimbingan, motivasi dan masukannya
selama penulisan.
5. Bapak ibu dosen Fakultas Teknik Informatika yang telah memberikan ilmunya kepada
penulis, semoga ilmu yang diberikan bisa bermanfaat dikemudian hari.
6. Ungkapan rasa terimakasih dan penghargaan penulis haturkan dengan rendah hati dan rasa
hormat kepada kedua orang tua penulis yang tercinta yaitu ayahanda Marhali dan Ibunda
Masih Andayani serta kakak penulis yang dengan doa restu, nasihat, petunjuk dan motivasi
vi
dari mereka merupakan dorongan moril yang paling efektif untuk menyelesaikan skripsi
ini.
7. Rekan-rekan di PT.PPA yang telah membantu memberikan data data yang diperlukan
untuk menyusun skripsi ini dan terkhusus kepada Bapak Setiabakti dan Ibu Martha yang
banyak memberikan dukungan moril dan materil dalam penyelesaian skripsi ini.
8. Teman-teman mahasiswa USNI khususnya kawan-kawan seperjuangan K2 fakultas teknik
yang selalu memberikan dukungan semangat dan motivasi.
9. Semua pihak yang terlibat secara langsung maupun tidak tidak langsung yang penulisan
tidak dapat disebutkan satu persatu.
Penulis menyadari masih banyak kekurangan dalam penyusunan skripsi ini. Oleh
karena itu penulis sangat mengharapkan saran dan kritik yang membangun dari berbagai
pihak guna dapat menyempurnakan skripsi ini. Penulis berharap semoga skripsi ini dapat
bermanfaat bagi pembaca sekalian.
Jakarta, 16 Agustus 2018
Penulis
vii
OPTIMASI PENGENDALIAN PERSEDIAAN SPARE PART
MENGGUNAKAN ALGORITMA GENETIKA UNTUK
MENINGKATKAN PRODUKTIVITAS
(Studi kasus PT.PPA Jakarta)
ABSTRAK
Penelitian ini dilakukan dengan tujuan untuk melakukan pengendalian untuk spare
part yang sifatnya consumable yaitu oli. Algoritma genetika diterapkan untuk kasus
optimasi persediaan bertujuan untuk mendapatkan jumlah ekonomis pemesanan. Optimasi
persediaan spare part menggunakan algoritma genetika menggunakan Teknik Crossover,
Teknik mutasi dan Teknik seleksi. Data penelitian ini menggunakan data pemakaian
selama satu tahun yaitu 6 jenis oli , solusi optimum diperoleh di kromosom 28 EOQ 5840
liter untuk 6 item yang terdiri 1548 liter Oli shell rimula R2 10W, 1492 liter Oli Shell
Rimula R2 30, 1086 liter Oli shell rimula R3 15W-40, 588 liter Oli shell rimula R2 30, 570
liter oli shell rimula R3 15W-40, 556 liter Oli shell rimula R2 10W dan algoritma genetika
sebesar 575 unit untuk 6 item yang teridiri dari 153 liter Oli shell rimula R2 10W, 145 liter
Oli Shell Rimula R2 30, 108 liter Oli shell rimula R3 15W-40, 58 liter Oli shell rimula R2
30, 57 liter oli shell rimula R3 15W-40, 54 liter Oli shell rimula R2 10W, pengoptimalan
menggunakan algoritma genetika terlihat sangat signifikan.
viii
OPTIMIZATION OF SPARE PART INVENTORY CONTROL
USING GENETIC ALGORITHM TO IMPROVE PRODUCTIVITY
(Case study of PT. PPA Jakarta)
ABSTRACT
This research was conducted with the aim of controlling the spare parts which are
consumable, namely oil. Genetic algorithms are applied to inventory optimization cases
aiming to get the economical amount of an order. Spare part inventory optimization using
genetic algorithms using Crossover Technique, Mutation Technique and Selection
Technique. The data of this study used one-year usage data, namely 6 types of oil, the
optimum solution was obtained on chromosome 28 EOQ 5840 liters for 6 items consisting
of 1548 liters of oil shell rimula R2 10W, 1492 liters of Shell Rimula R2 30, 1086 liters
Oli shell rimula R3 15W-40, 588 liter Shell rimula oil R2 30, 570 liters of shell rimula oil
R3 15W-40, 556 liters R2 rim shell shell 10W and a genetic algorithm of 575 units for 6
items consisting of 153 liters of oil shell rimula R2 10W, 145 liter Shell Rimula R2 30,
108 liters of R3 15W-40 shell rimula oil, 58 liters shell rimula R2 30 oil, 57 liters of R3
15W-40 shell rimula oil, 54 liters of R2 10W shell rimula oil, optimization using genetic
algorithms looks very significant.
ix
DAFTAR ISI
COVER ……………………………………………………………………………………………………………………………….
HALAMAN PERNYATAAN KARYA SENDIRI …………………………………………………………………………ii
HALAMAN PENGESAHAN SKRIPSI ……………………………………………….......................................iii
HALAMAN PENGESAHAN PENGUJI …………….……………………………………………………………………i┗
KATA
PENGANTAR …………………………………………….…………………….....................................................v
ABSTRAK ……………………………………………………………………………...............................................┗ii
DAFTAR ISI …………………………………………………………………........................................................ix
DAFTAR GAMBAR ………………………………………………………………………………………………..………..xiii
DAFTAR TABEL …………..……………………….………………………………………………………………………….xv
BAB I PENDAHULUAN
ヱ.ヱ Lataヴ Belakaミg …..……………………………………………………………………………………………………...1
1.2 Permasalahan peミelitiaミ ……...……………….……………………………........................................3
ヱ.ン Ruaミg Liミgkup Masalah………...……………………………………………………………………………….….ン
ヱ.ヴ Ruマusaミ Masalah....…………………………………………………………...........................................3
ヱ.ヵ Tujuaミ daミ Maミfaat………………………….............….……………….…………………………………….…3
ヱ.ヶ Sisteマatika Peミulisaミ ………………………………………………………….........................................5
BAB II LANDASAN TEORI
ヲ.ヱ Tiミjauaミ Pustaka …………………………………………………………………………………...………….6
ヲ.ヲ Laミdasaミ Teoヴi ………………………………………………………………………………………………….Γ
ヲ.ヲ.ヱ Peヴsediaaミ ………………………………………………………………………………………………….9
2.2.2 Metode Peミgeミdaliaミ Peヴsediaaミ…….. ……………………..………………………………ヱ0
x
ヲ.ヲ.ン EIoミoマiI Quaミtity Oヴdeヴ ……………………………………………………….…….….ヱヴ
2.2.4 Perhitungan EOQ………………………………………………………………………….……ヱヴ
ヲ.ヲ.ヵ Fヴekueミsi Peマesaミaミ ………………………………………..……………………………..14
ヲ.ヲ.ヶ Reoヴdeヴ Poiミt………………….…………………………………………………………………ヱヵ
ヲ.ヲ.Α Total Iミ┗eミtoヴy Cost…………………….…..……………………………………………….16
ヲ.ヲ.Β Algoヴitマa Geミetika …………………………………………………………………….…….ヱΑ
ヲ.ヲ.Γ Stヴuktuヴ Dasaヴ Algoヴitマa Geミetiak…………………………………………………….21
ヲ.ヲ.ヱヰ Siklus Algoヴitマa Geミetika…………………………….………………………………….22
ヲ.ヲ.ヱヱ Peミgeヴtiaミ Optiマasi………………………………………………………………………..23
ヲ.ヲ.ヱヲ Klasifikasi Optiマasi………………………………………………………………………….23
ヲ.ン Teoヴi Peマヴogヴaマaミ………………………………………….………………………………………………ヲヶ
ヲ.ン.ヱ Peミgeヴtiaミ Sisteマ………………………..……………………………………………………ヲヶ
ヲ.ン.ヲ Peミgeヴtiaミ Iミfoヴマasi………………………………………………………………..……….ヲヶ
ヲ.ン.ン XAMPP V.ン.ヲ.ヲ…………………………………………………………………………………..ヲ7
ヲ.ヴ UML ………………………………………………………..………………………………………………………ヲΓ
2.4.1 Use Case ……………………………………………………………………………..……………ンヰ
2.4.2 Class Diagram…………………………………….……………………………………………..ン1
2.4.3 Activity Diagram………………………………………………………………………………..32
2.4.4 Sequence Diagram……………..……………………………………………………………..ン3
BAB III METODOLOGI PENELITI
ン.ヱ Pヴofil Peヴusahaaミ ……………………………………….……...………………………………….….......34
ン.ヲ Aミalisa KeHutuhaミ Sisteマ ……………………….………………………………………………………ンヵ
ン.ン PeヴaミIaミgaaミ Peミelitiaミ………………….………………………………………………………………ンヵ
3.4. Teknik Aミalisis…………………………………………………………………………………………………ンヶ
ン.ヴ.ヱ Peミguマpulaミ Data ……………………………..…………………………………………….ンヶ
xi
3.4.2 Pengolahan Data Awal ………………………….………………………….……………….ン7
3.4.3 Metode Yang Diusulkan ………………….…………………………………………………37
BAB IV ANALISIS DAN PEMBAHASAN
4.1 PeヴaミIaミgaミ Sisteマ…………………………………………………………………………………………ン9
4.1.1 Usecase Diagram ………………………………………………………………………………39
4.1.2 Activity Diagram……………………………………..…………………………………………40
4.1.3 Class Diagram …………………………………………………………………………………..46
4.1.4 Sequence Diagram ……………………………………………………………………………ヴΑ
4.2 RaミIaミgaミ Pヴototype Aplikasi………………………….. …………………………………………….ヴΓ
4.ン RaミIaミgaミ Basis Data……………….…………………….. ……………………………………………..53
4.4 Rancangan Tampilan Sistem…………………………………………………………………………….ヵヵ
4.5 Pengumpulan data…………………………………………………………………………………………..30
4.5.1 Data Pemakaian…………………………………………………………………………………60
4.5.2 Peマilihaミ Iteマ Spaヴe paヴt……………………….………………………………………..ヶヱ
4.ヵ.ン Data Peヴマiミtaaミ Spaヴe paヴt teヴpilih………………………………………..………..ヶヱ
4.5.4 Data Harga Sparepart ………………… …………………………………………..……….ヶヲ
4.5.5 Data biaya Spare part ……………………………………………………………………….ヶヲ
4.5.6. Meヴuマuskaミ Koマpoミeミ EOQ………….. …………………………………………….ヶン
4.5.7 Analisis Persediaan menggunakan EOQ …………………………………………ヶン
4.5.8 Menghitung Total Cost yang disedehanakan …………………………………….65
4.ヵ.Γ Fヴekuミsi Peマesaミaミ…………………… …………………………………………………...67
4.5.10 Peミeミtuaミ Lead Tiマe ……………………………………………………………………..ヶΓ
xii
4.5.11 Titik Pemesanan Ulang ………………………………………………………………..….69
4.ヶ Peミeミtuaミ Paヴaマeteヴ………………………………… …………………………………..…………..70
4.6.1 Iミisialisasi a┘al ……………………………..……………………………………...............70
4.6.2 Fungsi Fitness………………………………………..…………………………………………72
4.6.3 Elitisme …………………………………………………………..………………………………..73
4.6.4 Proses Seleksi…………………………………………………………………………………….74
4.6.5 Pemilihan Crossover ………………………………………………………………………….83
4.ヶ.ヶ Mutasi……………………………………………………………………………………………….91
4.6.7 Evaluasi Fitjees……………………………………………………….………………………….96
BAB V KESIMPULAN DAN SARAN
ヵ.ヱ Kesiマpulaミ ………………………………………………………………………………..……………………ΓΒ
ヵ.ヲ Saヴaミ………………………………………………………………………………………………………………..99
DAFTAR PUSTAKA……………………………………………………………………………………………..ヱヰヰ
LAMPIRAN-LAMPIRAN …………………………………………………………………………………….....
xiii
DAFTAR GAMBAR
Gambar 2.1 Contoh Cヴosso┗eヴ……………………………………………………………………………………….16
GaマHaヴ ヲ.ヲ Coミtoh Mutasi ……………………………………………………………………………………………17
GaマHaヴ ヲ.ン Stヴukuヴ Dasaヴ Algoヴitマa Geミetika……………………………………………………………….18
GaマHaヴ ヲ.ヴ Siklus Algoヴitマa Geミetika oleh Da┗id GoldHeヴg…………………………………………..18
GaマHaヴ ヲ.ヵ Siklus Algoヴitマa Geミetika oleh MiIhael┘iIz…………………………….....................19
GaマHaヴ ヲ.ヶ Klasifikasi Optiマasi……………………………………………………………………………………..20
GaマHaヴ ン.ヱ Diagヴaマ Aluヴ Pヴoses Algoヴitマa Geミetika…………………………………………………….34
GaマHaヴ ヴ.ヱ Data Peマakaiaミ………………………………………………………………………………………….35
GaマHaヴ ヴ.ヲ Use Case Adマiミ………………………………………………………………………………………….44
Gambar 4.3 activity Diagヴaマ logiミ……………………………………………………...............................45
GaマHaヴ ヴ.ヴ AIti┗ity Diagヴaマ MeミaマHah Kategoヴi…………………………………………………………46
GaマHaヴ ヴ.ヵ AIti┗ity Diagヴaマ MeミaマHah Baヴaミg…………………………………………………………..47
GaマHaヴ ヴ.ヶ AIti┗ity Diagヴaマ MeミaマHah Peミgguミa………………………………………………………48
GaマHaヴ ヴ.Α AIti┗ity Diagヴaマ Meミghituミg EOQ……………………………………………………………..49
GaマHaヴ ヴ.Β AIti┗ity Diagヴaマ Meミghituミg GA………………………………………………………………..50
GaマHaヴ ヴ.Γ Class Diagヴaマ……………………………………………………………………………………………..51
GaマHaヴ ヴ.ヱヰ SeケueミIe Diagヴaマ Logiミ…………………………………………………………………………..52
GaマHaヴ ヴ.ヱヱ SeケueミIe Diagヴaマ Meミu Kategoヴi……………………………………………………………53
Gambar 4.12 Form Logiミ………………………………………………………………………………………………..54
GaマHaヴ ヴ.ヱン Pヴototype Kategoヴi………………………………………………………...............................54
xiv
GaマHaヴ ヴ.ヱヴ Pヴototype Baヴaミg………………………………………………………………………………………55
GaマHaヴ ヴ.ヱヵ Pヴototype Peミgguミa…………………………………………………………………………………55
GaマHaヴ ヴ.ヱヶ Pヴototype CaHaミg……………………………………………………………………………………..56
GaマHaヴ ヴ.ヱΑ Pヴototype Peマiミtaaミ Baヴaミg……………………………………………..........................56
GaマHaヴ ヴ.ヱΒ Hituミg EOQ……………………………………………………………………………………………….57
GaマHaヴ ヴ.ヱΓ Pヴototype Hituミg GA……………………………………………………...............................57
GaマHaヴ ヴ.ヲヰ Halaマaミ Logiミ………………………………………………………………………………………….60
GaマHaヴ ヴ.ヲヱ Halaマaミ Utaマa…………………………………………………………................................60
GaマHaヴ ヴ.ヲヲ Halaマaミ Kategoヴi……………………………………………………………………………………..61
GamHaヴ ヴ.ヲン Halaマaミ Baヴaミg……………………………………………………………………………………….61
GaマHaヴ ヴ.ヲヴ Halaマaミ Peミgguミa……………………………………………………………………………………62
GaマHaヴ ヴ.ヲヵ Halaマaミ CaHaミg……………………………………………………………………………………….62
GaマHaヴ ヴ.ヲヶ Halaマaミ Peヴマiミtaaミ Baヴaミg……………………………………………..........................63
GaマHaヴ ヴ.ヲΑ Halaマaミ EOQ……………………………………………………………………………………………63
GaマHaヴ ヴ.ヲΒ Halaマaミ GA………………………………………………………………………………………………64
GaマHaヴ ヴ.ヲΓ Halaマaミ Lapoヴaミ Peヴマiミtaaミ…………………………………………………………………..64
xv
DAFTAR TABEL
Table 2.1 Simbol Use Case Diagヴaマ………………………………………………………………………………..26
TaHel ヲ.ヲ SiマHol Class Diagヴaマ………………………………………………………………………………………27
TaHel ヲ.ン SiマHol AIti┗ity Diagヴaマ………………………………………………………………………………….28
TaHel ヲ.ヴ SiマHol SeケueミIe Diagヴaマ……………………………………………………………………………..29
Tabel 4.1 Daftaヴ Spaヴe paヴt Oli daミ filteヴ teヴpilih……………………………………………………………36
TaHel ヴ.ヲ Daftaヴ Peヴマiミtaaミ Oli daミ filteヴ teヴpilih………………………………………………………….37
TaHel ヴ.ン Daftaヴ haヴga Spaヴepaヴt Oli daミ Filteヴ teヴpilih…………………………………………………..37
Tabel 4.4. Merumuskan Komponen EOQ ……………………………………………………………………….38
TaHel ヴ.ヵ Hasil Nilai EOQ ……………………………………………………………………………………………….38
TaHel ヴ.ヶ PeマHeミtukaミ Kヴoマosoマ seIaヴa ヴaミdoマ……………………………………....................39
TaHel ヴ.Α Nilai Fitミess マasiミg マasiミg kヴoマosoマ…………………………………………………………..40
TaHle ヴ.Β Nilai Fitミess …………………………………………………………………....................................41
TaHel ヴ.Γ Nilai PヴoHaHilitas Seleksi………………………………………………………………………………….42
TaHel ヴ.ヱヰ Pヴoses Cヴosso┗eヴ…………………………………………………………………………………………..43
TaHel ヴ.ヱヱ Pヴoses マutasi………………………………………………………………………………………………..43
TaHel ヴ.ヱヲ Populasi Haヴu………………………………………………………………………………………………..43
TaHel ヴ.ヱン Hasil EOQ daミ GA…………………………………………………………..................................43
TaHel ヴ.ヱヴ Deskヴipsi UseIase………………………………………………………………………………………….45
Tabel 4.ヱヵ Peミgguミa……………………………………………………………………………………………………..58
TaHel ヴ.ヱヶ Kategoヴi ……………………………………………………………………......................................58
TaHel ヴ.ヱΑ Baヴaミg...……………………………………………………………………......................................58
xvi
TaHel ヴ.ヱΒ CaHaミg………………………………………………………………………………………………………….59
TaHel ヴ.ヱΓ Peヴマiミtaaミ…………………………………………………………………....................................60
TaHel ヴ.ヲヰ Hituミg EOQ……………………………………………………………………………………………………59
TaHel ヵ.ヱ Hasil PeヴHaミdiミgaミ EOQ daミ GA…………………………………………………………………….65
1
BAB I
PENDAHULUAN
1.1 Latar Belakang
Persaingan global dalam dunia usaha yang semakin cepat
menyebabkan persaingan yang terjadi antara perusahaan berlangsung semakin
ketat. Potensi batubara di Indonesia semakin pesat dan terus meningkat setiap
tahunnya. Kegiatan eksplorasi tambang dilakukan oleh perusahaan kotraktor
tambang dan alat berat yang digunakan untuk kegiatan penambangan tersebut
dimiliki oleh perusahaan kontraktor tambang. Oleh karena itu perusahaan
yang bergerak dibidang kontraktor perlu melakukan kegiatan pemeliharaan
dan perawatan alat berat agar target produksi bisa tercapai optimal. Maka
diperlukan pengendalian terhadap material spare part komponen alat berat
karena peran alat berat yang sangat penting dalam kegiatan eksplorasi
tambang.
Manajemen persediaan merupakan prinsip, konsep, dan teknik untuk
menentukan apa yang dipesan, berapa jumlah pesanan, kapan dibutuhkan,
kapan dilakukan pemesanan ataupun produksi, serta bagaimana dan dimana
menyimpannya. Hal ini perlu dilakukan agar barang yang tersedia sesuai
dengan kebutuhan dengan jumlah yang dibutuhkan dan dapat dipenuhi pada
waktunya.
Penelitian ini mengambil studi di PT. Putra Perkasa Abadi yang
selanjutnya disebut PT.PPA merupakan salah satu perusahaan yang bergerak
dibidang kontraktor pertambangan. Pemeliharaan terhadap unit alat berat
menjadi hal yang sangat penting baik yang bersifat berkala (preventive
2
management). Agar aktivitas maintenance berjalan efektif maka diperlukan
persediaan akan spare part. Apabila terjadi keterlambatan barang tentunya
akan sangat berpengaruh terhadap produktivitas alat berat dan berdampak
pada proses produksi batubara. Oleh karena itu pentingnya ketersediaan akan
spare part sehingga diperlukan pengendalian persediaan yang optimal. Pada
penelitian ini diusulkan untuk pengendalian persediaan dengan menggunakan
Algoritma Genetika untuk mengatasi permasalahan optimasi persediaan.
Algoritma Genetika merupakan salah satu algoritma yang sangat tepat
digunakan untuk penyelesaian masalah optimasi yang kompleks dan sukar
diselesaikan. (Gen dan Cheng,2000) berpendapat bahwa algoritma genetika
mampu mengatasi berbagai jenis fungsi obyektif dan berbagai konstrain,
sangat efektif dalam proses pencarian optimasi global, dan sangat fleksibel
untuk dapat dihibridisasi dengan metode (heuristik) lain. Algoritma ini
mempunyai fleksibilitas untuk dapat di implementasikan secara efisien pada
problematika tertentu, dan bersifat mencari kemungkinan-kemungkinan untuk
mendapatkan suatu solusi yang optimal. Sehingga algoritma genetika
diharapkan dapat memberikan solusi yang lebih tepat dengan waktu yang
singkat sesuai dengan karakteristik yang dimilikinya. Dengan adanya
penelitian ini diharapkan dapat mengembangkan model persediaan yang
sesuai dengan sistem persediaan di PT.PPA dan menerapkan metode
algoritma genetika untuk mendapatkan jumlah pemesanan optimum.
3
1.2 Permasalahan Penelitian
1.2.1 Identifikasi Masalah
Berdasarkan latar belakang diatas identifikasi masalah dalam
penelitian ini adalah
1. Perlu adanya pengendalian persediaan yang optimal
2. Berapa banyak jumlah barang yang akan dipesan
3. Kapan pemesanan barang harus dilakukan
1.3 Rumusan Masalah
Berdasarkan latar belakang masalah maka dapat dirumuskan adalah
“Bagaimana mengoptimasi pengendalian persediaan spare part dengan
menggunakan algoritma genetika.
1.4 Batasan Masalah
Batasan masalah dalam penelitian ini adalah:
1. Penelitian dilakukan pada departemen logistic PT.PPA Jakarta
2. Pengendalian persediaan hanya dilakukan untuk spare part yang
bersifat consumable yaitu oli dan filter oli.
3. Permintaan suku cadang berasal dari Departement Plant untuk
kegiatan pemeliharaan alat berat.
1.5 Tujuan dan Manfaat
Adapun tujuan penelitian ini adalah merancang suatu sistem
pengendalian persediaan spare part untuk mengetahui berapa banyak
jumlah pemesanan barang yang optimal dengan menggunakan algoritma
genetika.
4
Manfaat penelitian ini adalah:
1. Diharapkan dapat meningkatkan produktivitas PT.PPA dalam
memenuhi kebutuhan persediaan barang.
2. Penelitian ini juga diharapkan mendapat hasil maksimum dalam
setiap pemesanan persediaan agar dapat berjalan dengan efektif
dan efisien.
3. Membantu PT.PPA untuk mempertimbangkan dan menentukan
kebijakan dalam kegiatan pengendalian persediaan barang.
4. Menjadi pengetahuan baru mengenai Algoritma Genetika Untuk
Pengendalian Persediaan Barang
5
1.6 Sistematika Penulisan
Sistematika penulisan dalam penelitian ini adalah sebagai berikut:
BAB I PENDAHULUAN
Menjelaskan tentang Latar belakang masalah, Rumusan Masalah,
Tujuan Penelitian, Ruang Lingkup Penelitian, Manfaat Penelitian dan
Sistematika Penulisan.
BAB II LANDASAN TEORI
Menjelaskan tentang Tinjauan studi yang berisi uraian singkat dari
beberapa penelitian dan Tinjauan pustaka yang berisi teori teori yang
berhubungan dengan materi penelitian.
BAB III METODOLOGI PENELITIAN
Menjelaskan tentang Metode Penelitian, Metode Pengumpulan Data,
Metode Pengolahan Awal Data.
BAB IV ANALISIS HASIL DAN PEMBAHASAN
Menjelaskan tentang data yang telah dikumpulkan, perumusan EOQ,
merumuskan Algoritma genetika, dan tampilan sistem yang
direrncanakan.
BAB V KESIMPULAN DAN SARAN
Menjelaskan tentang Kesimpulan dan saran yang didapatkan dari hasil
perhitungan menggunakan EOQ dan Algoritma genetika.
DAFTAR PUSTAKA
LAMPIRAN
6
BAB II
LANDASAN TEORI
2.1 Tinjauan Pustaka
Penelitian penelitian yang berhubungan dengan persediaan
menggunakan Algoritma Genetika:
Menurut Indri Utami et al. (2015) Melakukan penelitian dengan tema
Analisis Pengendalian Persediaan Produk dengan Metode Economic
Order Quantity Multi-Item menggunakan Algoritma Genetika untuk
Mengefisienkan Biaya Persediaan. Proses penelitian dilakukan dengan
proses penyilangan, proses mutasi, penentuan parameter Algoritma
kemudian menganalisa dan membuat peramalan sehingga dapat
disimpulkan bahwa telah dihasilkan script program peramalan berbasis
exponential smoothing dan metode EOQ multi item dengan algoritma
genetika menggunakan MATLAB. Metode exponential Smoothing yang
paling sesuai untuk meramalkan data permintaan konsumen terhadap
produk fanta 250ml, Sprite 250ml, Sprite 1L, Fanta 1L, dan CocaCola 1L
adalah metode winter, sedangkan untuk produk Pulpy Orange Metode
yang sesuai menurut penulis adalah metode Holt.
Ramuna et al. (2015) Melakukan penelitian tentang Optimasi
persediaan barang dalam poduksi jilbab menggunakan agoritma genetika
dengan hasil Representasi kromosom dengan cara real coded dengan
proses reproduksi one-cut Point crossover dan exchange point mutation
yang digunakan dalam penelitian ini mampu menyelesaikan permasalahan
optimasi dalam persediaan barang dalam produksi jilbab. Algoritma
7
genetika mampu menentukan proporsi produksi barang yang harus
disediakan dalam produksi jilbab dengan meminimalkan biaya-biaya yang
ditimbulkan dari produksi dan menghasilkan keuntungan yang maksimal.
Dari hasil coba populasi, didapatkan populasi yang paling optimal adalah
140 dengan rata-rata nilai fitness 0.006217. Ukuran kombinasi crossover
rate dan mutation rate yang terbaik pada penelitian ini adalah 0.5 dan 0.5
dengan rata-rata nilai fitness 0.007788 Sedangkan untuk ukuran
banyaknya generasi didapatkan generasi yang paling optimal pada
generasi 150 dengan rata-rata nilai fitness 0.011070.
Dirce et al. (2014) Melakukan penelitian tentang Optimasi
Pengendalian Persediaan Bahan Kimia Dengan Pendekatan EOQ
Menggunakan Algoritma Genetika menyimpulkan bahwa model
persediaan EOQ multi-item yang dapat meminimumkan biaya total
persediaan bahan kimia di Instalasi A PT.XYZ, adalah sebuah model yang
terbentuk dari penjumlahan permintaan, total biaya pemesanan, serta total
biaya penyimpanan untuk ke-empat bahan kimia dalam satuan Rupiah.
Untuk fungsi pembatasnya terdiri atas dua jenis pembatas yaitu berupa
anggaran yang disediakan perusahaan untuk periode bulan Juni 2014 di
Instalasi A, dan berupa kapasitas gudang. Model EOQ multi item
kemudian dioptimasi menggunakan Algoritma Genetika untuk
menghasilkan biaya total persediaan bahan kimia. Hasil yang diperoleh
adalah sebesar Rp 3,995,584,171.9458 dengan perincian masing-masing
bahan kimia adalah sebagai berikut: Aluminium Sulfat Cair sebesar
8
24,875.9615 Kg, Kaporit sebesar 18.8838 Kg, Polyacrimilade sebesar
72.7511 Kg, dan Chlor Cair 452.9790 Kg. Hasil EOQ multi item dengan
Algoritma Genetika dan hasil perhitungan EOQ Perusahaan kemudian
dibandingkan dengan anggaran persediaan yang disediakan perusahaan.
Hasil yang diperoleh adalah penghematan sebesar 37.9% yaitu Rp
2,448,215,828.05425 untuk EOQ multi item dengan Algoritma Genetika
dan penghematan sebesar 34.6% yaitu Rp. 2,232,002,715.83484 untuk
EOQ Perusahaan. Dengan demikian hasil optimasi EOQ multi item
dengan Algoritma Genetika memberikan penghematan yang lebih besar
untuk persediaan bahan kimia.
Berdasarkan tinjauan studi diatas, dalam penelitian ini dilakukan
optimasi perencanaan persediaan sparepart menggunakan algoritma
genetika untuk meningkatkan produktivitas pada pt.ppa. Dari penelitian
sebelumnya dapat disimpulkan bahwa menggunakan algoritma genetika
bisa menyelesaikan masalah mengenai optimasi persediaan sehingga
menjadikan acuan untuk melakukan optimasi perencanaan persediaan
menggunakan algoritma genetika.
9
2.2 Landasan Teori
2.2.1 Persediaan
Menurut Herjanto (2007) persediaan adalah bahan atau barang
yang disimpan yang akan digunakan untuk memenuhi tujuan tertentu,
misalnya untuk digunakan dalam proses produksi atau perakitan,
untuk dijual kembali, atau untuk suku cadang dari suatu peralatan atau
mesin. Persediaan dapat berupa bahan mentah, bahan pembantu,
barang dalam proses, barang jadi, ataupun suku cadang. Bisa
dikatakan tidak ada perusahaan yang beroperasi tanpa persediaan,
meskipun sebenarnya persediaan hanyalah suatu sumber dana yang
menganggur karena sebelum persediaan digunakan berarti dana yang
terikat didalamnya tidak dapat digunakan untuk keperluan lain.
Persediaan adalah sumber daya menganggur (idle resources)
yang menunggu proses lebih lanjut. Proses lebih lanjut yang dimaksud
adalah kegiatan produksi pada sistem manufaktur, kegiatan pemasaran
pada sistem distribusi, ataupun kegiatan konsumsi pangan pada sistem
rumah tangga. Dalam sistem manufaktur, menurut Nasution dan
Prasetyawan (2008) berdasarkan jenisnya terdapat 4 macam
persediaan secara umum yaitu sebagai berikut:
1. Bahan baku (raw materials) adalah barang-barang yang dibeli dari
pemasok (supplier) dan akan digunakan atau diolah menjadi
produk jadi yang akan dihasilkan oleh perusahaan.
10
2. Bahan setengah jadi (work in process) adalah bahan baku yang
sudah diolah atau dirakit menjadi komponen namun masih
membutuhkan langkah-langkah lanjutan agar menjadi produk jadi.
3. Barang jadi (finished goods) adalah barang jadi yang telah selesai
diproses, siap untuk disimpan di gudang barang jadi, dijual, atau
didistribusikan ke lokasi-lokasi pemasaran.
4. Bahan-bahan pembantu (supplies) adalah barang-barang yang
dibutuhkan untuk menunjang produksi, namun tidak akan menjadi
bagian pada produk akhir yang dihasilkan perusahaan.
2.2.2 Metode Pengendalian Persediaan
Terdapat beberapa metode pengendalian persediaan. Secara
kronologis metode pengendalian persediaan yang ada dapat
diidentifikasikan sebagai berikut (Nasution dan Prasetyawan, 2008):
1. Metode pengendalian tradisional
Metode ini menggunakan matematika dan statistika sebagai
alat bantu utama dalam memecahkan masalah kuantitatif dalam
sistem persediaan. Pada dasarnya, metode ini berusaha mencari
jawaban optimal dalam menentukan:
a) Jumlah ukuran pemesanan ekonomis (EOQ)
b) Titik pemesanan kembali (Reorder point)
c) Jumlah cadangan pengaman (safety stock) yang diperlukan
2. Metode perencanaan kebutuhan material
11
Metode pengendalian tradisional akan tidak efektif bila
digunakan untuk permintaan yang bersifat tidak bebas
(independent). Yang dimaksud permintaan tidak bebas adalah
permintaan yang tergantung kepada kebutuhan suatu
komponen/material dengan komponen material lainnya. Metode
MRP ini bersifat komputer oriented, yang terdiri dari sekumpulan
prosedur, aturan-aturan keputusan dan seperangkat mekanisme
pencatatan yang dirancang untuk menjabarkan jadwal induk
produksi.
3. Metode Kanban
Kanban adalah suatu metode otorisasi produksi dan aliran
bahan didalam system JIT. Kanban berarti suatu isyarat (kartu,
sinyal, dll) yang digunakan untuk mengendalikan pekerjaan yang
berurutan. Kanban merupakan subsistem dari JIT. Tujuan metode
Kanban adalah member suatu tanda terhadap kebutuhan komponen
yang lebih banyak dan menjamin bahwa komponen-komponen
tersebut diproduksi tepat pada waktunya sehingga mendungkung
kegiatan perakitan berikutnya.
2.2.3 Economic Quantity Order
Economic order quantity (EOQ) merupakan salah satu model
yang dapat digunakan untuk mengontrol persediaan. Model ini,
pertama kali diperkenalkan oleh Ford W. Harris pada 1915. Pengertian
12
EOQ menurut Nafarin, M (2004:84) adalah kuantitas barang yang
dapat diperoleh dengan biaya yang minimal atau sering dikatakan
sebagai jumlah pembelian yang optimal. Sedangkan menurut Heizer
dan Render (2010:92) EOQ merupakan sebuah teknik kontrol
persediaan yang meminimalkan biaya total dari pemesanan dan
penyimpanan.
EOQ (Economic Order Quantity) atau pembelian bahan baku
dan suku cadangnya yang optimal menurut Slamet, Achmad (2007:70)
diartikan sebagai kuantitas bahan baku dan suku cadangnya yang dapat
diperoleh melalui pembelian dengan mengeluarkan biaya minimal
tetapi tidak berakibat pada kekurangan dan kelebihan bahan baku dan
suku cadangnya.
Sedangkan pengertian EOQ menurut Assauri (2008, hal. 256)
EOQ merupakan jumlah atau besarnya pesanan yang dimiliki,
ordering cost dan carrying cost per tahun yang paling minimal.
Pelaksanaan penggunaan metode EOQ, barang yang dibutuhkan dapat
diterima pada saat yang tepat, dengan jumlah yang sesuai, dan tanpa
menimbulkan persediaan yang berlebihan. Yang berarti dapat
mengurangi biaya-biaya yang timbul di dalam persediaan.
Model kuantitas pesanan ekonomis economic order quantity
(EOQ) adalah salah satu teknik pengendalian persediaan yang paling
tua dan paling dikenal secara luas. Teknik ini relatif mudah untuk
13
digunakan tetapi didasarkan pada beberapa asumsi menurut Heizer &
Render (2005) adalah sebagai berikut:
1. Permintaan diketahui, tetap dan bebas
2. Lead time yaitu waktu antara pemesanan dan penerimaan
pesanan diketahui dan konstan.
3. Penerimaan persediaan bersifat seketika dan lengkap
dengan kata lain persediaan dari sebuah pesanan tiba dalam
satu batch sekaligus.
4. Diskon (potongan harga) karena kuantitas tidak
memungkinkan.
5. Biaya variable yang ada hanyalah biaya pengaturan atau
pemesanan dan biaya menahan atau menyimpan persediaan
dari waktu ke waktu (biaya penyimpanan atau
penggudangan).
6. Kosongnya persediaan (kekurangan) dapat dihindari
sepenuhnya jika pemesanan dilakukan pada waktu yang
tepat.
Besarnya EOQ dapat ditentukan dengan berbagai cara,
menurut Hansen dan Mowen (2005:472) Economic Order Quantity
akan menentukan jumlah pesanan persediaan yang meminimumkan
biaya pemesanan dan biaya penyimpanan.
14
2.2.4 Perhitungan Economic Order Quantity (EOQ)
Untuk mendapatkan besarnya pembelian bahan baku yang
optimal setiap kali pesan dengan biaya minimal menurut Slamet,
Achmad (2007:70) dapat ditentukan dengan Economic Order Quantity
(EOQ) dan Reorder Point (ROP). Perhitungan Economic Order
Quantity (EOQ) dapat diformulasikan sebagai berikut:
EOQ = √匝 ×三 ×傘皿×�
R= kuantitas yang diperlukan selama periode tertentu
S= biaya pemesanan setiap kali pesan (oredring cost)
P= harga bahan per unit
I= biaya penyimpanan bahan digudang yang dinyatakan dalam
presentase dari nilai persediaan rata-rata dalam satuan mata uang yang
disebut dengan carrying cost
PxI = Besarnya biaya penyimpanan bahan baku per unit
2.2.5 Frekuensi Pembelian
Metode EOQ mengacu pada penentuan jumlah yang sama
dalam setiap kali pembelian. Oleh sebab itu, banyaknya kegiatan
pembelian dalam satu tahun dapat diketahui dengan membagi
kebutuhan bahan dalam satu tahun dengan jumlah pembelian setiap
kali melakukan pemesanan. Rumus frekuensi pemesanan adalah
sebagai berikut:
15
I = 拶撮鮫晒
Dimana:
I = frekuensi pemesanan dalam satu tahun
D = jumlah kebutuhan bahan selama satu tahun
EOQ = jumlah pembelian bahan sekali pesan
2.2.6 Reorder Point (ROP)
Besarnya penggunaan bahan selama waktu pemesanan
merupakan perkalian antara lamanya waktu pemesanan dan
penggunaan rata-rata. Pemesanan dapat dilakukan dengan cara
menunggu samapai persediaan mencapai jumlah tertentu. Dengan
demikian jumlah barang yang dipesan relative tetapi interval waktu
tidak sama. Atau pemesanan dilakukan dengan waktu yang tetap tetapi
jumlah pesanan berubah-ubah sesuai dengan tingkat persediaan yang
ada.
Adapun faktor-faktor yang mempengaruhi titik pemesanan
kembali (reorder point) menurut Slamet, Achmad (2007:71) adalah:
1. Lead time, yaitu jangka waktu yang diperlukan sejak
dilakukan pemesanan sampai saat datangnya bahan
baku yang dipesan.
2. Stock out cost, yaitu biaya-biaya yang terpaksa
dikeluarkan karena keterlambatan datangnya bahan
baku dan suku cadangnya.
16
3. Extra carring cost, yaitu biaya-biaya yang terpaksa
dikeluarkan karena bahan baku dan suku cadangnya
datang terlalu awal.
Reorder point menurut Slamet, Achmad (2007:72) dapat dicari
dengan rumus berikut ini:
Dimana:
LD = Lead time atau waktu tunggu
AU = Average unit atau rata-rata pemakaian selama satuan waktu
tunggu
SS = Safety stock atau persediaan pengaman
Dari penjelasan di atas dapat disimpulkan bahwa reorder point
atau titik pemesanan kembali adalah titik dimana perusahaan harus
melakukan pemesanan kembali untuk persediaan bahan bakunya.
2.2.7 Total Inventory Cost (TIC)
Biaya total persediaan adalah biaya terjadi untuk
menyeimbangkan antara jumlah pemesanan dengan tingkat inventory,
rumus yang digunakan dalam perhitungan Total inventory Cost:
TIC = 傘 岾拶晒峇 + �察 岾晒匝峇
D = besar laju permintaan atau demand rate dalam unit per tahun
S = biaya setiap kali pemesanan atau ordering cost
C = biaya per unit dalam dolar per unit
Reorder Point = (LD x AU) + SS
17
I = biaya pengelolaan atau carrying cost adalah presentase terhadanilai
inventory per tahun
Q = Ukuran paket pesanan atau lot size dalam unit
TC = Biaya total inventory per tahun
2.2.8 Algoritma Genetika
Algoritma Genetika merupakan suatu metode heuristic yang
dikembangkan berdasarkan prinsip genetika dan proses seleksi
alamiah Teori Evolusi Darwin. Metode optimasi dikembangkan oleh
Jhon Holland sekitar tahun 1960-an dan dipopulerkan oleh seorang
mahasiswanya, David Goldberg, pada tahun 1980-an (Haupt, 2004).
Proses pencarian penyelesaian atau proses terpilihnya sebuah
penyelesaian dalam algoritma ini berlangsung sama seperti terpilihnya
suatu individu untuk bertahan hidup dalam proses evolusi.
Dalam Teori Evolusi Darwin, suatu individu tercipta secara
acak kemudian berkembang biak melalui proses reproduksi sehingga
terbentuk sekumpulan individu sebagai suatu populasi setiap individu
dalam populasi mempunyai tingkat kebugaran yang berbeda-beda.
Tingkat kebugaran ini menentukan seberapa kuat untuk tetap bertahan
hidup dalam populasinya. Sebagian individu tetap bertahan hidup dan
sebagian lainnya mati.
Dalam teori ini dikenal adanya proses seleksi alam yang
mempertahankan individu dengan tingkat kebugaran yang tinggi saja
18
untuk tetap bertahan hidup. Contohnya, saat ini hanya dikenal hanya
dikenal jerapah yang berleher Panjang saja. Menurut teori ini pada
awalnya, terdapat jerapah yang berleher pendek tetapi karena
tantangan alam yang tidak dapat diatas, maka punahlah jerapah
berleher pendek. Dalam hal ini jerapah dengan leher Panjang
dikatakan mempunyai tingkat kebugaran yang tinggi. Jerapah-jerapah
tersebut terpilih secara alamiah dalam proses evolusi yang
berlangsung dari generai demi generasi.
Berikut ini adalah bahasan lebih lanjut tentang komponen-
komponen tersebut.
1. Inisialisasi Populasi, Proses pencarian solusi optimal dengan
algoritma genetika tidak dimulai dari suatu nilai awal
melainkan dari sekumpulan nilai awal yang disebut populasi.
Populasi awal sebagai daerah awal pencarian solusi optimal
dilakukan secara acak. Pada kebanyakan algoritma genetika,
panjang kromosom akan dilakukan secara acak. Setiap
individu atau kromosom tersusun atas urutan gen dari suatu
alphabet. Suatu alphabet dapat teridir dari binary digits (0 dan
1), floating point, integer, symbol – symbol seperti A, B, C,
dan seterusnya, atau juga berupa matriks dan lain sebagainya.
2. Fungsi Evaluasi, Fungsi fitness digunakan untuk mengukur
tingkat kebaikan atau kesesuaian (fitness) suatu solusi dengan
solusi yang dicari. Evaluasi dapat dilakukan berdasarkan
19
fitness value setiap individu. Fitness value setiap individu
(kromosom) berhubungan langsung dengan nilai fungsi
objektif.
3. Elitisme, Elitisme adalah suatu prosedur pengopian individu
agar individu yang bernilai fitness terbaik tidak hilang selama
proses evolusi. Suatu individu yang memiliki nilai fitness
terbaik belum pasti akan selalu terpilih. Hal ini disebabkan
karena proses penyeleksian dilakukan secaran random.
4. Seleksi Orang Tua, Pemilihan dua buah kromosom sebagai
orang tua yang akan dipindah silangkan dilakukan sesuai
dengan nilai fitnessnya. Semakin kecil nilai fitnessnya, maka
semakin besar peluangnya untuk menjadi orang tua. Ada
beberapa metode seleksi dari induk, antara lain Rank-based
fitness assignment, Roulette wheel selection, Stochastic
universal sampling, Local selection, Truncation selection,
Tournament selection. Metode seleksi yang digunakan adalah
roulette wheel.
5. Crossover (Pindah Silang), Crossover adalah proses untuk
menyilangkan dua kromosom sehingga membentuk kromosom
anak (offspring) yang diharapkan lebih baik dari pada
induknya. Crossover bertujuan menambah keanekaragaman
string dalam populasi dengan penyilangan antar-string yang
diperoleh dari sebelumnya. Prinsip dari crossover adalah
20
melakukan operasi (pertukaran, aritmatika) pada gen-gen yang
bersesuaian dari dua induk untuk menghasilkan individu baru.
Operator crossover ini bergantung pada representasi
kromosom yang dilakukan.
Gambar 2.1 Contoh Crossover
6. Mutasi, Mutasi merupakan proses mengubah nilai dari satu
atau beberapa gen dalam suatu kromosom. Individu yang telah
melewati proses seleksi dan crossover akan menghasilkan
individu baru (offspring) yang akan dimutasi untuk membantu
mempercepat terjadinya perbedaan individu pada populasi.
Mutasi berperan untuk menggantikan gen yang hilang dari
populasi akibat proses seleksi yang memungkinkan munculnya
kembali gen yang tidak muncul pada inisialisasi populasi.
Gambar 2.2 Contoh Mutasi
7. Penggantian Populasi, Prosedur penghapusan individu adalah
seperti penghapusan individu yang paling tua atau individu
yang memiliki nilai fitness paling tinggi. Penghapusan
individu bisa dilakukan pada orang tua saja atau pada semua
individu yang ada dalam populasi tersebut.
Parent 1 1 0 1 0 0 0 1 1
Parent 2 0 1 0 1 1 1 0 0
Anak 1 1 0 1 1 1 1 0 0
Anak 2 0 1 0 0 0 0 1 1
Kromosom awal 0 1 0 0 0 0 1 1
Mutasi 0 1 0 1 0 0 1 1
21
2.2.9 Struktur Dasar Algoritma Genetika
Kerangka kerja yang biasa digunakan dalam penerapan
Algortima Genetika untuk menyelesaikan suatu masalah optimasi.
Menurut Michalewicz (1998), keberhasilan algoritma genetika sangat
ditentukan oleh penentuan pernyataan masalah kedalam bentuk titik-
titik pencarian yang disebut dengan kromosom, serta pemilihan
operator-operator yang digunakan.
Apapun masalah optimasi yang akan diselesaikan dengan
algoritma genetika perlu dikodekan ke dalam kromosom secara cepat.
Hal ini disebabkan dalam proses komputasi yang sebenarnya,
kromosom-kromosom itulah yang akan diproses dalam algoritma
genetika. Proses ini dilakukan oleh operator-operator genetika, seperti
seleksi, penyilangan, dan mutase. Oleh karena setiap masalah
memerlukan pengkodean yang unik, maka penerapan operator-
operator genetika juga harus menyesuaikan dengan representasi
kromoson yang digunakan.
22
Gambar 2.3 Struktur Dasar Algoritma Genetika
2.2.10 Siklus Algoritma Genetika
Siklus dari Algoritma Genetika pertama kali dikenalkan oleh David
Goldberg, dimana gambaran siklus seperti gambar berikut :
Gambar 2.4 Siklus Algoritma Genetika Oleh David Goldberg
Siklus ini kemudian diperbaiki oleh beberapa ilmuwan yang
mengembangkan algoritma Genetika, yaitu Zbigniew Michalewicz
Masalah Optimasi :
Variable Masukan
Populasi:
Kromosom1, Kromosom2, kromosom Ukuran Populasi
Operator-Operator
Algoritma Genetika
Evaluasi
Seleksi Crossover
Mutasi
Parameter Algoritma
: ukuran populasi,
probabilitas penyilanga
nm probabilitas
mutasi
Penyelesaian Masalah :
Variable Keluaran Pengkodean P
en
gko
de
an
Fungsi
Fitness
23
dengan menambah operator Elitism dan membalik proses seleksi
setelah proses reproduksi.
Gambar 2.5 Siklus Algoritma Genetika yang diperbarui oleh Michalewicz
2.2.11 Pengertian Optimasi
Optimasi adalah proses menyelesaikan suatu masalah tertentu
supaya berada pada kondisi yang paling menguntungkan dari suatu
sudut pandang. Masalah yang harus diselesaikan berkaitan erat dengan
data-data yang dapat dinyatakan dalam satu atau beberapa variable.
Pengertian menguntungkan, biasanya mengenai pencarian nilai
minimum dan pencarian nilai maksimum, bergantung pada sudut
pandang yang digunakan. Secara singkat, menurut Haupt (2004)
optimasi adalah suatu proses yang berhubungan dengan penyeseuaian
masukan, pemilihan karakteristik peralatan, proses matematis dan
pengujian yang dlakukan untuk menemukan keluaran optimum.
2.2.12 Klasifikasi Optimasi
Proses optimasi dapat diklasifikasi menjadi beberapa kategori
yang membagi proses optimasi menjadi enam kategori (Haupt, 2004).
Pembagian tersebut tidak dapat dianggap sepenuhnya membagi-bagi
24
proses optimasi persis menjadi 6 kategori, karena setiap cabang saling
dapat terkait. Misalnya masalah optimasi dinamis dapat saling terkait
dengan kendala(constraint) atau tanpa kendala, melibatkan variable
yang diskret atau malar(continuous). Keenam kategori yang dimaksud
adalah :
Gambar 2.6 Klasifikasi Optimasi
1. Optimasi dengan cara trial and error berhubungan dengan
proses untuk menyeseuaikan nilai variable masukan yang
membuat perubahan keluaran tanpa pengetahuan yang banyak
mengenai prosesnya. Contoh sederhanya adalah ketika
mengatur kedudukan antenna supaya menghasilkan keluaran
suara dan gambar televisi yang optimum.
2. Optimasi satu dimensi dengan adalah optimasi yang
melibatkan sebuah variable sedangkan optimasi yang
OPTIMASI
fungsi Trial
&errosr
dengan
kendalai
Tanpa
kendala kontinyu Malar
dinamis
statis
Variable
tunggal
Multi
Variable
Pencarian
harga
optimum
Pencarian
acak
1
2
3
4
5
6
25
melibatkan banyak variable disebut optimasi multidimensi.
Proses optimasi menjadi bertambah sukar dengan
bertambahnya dimensi. Optimasi multidimensi dapat dianggap
sebagai rangkaian optimasi satu dimensi.
3. Optimasi dinamis mempunyai keluaran yang merupakan
fungsi waktu, sedangkan optimasi statis mempunyai keluaran
yang independent terhadap waktu. Contoh sederhananya
adalah optimasi rute yang harus ditempuh seorang karyawan
saat berangkat bekerja. Jika dilihat jaraknya saja maka optimsi
masalah ini merupakan optimasi statis.
4. Optimasi diskret adalah optimasi yang melibatkan variable
yang mempunyai sejumlah variasi nilai yang terbatas.
Sedangkan optimasi malar adalah optimasi yang banyak variasi
nilai variablenya tidak berhingga. Optimasi dikret juga dikenal
sebagai optimasi kombinatorial, karena penyelesaiannya terdiri
atas sejumlah kombinasi variable tertentu diantara semua nilai
variable yang mungkin. Adapun pencarian nilai minimum dari
suatu fungksi f(x) dalam interval x tertentu merupakan optimasi
malar.
5. Optimasi dengan kendala menggabungkan kesamaan variable
dan ketidaksamaan variable kedalam fungi objektif seangkan
optimasi tanpa kendala mengizikan variable mempunya nilai
berapapun juga.
26
6. Optimasi yang penyelesaiannya dicari secara acak disebut
optimasi acak. Optimasi yang penjelesannya dicari dari sebuah
variable awal terntentu disebut pencarian niai optimum.
Terdapat beberapa algoritma konvensional yang menggunakan
proses pencarian nilai optimum ini. Cara ii memang lebih cepat
daripada cara acak, tetapi sangat mudah untuk terjebak pada
nilai optimum local.
2.3 Teori Pemrograman
2.3.1 Pengertian Sistem
(Jogianto, 2006)Sistem adalah kumpulan dari elemen-elemen
yang berinteraksi untuk mencapai suatu tujuan tertentu. Sistem ini
menggambarkan suatu kejadian-kejadian dan kesatuan yang nyata,
seperti tempat, benda dan orang-orang yang betul-betul ada dan
terjadi.
2.3.2 Pengertian Informasi
Informasi bisa menjadi fungsi penting dalam membantu
mengurangi rasa cemas pada seseorang. Menurut pendapat
Notoatmodjo (2008) bahwa semakin banyak memiliki informasi dapat
memengaruhi atau menambah pengetahuan terhadap seseorang dan
dengan pengetahuan tersebut bisa menimbulkan kesadaran yang
akhirnya seseorang itu akan berperilaku sesuai dengan pengetahuan
yang dimilikinya.
27
(Jogianto, analisis dan desain SI, 2004)informasi adalah data yang
diolah menjadi bentuk yang lebih berguna bagi yang menerimanya.
2.3.3 XAMPP V3.2.2
XAMPP ialah perangkat lunak bebas yang mendukung banyak
sistem operasi, merupakan campuran dari beberapa program. Yang
mempunyai fungsi sebagai server yang berdiri sendiri (localhost),
yang terdiri dari program MySQL database, Apache HTTP Server, dan
penerjemah ditulis dalam bahasa pemrograman PHP dan Perl.
Berikut ini penjelasan tentang Web server Apache,
PHP,MySQL, PhpMyAdmin dan Perl:
1. Apache, tugas utama apache adalah menghasilkan halaman
web yang benar kepada peminta, berdasarkan kode PHP
yang dituliskan oleh pembuat halaman web. Jika diperlukan
juga berdasarkan kode PHP yang dituliskan, maka dapat
saja suatu database diakses terlebih dahulu (misalnya dalam
MySQL) untuk mendukung halaman web yang dihasilkan.
2. PHP, bahasa pemrograman PHP merupakan bahasa
pemrograman untuk mebuat web yang bersifat server-side
scripting. PHP memungkinkan kita untuk membuat
halaman web yang bersifat dinamis.
3. MySQL, perkembangannya disebut SQL yang merupakan
kepanjangan dari Structured Query Language. SQL
merupakan bahasa terstruktur yang khusus digunakan
28
untuk mengolah database. SQL pertama kali didefinisikan
oleh American National Standards Institute (ANSI) pada
tahun 1986. MySQL adalah sebuah sistem manajemen
database yang bersifat open source. MySQL adalah
pasangan serasi dari PHP. MySQL dibuat dan
dikembangkan oleh MySQL AB yang berada di Swedia.
MySQL dapat digunakan untuk membuat dan mengola
database beserta isinya. Kita dapat memanfaatkan MySQL
untuk menambahkan, mengubah dan menghapus data yang
berada dalam database. MySQL merupakan sistem
manajemen database yang bersifat at relational. Artinya
data-data yang dikelola dalam database akan diletakkan
pada beberapa tabel yang terpisah sehingga manipulasi data
akan menjadi jauh lebih cepat. MySQL dapat digunakan
untuk mengelola database mulai dari yang kecil sampai
dengan yang sangat besar. MySQL juga dapat menjalankan
perintah-perintah Structured Query Language (SQL) untuk
mengelola database-database yang ada di dalamnya.
Hingga kini, MySQL sudah berkembang hingga versi 5.
MySQL 5 sudah mendukung trigger untuk memudahkan
pengelolaan tabel dalam database.
4. PhpMyAdmin, Pengelolaan database dengan MYSQL
harus dilakukan dengan mengetikkan baris-baris perintah
29
yang sesuai (command line) untuk setiap maksud tertentu.
Banyak sekali perangkat lunak yang dapat dimanfaatkan
untuk mengelola data base dalam MySQL, salah satunya
adalah phpMyAdmin. Dengan phpMyAdmin kita dapat
membuat tabel, mengisi data dan lain-lain dengan mudah
tanpa harus hafal perintahnya.
5. Perl adalah bahasa pemrograman untuk segala keperluan,
dikembangkan pertama kali oleh Larry Wall di mesin Unix.
Perl dirilis pertama kali pada tanggal 18 Desember 1987
ditandai dengan keluarnya Perl 1. Pada versi-versi
selanjutnya, Perl tersedia pula untuk berbagai sistem
operasi varian Unix (SunOS, Linux, BSD, HP-UX), juga
tersedia untuk sistem operasi seperti DOS, Windows,
PowerPC, BeOS, VMS, EBCDIC, dan PocketPC.
Dukungan terhadap pemrograman berbasis obyek (Object
Oriented Programming/OOP) ditambahkan pada Perl 5,
yang pertama kali dirilis pada tanggal 31 Juli 1993.
2.4 UML (Unified Modelling Language)
Menurut Nugroho (2010:6), UML (Unified Modeling Language)
adalah ‘bahasa’ pemodelan untuk sistem atau perangkat lunak yang
berparadigma ‘berorientasi objek”. Pemodelan (modelling) sesungguhnya
30
digunakan untuk penyederhanaan permasalahan-permasalahan yang
kompleks sedemikian rupa sehingga lebih mudah dipelajari dan dipahami.
2.4.1 Use Case
Use Case mendeskripsikan sebuah interaksi antara satu atau lebih
aktor dengan sistem informasi yang akan dibuat (Shalahuddin, 2013,
p. 133).
Daftar Simbol Use Case
No Simbol Nama Deskripsi
1 Use Case Fungsionalitas yang disediakan sistem sebagai unit-unit yang saling bertukar pesan antar unit dan aktor.
2
Aktor / Actor
Orang, proses, atau sistem lain yang berinteraksi dengan sistem informasi yang akan dibuat diluar sistem informasi
3
Asosiasi / association
Komunikasi antar aktor dan Use Case yang berpartisipasi
4
<<extend>>
Extensi / extend
Relasi Use Case tambahan ke sebuah Use Case dimana Use Case yang ditambah dapat berdiri sendiri walau tanpa Use Case tambahan
5
Generalisasi /
generalization
Hubungan generalisasi dan spesialisasi antara dua buah Use Case yang mana fungsi yang satu lebih umum dari yang lainnya.
6 <<include>>
Include
Relasi Use Case tambahan ke sebuah Use Case dimana Use Case yang ditambahkan memerlukan Use Case ini untuk menjalankan fungsinya
Sumber: (Shalahuddin, 2013, pp. 156-158)
Use Case
31
2.4.2 Class Diagram
(Shalahuddin, 2013, p. 141)class diagram menggambarkan
struktur sistem dari segi pendefinisian kelas-kelas yang akan dibuat
untuk membangun sistem. Diagram kelas dibuat agar pembuat
program atau programmer membuat kelas-kelas sesuai rancangan di
dalam diagram kelas agar antara dokumentasi perancangan dan
perangkat lunak sinkron. Adapun simbol-simbol yang digunakan
dalam class diagram adalah sebagai berikut:
Daftar Simbol Class Diagram
NO Gambar Nama Deskripsi
1
Class Kelas pada struktur
sistem.
2
Interface
Sama dengan konsep interface dalam pemrograman berorientasi objek.
3
Assosiation
Relasi antar kelas dengan makna umum, asosiasi biasanya juga disertai dengan multiplicity
4
Directed
Assosiation
Relasi antar kelas dengan makna kelas yang satu digunakan oleh kelas yang lain.
5
Generalization
Relasi antar kelas dengan makna generalisasi spesialisasi (umum khusus).
6 Dependency Relasi antar kelas dengan makna kebergantungan antar kelas.
7
Aggregation
Relasi antar kelas dengan makna kebergantungan antar kelas
Sumber: (Shalahuddin, 2013, pp. 146-147)
32
2.4.3 Activity Diagram
Activity diagram menggambarkan workflow (aliran kerja) atau
aktivitas dari sebuah sistem atau proses bisnis atau menu yang ada pada
perangkat lunak. Diagram aktivitas menggambarkan aktivitas sistem bukan
apa yang dilakukan aktor, jadi aktivitas yang dapat dilakukan oleh sistem.
Daftar Simbol Activity Diagram
No Simbol Nama Deskripsi
1
Status Awal
Status awal aktivitas pada
sebuah diagram aktivitas
memiliki sebuah status awal
2
Aktivitas
Aktivitas
Aktivitas yang dilakukan
sistem, aktivitas biasanya
diawali dengan kata kerja
3
Percabangan
/Decision
Asosiasi percabangan dimana
jika ada pilihan aktivitas lebih
dari satu.
4
Penggabungan
/join
Asosiasi penggabungan dimana
lebih dari satu aktivitas
digabungkan menjadi satu.
5
Status Akhir
Status akhir yang dilakukan
sistem, sebuah diagram
aktivitas memiliki sebuah
status akhir.
Sumber: (Shalahuddin, 2013, p. 161)
33
2.4.4 Sequence Diagram
(Shalahuddin, 2013), Diagram sequence menggambarkan kelakuan
objek pada use case dengan mendeskripsikan waktu hidup objek dan
message yang dikirimkan dan diterima antar objek. Sequence diagram
menunjukkan urutan event kejadian dalam suatu waktu. Komponen
sequence diagram terdiri atas obyek yang dituliskan dengan kotak segi
empat bernama. Message diwakili oleh garis dengan tanda panah dan
waktu yang ditunjukkan dengan progress vertikal. Simbolsimbol yang
digunakan dalam sequence diagram adalah:
Daftar Simbol Sequence Diagram
No Simbol Nama Deskripsi
1
An actor
Digunakan Untuk
Menggambarkan User atau
Pengguna
2
Object
Lifeline
Objek Entity antar muka yang
saling berinteraksi
3
Boundary Class
Menggambarkan Sebuah
Gambaran Dari Form
4
Entity Class
Menggambarkan Hubungan
yang akan dilakukan
5
Control Class
Menggambarkan tempat mulai
dan berakhirnya massage
6
A massage
Menggambarkan Pengiriman
Pesan
Sumber: (Shalahuddin, 2013, pp. 162-163)
34
BAB III
METODOLOGI PENELITIAN
3.1 Porfil Perusahaan
PT.PPA Jakarta adalah sebuah perusahan yang bergerak dibidang
kontraktor pertambang dengan visi menjadi kontraktor nomor 3 di
Indonesia. Misi dari PT.PPA yaitu memberikan layanan bernilai tambah
kepada pelanggan dengan memberikan keunggulannya dalam
penambangan permukaan dan pemindahan tanah. Adapun struktur
organisasi PT.PPA Adalah sebagai berikut
35
3.2 Analisa Kebutuhan sistem
Dalam penelitian ini digunakan metode eksperimen dengan kebutuhan
seperti: Pengumpulan data, Pengolahan awal data, Metode yang diusulkan
serta pengujian metode. Dalam penelitian ini akan dibuat suatu sistem
Optimasi Pengendalian persediaan Spare part menggunakan Algoritma
Genetika untuk meningkatkan produktivitas pada PT.PPA Jakarta.
Guna menunjang ekserimen dalam penelitian ini dibutuhkan satu unit
notebook dengan spesifikasi sebagai berikut:
1. Perangkat keras (Hardware)
a) Processor Intel Core i3-350M
b) Hard disk Drive 500GB
c) Memori 2GB
2. Perangkat lunak (Software)
a) Sistem operasi Windows 10
b) XAMPP
c) Notepad ++
d) Bahasa Pemrograman PHP
3.3 Perancangan Penelitian
Metode penelitian yang dilakukan adalah metode penelitian
eksperimen, dengan tahapan sebagai berikut:
a. Pengumpulan Data
Pada tahap ini ditentukan data yang akan diproses. Mencari data
yang tersedia, memperoleh data tambahan yang dibutuhkan,
36
mengintegrasikan semua data ke dalam data set, termasuk variabel
yang diperlukan dalam proses.
b. Pengolahan Data Awal
Di tahap ini dilakukan penyeleksian data dan ditransformasikan ke
bentuk yang diinginkan sehingga dapat dilakukan persiapan dalam
pembuatan model.
c. Metode Yang Diusulkan
Pada tahap ini data dianalisis, dikelompokkan variabel mana yang
berhubungan dengan satu sama lainnya. Setelah data dianalisis lalu
diterapkan model-model yang sesuai dengan jenis data. Pembagian
data ke dalam data latihan (training data).
d. Pengujian Metode
Pada tahap ini model yang diusulkan akan diuji untuk melihat hasil
berupa rule yang akan dimanfaatkan dalam pengambilan
keputusan.
3.4 Teknik Analisis
3.4.1 Pengumpulan Data
Sumber data yang digunakan untuk penelitian ini adalah data
sekunder. Data sekunder merupakan sumber data penelitian yang
diperoleh secara tidak langsung melalui media perantara yaitu data
permintaan, dan harga spare part tahun 2017.
37
3.4.2 Pengolahan Data Awal
Tahap pengolahan data awal yaitu menentukan variable yang
didapatkan dari sumber data penelitian antara lain:
a. Data Permintaan
b. Merumuskan dengan metode EOQ
c. Optimasi hasil EOQ menggunakan algoritma genetika
3.4.3 Metode yang Diusulkan
Dalam penelitian ini metode yang diusulkan untuk
menentukan pengendalian spare part adalah menggunakan algoritma
genetika, metode ini diharapkan mampu memaksimalkan pemesanan
spare part, berikut alur diagram dari algoritma genetika yang
menunjukan sebuah alur proses perhitungan algoritma genetika seperti
pada Gambar 3.1.
38
Gambar 3.1 Diagram Alur Proses Algoritma Genetika
Input inisialisasi Populasi
Generasi =0
Set Generasi=1
Evaluasi
Kromosom berdasarkan fitness
Seleksi dengan Roulette wheel
Crossover
Mutasi
Elitism
Mencapai
Stopping
Solusi Optimal
YA
TIDAK
Generasi =Generasi +1
Start
End
39
BAB IV
ANALISIS HASIL DAN PEMBAHASAN
4.1 Perancangan Sistem
Untuk perancangan sistem dalam penelitian ini menggunakan metode
berorientasi objek dimana analisa kebutuhan dan perancangan sistem akan
digambarkan melalui UML (Unified Modelling Language) diagram.
4.1.1 Use Case Diagram
4.1.1.1 Use Case Admin
Gambar 4.1 Use Case Admin
40
Tabel 4.1 deskripsi Use Case
Kebutuhan Sistem Aktor Nama Use Case
Sistem yang dibuat mempunyai halaman Masuk/Login
Admin, User Masuk
Sistem menyediaakan halaman Master utuk menambah kateogri, barang, pengguna, cabang
Admin Master
Sistem menyediakan halaman
Transaksi untuk melakukan,
Permintaan, hitung EOQ, dan
hitung GA
Admin, User Transaksi
Sistem menyediakan halaman
Laporan untuk melihat data
Laporan permintaan,
Aktor, User Laporan
Sistem mempunyai halaman
untuk Keluar / Logout
Aktor, User Keluar
4.1.2 Activity Diagram
4.1.2.1 Activity Diagram Login
Gambar 4.2 Activity Diagram Login
41
Pada Gambar4.2 menjelaskan alur untuk admin masuk ke
sistem. Admin memasukan kode pengguna dan password, setelah kode
pengguna terverivikasi sistem mengarahkan ke tampilan halaman
utama.
4.1.2.2 Activity Diagram Menambah Kategori
Gambar 4.3 Activity Diagram Menambah Kategori
Pada Gambar 4.3 menjelaskan tentang alur bagaimana admin
menambah kategori yaitu dengan langkah awal masuk ke master data,
42
admin pilih kategori kemudian menginput nama, kode kategori
kemudian dan menyimpan, sistem melakukan penyimpanan data dan
menampilkannya di halaman entry kategori.
4.1.2.3 Activity Diagram Menambah Barang
Gambar 4.4 Activity Diagram Menambah Barang
Pada Gambar 4.4 menjelaskan tentang alur bagaimana admin
menambah barang yaitu dengan langkah awal masuk ke master data,
admin pilih barang kemudian mengimput barang, jumlah stok dan
43
menyimpan, sistem melakukan penyimpanan data dan
menampilkannya di halaman entry barang.
4.1.2.4 Activity Diagram Menambah Pengguna
Gambar 4.5 Activity Diagram Menambah Pengguna
Pada Gambar 4.5 menjelaskan tentang alur bagaimana admin
menambah pengguna yaitu dengan langkah awal masuk ke master
data, admin memilih pengguna kemudian menginput nama pengguna
baru dan menyimpan, sistem melakukan penyimpanan data dan
menampilkannya di halaman entry pengguna.
44
4.1.2.5 Activity Diagram Menghitung EOQ
Gambar 4.6 Activity Diagram Menghitung EOQ
Pada Gambar 4.6 menjelaskan tentang alur bagaimana admin
menghitung EOQ yaitu dengan langkah awal masuk ke Transaksi,
admin memilih menghitung EOQ kemudian menginput biaya
pengiriman barang dan menyimpan, sistem melakukan penyimpanan
data dan menampilkannya di halaman menghitung EOQ.
45
4.1.2.6 Activity Diagram Menghitung Algoritma genetika
Gambar 4.7 Activity Diagram Menghitung GA
Pada Gambar 4.7 menjelaskan tentang alur bagaimana admin
menghitung Algoritma Genetika yaitu dengan langkah awal masuk ke
Transaksi, admin memilih menghitung Algoritma Genetika kemudian
menginput jumlah populasi, input mutasi, crossover, dan max gen
kemudian menyimpan, sistem melakukan perhitungan algoritma
genetika.
46
4.1.3 Class Diagram
Gambar 4.8 Class diagram
Pada Gambar 4.8 menjelaskan tentang sekumpulan objek,
atribut, dan sifat(operasi), relasi antar objek dan semantic yang umum.
Class diagram memberikan visualisasi struktur kelas dari suatu
sistem. Disamping itu class diagram bisa memberikan pandangan
global atas sebuah sistem. Hal tersebut tercermin dari class-class yang
ada dan relasinya satu dengan yang lainnya. Itulah sebabnya diagram
kelas menjadi diagram yang paling popular di UML. Satzinger
(2011:28).
47
4.1.4 Sequence Diagram
4.1.4.1 Sequence Diagram Login
Gambar4.9 Sequence Diagram login
Pada Gambar 4.9 menjelaskan tentang proses login, yaitu
admin memasukkan username dan password pada form login. Jika
kode pengguna dan password yang dimasukkan pada form login valid
maka akan langsung diarahkan ke halaman utama, jika username dan
password yang dimasukkan tidak valid maka muncul pesan kesalahan
kode pengguna dan password tidak salah.
48
4.1.4.2 Sequence Diagram Diagram Kategori
Gambar4.10 Sequence Diagram Menu Kategori
Pada Gambar 4.10 menjelaskan tentang proses setelah admin
masuk ke menu login sistem menampikan menu utama, kemudian
admin melakukan proses tambah kategori dan sistem akan menyimpan
datanya di kategori.
49
4.2 Rancangan Prototype Aplikasi
4.2.1 Rancangan Form Login
Gambar 4.11 Form Login
Pada gambar 4.11 menjelaskan tentang rancangan form Login
4.2.2 Prototype Menu Kategori
Gambar 4.12 Prototype Kategori
Pada gambar4.12 menjelaskan tentang rancangan interface kategori
barang
50
4.2.3 Prototype Menu Barang
Gambar 4.13 Prototype menu barang
Pada gambar 4.13 merupakan rancangan interface proses menambahan
barang
4.2.4 Prototype Menu Pengguna
Gambar 4.14 Prototype Pengguna
Pada gambar 4.14 merupakan rancangan interface proses menambahan
pengguna.
51
4.2.5 Prototype Menu Cabang
Gambar 4.15 Prototype Menu Cabang
Pada gambar 4.15 merupakan rancangan interface proses menambahan
cabang.
4.2.6 Prototype Permintaan Barang
Gambar 4.16 Prototype permintaan menu barang
Pada gambar 4.16 merupakan rancangan interface untuk melihat
permintaan barang, yang kemudian admin menghitung menggunakan
EOQ.
52
4.2.7 Prototype Menu Hitung EOQ
Gambar 4.17 Prototype menu hitung EOQ
Pada gambar 4.17 merupakan rancangan interface untuk menghitung
permintaan ekonomis menggunakan EOQ.
4.2.8 Prototype Menu Hitung GA
Gambar 4.18 Prototype menu hitung GA
Pada gambar 4.18 merupakan rancangan interface untuk menghitung
GA.
53
4.3 Rancangan Basis Data
Penelitian ini menggunakan basis data MySQL, adapun rancangan
basis data pada penelitian ini adalah sebagai berikut:
Tabel 4.2 Pengguna
Nama Field Type Data Ukuran Keterangan
Kode_pengguna varchar 5 Primary key
Kata_sandi Text field
Nama_pengguna Varchar 30 Field
Telepon_Pengguna Varchar 15 Field
Jabatan_Penguna Vharchar 20 Field
Tabel 4.3 Kategori
Nama Field Type Data Ukuran Keterangan
Kode_kategori varchar 5 Primary key
Nama_kategori Varchar 50 field
Tabel 4.4 Barang
Nama Field Type Data Ukuran Keterangan
Kode_barang varchar 7 Primary key
Kode_kategori Varchar 5 Field
Nama_barang Varchar 30 Field
Satuan Varchar 20 Field
harga Int 5 Field
Stock Int 8 field
54
Tabel 4.5 Cabang
Nama Field Type Data Ukuran Keterangan
Kode_cabang varchar 5 Primary key
Kode_pengguna Varchar 5 Field
Nama_cabang Varchar 20 Field
Telepon_cabang Varchar 15 Field
Alamat_cabang text Field
divisi varchar 15 Field
Tabel 4.6 Permintaan
Nama Field Type Data Ukuran Keterangan
Kode_permintaan varchar 5 Primary key
Kode_cabang Varchar 50 Field
Tanggal_permintaan Date Field
Tabel 4.7 Hitung EOQ
Nama Field Type Data Ukuran Keterangan
Kode_eoq varchar 10 Primary key
Kode_barang Varchar 7 Primary key
Harga_barang Int 10 Field
Biaya_pemesanan Int 10 Field
Total_pemesanan Int 10 Field
Tanggal_hitung Date Field
55
4.4 Tampilan Sistem
4.4.1 Halaman Login
Gambar 4.19 Halaman Login
4.4.2 Halaman Utama
Gambar 4.20 Halaman Utama
56
4.4.3 Halaman Kategori
Gambar 4.21 Halaman Kategori
4.4.4 Halaman Barang
Gambar4.22 Halaman Barang
57
4.4.5 Halaman Pengguna
Gambar 4.23 Halaman pengguna
4.4.6 Halaman Cabang
Gambar 4.24 Halaman Cabang
58
4.4.7 Halaman Permintaan Barang
Gambar 4.25 Halaman Permintaan barang
4.4.8 Halaman EOQ
Gambar 4.26 Halaman EOQ
59
4.4.9 Halaman Algoritma Genetika
Gambar 4.27 Halaman Algoritma Genetika
4.4.10 Halaman Laporan Permintaan
Gambar 4.28 Halaman laporan permintaan
60
4.5 Pengumpulan Data
Pada Sub Bab ini berisi mengenai data data yang diperoleh dari
perusahaan berupa data hitoris permintaan harga item.
4.5.1 Data Pemakaian
Data Pemakaian adalah data penggunaan persediaan yang
digunakan untuk perbaikan atau perawatan unit alat berat yang
dilakukan oleh department plant. Data pemakaian yang digunakan
adalah data pemakaian spare part pada periode tahun 2017 di site MPP.
Tabel 4.8 Data Pemakaian Spare part
Description JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC TOTAL AVGSOLAR NON VALUE 408209 388545 469609 432337 459660 361978 456758 449170 409354 60305 0 0 3895925 324660,0OLI SHELL RIMULA R2 10W 0 0 1966 3227 2448 1216 3679 1874 2947 10 0 0 17367 1447,0OLI SHELL RIMULA R2 30 0 1196 1766 2639 2134 2283 1985 2172 2662 254 0 0 17091 1424,0OLI SHELL RIMULA R3 15W-40 0 0 1261 1479 1401 789 1246 1562 1572 0 0 0 9310 776,0SUPER COOLANT, KOMATSU SYCG-AF-NACDM 255 555 673 560 548 702 1549 1273 687 289 0 0 7091 591,0GREASE ALMAKES DE LUBE AM-SLGP-D180 610 883 800 633 641 408 917 587 559 4 0 0 6042 504,0OLI SHELL RIMULA R2 30 1019 1343 439 0 0 0 0 0 0 0 0 0 2801 233,0OLI SHELL RIMULA R3 15W-40 883 1176 655 0 0 0 0 0 0 0 0 0 2714 226,0OLI SHELL RIMULA R2 10W 820 1279 237 0 0 0 0 0 0 0 0 0 2336 195,0SARUNG TANGAN KAIN BINTIK, 171 142 184 67 54 118 197 245 313 39 0 0 1530 128,0RIM CONDITIONER EON 776 Literan 110 60 0 0 210 0 160 130 0 0 0 0 670 56,0DIESEL ENGINE OIL SAE 15W40 API Cl-4 0 0 0 0 320 330 0 0 0 0 0 0 650 54,0OLI SHELL SPIRAX S2 A 85W-140 0 0 0 71 9 0 125 0 150 55 0 0 410 34,0OIL FILTER 18 18 42 39 36 24 33 39 30 3 0 0 282 24,0AIR ACCU TAMBAH, 31 6 0 19 89 35 46 12 12 0 0 0 250 21,0FUEL FILTER 16 20 28 28 24 16 32 24 20 0 0 0 208 17,0BOLT, END BIT GD705 26 0 0 0 62 5 24 54 12 0 0 0 183 15,0MOBIL GREASE XHP 222 45 0 0 15 60 15 15 15 0 15 0 0 180 15,0NUT CUTTING 7 0 15 5 44 5 24 59 5 0 0 0 164 14,0MAJUN, 13 22 18 3 5 10 21 17 23 24 0 0 156 13,0PANAOIL GOTRA SAE 85W-140 0 17 105 0 0 0 0 0 0 0 0 0 122 10,0O-RING 0 10 25 32 0 20 0 0 20 0 0 0 107 9,0FUEL FILTER 8 9 14 14 12 8 16 12 10 0 0 0 103 9,0CONTACT CLEANER, CRC (PEMBERSIH KABEL) 12 15 7 9 3 5 20 18 11 1 0 0 101 8,0WASHER 0 4 0 1 4 0 4 19 64 0 0 0 96 8,0O-RING 6 6 12 12 10 12 9 13 12 0 0 0 92 8,0WD-40, 10 8 3 7 4 11 12 24 8 3 0 0 90 8,0NUT RODA 1 4 1 1 1 2 4 20 56 0 0 0 90 8,0WASHER 16 0 8 8 0 0 0 54 0 0 0 0 86 7,0BOLT NUT WASHER, 6 X 50 0 4 1 28 22 2 7 6 10 0 0 0 80 7,0CRUISER ADVANCE PLUS 15W-40 46 31 0 0 0 0 0 0 0 0 0 0 77 6,0LOCK WASHER 0 0 0 17 0 5 24 15 0 12 0 0 73 6,0O-RING 6 4 8 8 7 10 6 9 11 0 0 0 69 6,0OIL FILTER 7 6 8 5 6 8 7 6 15 0 0 0 68 6,0
61
4.5.2 Pemilihan Item Spare Part
Langkah pertama yang dilakukan adalah melakukan pemilihan
item. Item kelas yang dipilih adalah Oli Shell Rimula dan Oil Filter
dengan Rank A karena mempunyai consumption rate yang tinggi dan
harus tersediaa digudang untuk perawatan unit alat berat.
Tabel 4.9 Daftar spare part oli terpilih
4.5.3 Data Permintaan Spare Part terpilih
Berikut ini merupakan 7 item spare part oli yang telah dipilih.
Data permintaan oli tersebut merupakan data permintaan selama satu
tahun, yaitu mulai januari- desember 2017. Selanjutnya data akan
digunakan sebagai input dalam perhitungan parameter. Data
permintaan oli dan filter dapat dilihat pada table dibawah ini.
Tabel 4.10 Data permintaan oli terpilih
No. Material Description1 1400000003 OLI SHELL RIMULA R2 10W2 1400000009 OLI SHELL RIMULA R2 303 1400000008 OLI SHELL RIMULA R3 15W-404 1400000037 OLI SHELL RIMULA R2 305 1400000036 OLI SHELL RIMULA R3 15W-406 1400000031 OLI SHELL RIMULA R2 10W7 600-211-1340 OIL FILTER
No. Material Description JAN FEB MAR APR MAY JUN JUL AUG SEP OCTNOVDEC TOTAL AVG RANK1 1400000003 OLI SHELL RIMULA R2 10W 0 0 1966 3227 2448 1216 3679 1874 2947 10 0 0 17367 1447,0 A2 1400000009 OLI SHELL RIMULA R2 30 0 1196 1766 2639 2134 2283 1985 2172 2662 254 0 0 17091 1424,0 A3 1400000008 OLI SHELL RIMULA R3 15W-40 0 0 1261 1479 1401 789 1246 1562 1572 0 0 0 9310 776,0 A4 1400000037 OLI SHELL RIMULA R2 30 1019 1343 439 0 0 0 0 0 0 0 0 0 2801 233,0 A5 1400000036 OLI SHELL RIMULA R3 15W-40 883 1176 655 0 0 0 0 0 0 0 0 0 2714 226,0 A6 1400000031 OLI SHELL RIMULA R2 10W 820 1279 237 0 0 0 0 0 0 0 0 0 2336 195,0 A
62
4.5.4 Data Harga Spare part
Berikut ini merupakan data harga masing-masing spare part oli
dan filter tahun 2017 yang diusulkan. Adapun daftar harga masing
masing item spare part oli dapat diihat pada table 4.11
Tabel 4.11 Data harga spare part oli terpilih
4.5.5 Data Biaya Spare Part
Data biaya spare part meliputi biaya pemesanan dan biaya
penyimpanan spare part.
4.5.5.1 Biaya Pemesanan
Biaya pemesanan adalah semua biaya dari persiapan
pemesanan sampai barang yang dipesan dating. Biaya
pemesanan meliputi biaya internet, fax, telepon, biaya
administrasi dan pemindahan barang dengan biaya rata rata
sekitar Rp.150.000/pesanan.
4.5.5.2 Biaya Penyimpanan
Biaya penyimpanan merupaka biaya yang dikeluarkan oleh
perusahaan untuk merawat persediaan spare part mesin di
dalam gudang. Pada PT.PPA, biaya penyimpanan tiap item
spare part 10% dari harga beli satuan pertahunnya. Biaya
penyimpanan dapat dilihat pada tabel berikut.
No. Material Description Total Permintaan Harga1 1400000003 OLI SHELL RIMULA R2 10W 17367 21.732Rp 2 1400000009 OLI SHELL RIMULA R2 30 17091 23.016Rp 3 1400000008 OLI SHELL RIMULA R3 15W-40 9310 23.647Rp 4 1400000037 OLI SHELL RIMULA R2 30 2801 24.360Rp 5 1400000036 OLI SHELL RIMULA R3 15W-40 2714 24.880Rp 6 1400000031 OLI SHELL RIMULA R2 10W 2336 22.652Rp
63
Tabel 4.12 Perhitungan biaya penyimpanan
4.5.6 Merumuskan Komponen EOQ
Langkah pertama yang harus dilakukan adalah merumuskan
komponen-komponen biaya yang digunakan untuk biaya pemesanan
dan biaya pembelian
Tabel 4.13 Merumuskan Komponen EOQ
Permintaan Biaya Simpan Biaya pesan
17367 2173.2 150.000
17091 2301.6 150.000
9310 2364.7 150.000
2810 2436 150.000
2714 2488 150.000
2336 2265 150.000
4.5.7 Analisis Persediaan Menggunakan Metode EOQ
Adapun analisis perhitungan menggunakan metode EOQ untuk
mendapatkan hasil yang optimal adalah sebagai berikut:
EOQ = √匝 ×三 ×傘皿×�
A. Menghitung kuantitas optimal pemesanan Oli Shell Rimula R2 10 w
Tabel 4.14 Data Permintaan OLI SHELL RIMULA R2 10W 2017
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC TOTAL
0 0 1966 3227 2448 1216 3679 1874 2947 10 0 0 17367
Description Harga Beli Satuan Persentase Biaya Simpan Biaya Simpan per unit X Y (Per unit/ tahun) X x Y (Per unit/ bulan X x Y /12
OLI SHELL RIMULA R2 10W 21.732Rp LTR 10% 2.173Rp 181Rp OLI SHELL RIMULA R2 30 23.016Rp LTR 10% 2.302Rp 192Rp OLI SHELL RIMULA R3 15W-40 23.647Rp LTR 10% 2.365Rp 197Rp OLI SHELL RIMULA R2 30 24.360Rp LTR 10% 2.436Rp 203Rp OLI SHELL RIMULA R3 15W-40 24.880Rp LTR 10% 2.488Rp 207Rp OLI SHELL RIMULA R2 10W 22.652Rp LTR 10% 2.265Rp 189Rp
64
EOQ=Qopt=√態 � 怠胎戴滞胎 � 怠泰待.待待待態怠胎戴態 � 怠待% = √泰.態怠待.怠待待.待待待態怠胎戴.態 = √に.ぬひば.はのぬ.どなねには =
1548.364 ≅ 1548
B. Menghitung kuantitas optimal pemesanan Oli Shell Rimula R2 30
Tabel 4.15 Data permintaan OLI SHELL RIMULA R2 30 2017
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC TOTAL
0 1196 1766 2639 2134 2283 1985 2172 2662 254 0 0 17091
EOQ= Qopt =√態 � 怠胎待苔怠 � 怠泰待.待待待態戴待怠滞 � 怠待% = √泰.怠態胎.戴待待.待待待態戴待怠.滞 = √に.ににば.ばなな.なのばねの =
1492.552 ≅ 1492
C. Menghitung kuantitas optimal pemesanan Oli Shell Rimula R3 15W-40
Tabel 4.16 Data permintaan OLI SHELL RIMULA R3 15W-40 2017
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC TOTAL
0 0 1261 1479 1401 789 1246 1562 1572 0 0 0 9310
EOQ= Qopt =√態 � 苔戴怠待 � 怠泰待.待待待態戴滞替胎 � 怠待% = √態.胎苔戴.待待待.待待待態戴滞替.胎 = √な.なぱな.なにに.ぬねなな=
1086.795 ≅ 1086
D. Menghitung kuantitas optimal pemesanan Oli Shell Rimula R2 30
Tabel 4.17 Data permintaan OLI SHELL RIMULA R2 30 2017
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC TOTAL
1019 1343 439 0 0 0 0 0 0 0 0 0 2801
EOQ= Qopt =√態 � 態腿怠待 � 怠泰待.待待待態替戴滞待 � 怠待% = √腿替戴.待待待.待待待態替戴滞 = √ぬねはどのひ.ななぬぬ =
588.2679 ≅ 588
65
E. Menghitung kuantitas optimal pemesanan Oli Shell Rimula R3 15W-40
Tabel 4.18 Data permintaan OLI SHELL RIMULA R3 15W-40 2017
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC TOTAL
883 1176 655 0 0 0 0 0 0 0 0 0 2714
EOQ= Qopt =√態 � 態胎怠替 � 怠泰待.待待待態替腿腿待� 怠待% = √腿怠替.態待待.待待待態替腿腿 = √ぬにばにのど,ぱどにぱ
=570.0583 ≅ 570
F. Menghitung kuantitas optimal pemesanan Oli Shell Rimula R2 10
Tabel 4.19 Data permintaan OLI SHELL RIMULA R2 10W2017
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC TOTAL
820 1279 237 0 0 0 0 0 0 0 0 0 2336
EOQ= Qopt =√態 � 態戴戴滞 � 怠泰待.待待待態態滞泰態 � 怠待% = √胎待待.腿待待.待待待態態滞泰 = √ぬどひねどぬ.ひばぬの =
556,2409 ≅ 556
4.5.8 Menghitung Total Cost Yang Dikeluarkan
Adapun rumus untuk menghitung total cost tahunan adalah sebagai
berikut:
TIC = 傘 岾拶晒峇 + �察 岾晒匝峇
D = besar laju permintaan atau demand rate dalam unit per
tahun
S = biaya setiap kali pemesanan atau ordering cost
C = biaya per unit dalam dolar per unit
I = biaya pengelolaan atau carrying cost adalah presentase
terhadap nilai inventory per tahun
Q = Ukuran paket pesanan atau lot size dalam unit
TC = Biaya total inventory per tahun
66
A. Menghitung Total Cost Oli Shell Rimula R2 10
TC = 150.000 岾層挿惣掃挿層捜想掻 峇 + 宋, 層宋 � 匝層. 挿惣匝 岾層捜想掻匝 峇
TC = 150.000(11) + 2.173 (774)
TC = 1.650.000 + 1.681.902
TC = 3.331.902
B. Menghitung Total Cost Oli Shell Rimula R2 30
TC = 150.000 岾層挿宋操層層想操匝 峇 + 宋, 層宋 � 匝惣. 宋層掃 岾層想操匝匝 峇
TC = 150.000(11) + 2.301 (746)
TC = 1.650.000 + 1.716.546 = 3.366.546
C. Menghitung Total Cost Oli Shell Rimula R3 15W-40
TC = 150.000 岾操惣層宋層宋掻掃峇 + 宋, 層宋 � 匝惣. 掃想挿 岾層宋掻掃匝 峇
TC = 150.000(8.5) + 2.364 (543)
TC = 1.275.000 + 1.283.652 = 2.558.652
D. Menghitung Total Cost Oli Shell Rimula R2 30
TC = 150.000 岾匝掻層宋捜掻掻 峇 + 宋, 層宋 � 匝想. 惣掃宋 岾捜掻掻匝 峇
TC = 150.000(4.7) + 2.436 (294)
TC = 705.000 + 716.184 = 1.421.184
67
E. Menghitung Total Cost Oli Shell Rimula R3 15W-40
TC = 150.000 岾匝挿層想捜挿宋 峇 + 宋, 層宋 � 匝想. 掻掻宋 岾捜挿宋匝 峇
TC = 150.000(4.7) + 2.488 (285)
TC = 705.000 + 709.080 = 1.414.080
F. Menghitung Total Cost Oli Shell Rimula R2 10
TC = 150.000 岾匝惣惣掃捜捜掃 峇 + 宋, 層宋 � 匝匝. 掃捜匝 岾捜捜掃匝 峇
TC = 150.000(4) + 2.265 (278)
TC = 600.000 + 629.670 = 1.229.670
Tabel 4.20 hasil Nilai EOQ dan TC
Permintaan Biaya
Simpan
Biaya
pesan
EOQ TC
17367 2173 150.000 1548 3.331.902
17091 2302 150.000 1492 3.366.546
9310 2365 150.000 1086 2.558.652
2810 2436 150.000 588 1.421.184
2714 2488 150.000 570 1.414.080
2336 2265 150.000 556 1.229.670
4.5.9 Frekuensi Pemesanan
Frekuensi pemesanan adalah suatu cara yang digunakan untuk
menghitung berapa kali pemesanan yang dilakukan pada tiap
68
tahunnya. Adapun rumus frekuensi pemesanan dibawah ini menurut
Deanta dalam Rifqi (2012:40) dirumuskan sebagai berikut:
I = 拶撮鮫晒
Dimana:
I = frekuensi pemesanan dalam satu tahun
D = jumlah kebutuhan bahan selama satu tahun
EOQ = jumlah pembelian bahan sekali pesan
a. Menghitung frekuensi pemesanan Oli Shell Rimula R2 10 w
I = 拶撮鮫晒 =
怠胎戴滞胎なのねぱ = 11.21899 = 11
b. Menghitung frekuensi pemesanan Oli Shell Rimula R2 30
I = 拶撮鮫晒 =
怠胎待苔怠なねひに = 11.45509 = 11
c. Menghitung frekuensi pemesanan Oli Shell Rimula R3 15W-
40
I = 拶撮鮫晒 =
苔戴怠待などぱは = 8.57274 = 8
d. Menghitung frekuensi pemesanan Oli Shell Rimula R2 30
I = 拶撮鮫晒 =
態腿待怠のぱぱ = 4.76360 = 4
e. Menghitung frekuensi pemesanan Oli Shell Rimula R3 15W-
40
I = 拶撮鮫晒 =
態胎怠替のばど = 4.76140 = 4
69
f. Menghitung frekuensi pemesanan Oli Shell Rimula R2 10
I = 拶撮鮫晒 =
態戴戴滞ののは = 4.20143 = 4
4.5.10 Penentuan Lead Time
Setiap melakukan pemesanan membutuhkan waktu mulai dari
proses pemesanan hingga barang diterima. Waktu yang
dibutuhkan untuk pemesanan oli yaitu 7 hari.
4.5.11 Titik Pemesanan Ulang
Titik pemesanan ulang dilakukan sebelum tingkat persediaan
habis dan diadakan pemesanan ulang agar kedatangan dan
penerimaan barang yang pesan tepat pada waktunya. Rumus yang
digunakan untuk menentukan tingkat persediaan saat melakukan
pemesanan kembali.
R = 拶� × �
Keterangan :
D = Permintaan kebutuhan per periode waktu (1 tahun)
t = hari per tahun
l = waktu tunggu
a. Menghitung titik pemesanan ulang Oli shell rimula R2 10W
R = �� × 健 =
怠胎戴滞胎戴滞泰 × ば = ぬぬぬ.どはのばぬ
b. Menghitung titik pemesanan ulang Oli shell rimula R2 30
R = �� × 健 =
怠胎待苔怠戴滞泰 × ば = ぬにば.ばばにはど
c. Menghitung titik pemesanan ulang Oli shell rimula R3-
15W-40
R = �� × 健 =
苔戴怠待戴滞泰 × ば = なばぱ.のねばひね
d. Menghitung titik pemesanan ulang Oli shell rimula R2 30
R = �� × 健 =
態腿待怠戴滞泰 × ば = のぬ.ばなばぱど
70
e. Menghitung titik pemesanan ulang Oli shell rimula R3-15
W-40
R = �� × 健 =
態胎怠替戴滞泰 × ば = のに.どねひぬな
f. Menghitung titik pemesanan ulang Oli shell rimula R2 10W
R = �� × 健 =
態戴戴滞戴滞泰 × ば = ねね.ぱ
4.6 Penentuan Parameter
Parameter adalah parameter control algoritma genetika, yaitu ukuran
populasi (popsize), peluang crossover (pc) dan peluang mutasi (pm).
Rekomendasi untuk menentukan nilai parameter:
1. Untuk permasalahan yang memiliki kawasan solusi cukup besar,
De Jong merekomendasikan nilai parameter: (popsize; pc; pm) =
(50;0,6;0,001)
2. Bila rata-rata fitness setiap generasi digunakan sebagai indikator,
maka Grefenstette merekomendasikan: (popsize; pc; pm) =
(30;0,95;0,01)
3. Bila fitness dari individu terbaik dipantau pada setiap generasi,
maka usulannya adalah: (popsize; pc; pm) = (80;0,45;0,01)
4. Ukuran populasi sebaiknya tidak lebih kecil dari 30, untuk
sembarang jenis permasalahan.
4.6.1 Inisialisasi Populasi
Selanjutnya setelah mendapatkan nilai EOQ awal sebagai
batasan, kemudian dilakukan optimasi EOQ dengan
menggunakan algoritma genetika. Pada tahap ini populasi awal
dibangkitkan dengan cara merandom populasi. Pengkodean gen
menggunakan skema real-number-encoding dimana gen yang
digunakan merupakan bilangan real positif. Gen yang digunakan
dalam penelitian ini adalah total biaya dari masing masing item
Jumlah kromosom (N)=50, Probabilitas Pindah Silang
71
(Crossover) = 0.8 dan setelah itu didapatkan populasi untuk
inisialisasi awal sebagai berikut:
Tabel 4.21 Pembentukan Kromosom secara Random
Q1 Q2 Q3 Q4 Q5 Q6Kromosom 1 3.331.902 3.366.546 2.558.652 1.421.184 1.414.080 1.229.670
Kromosom 2 3.331.852 3.366.596 2.558.602 1.421.234 1.414.030 1.229.720 Kromosom 3 3.331.937 3.366.511 2.558.687 1.421.149 1.414.115 1.229.635 Kromosom 4 3.331.837 3.366.411 2.558.587 1.421.049 1.414.015 1.229.535 Kromosom 5 3.331.712 3.366.286 2.558.712 1.420.924 1.414.140 1.229.410 Kromosom 6 3.331.847 3.366.151 2.558.847 1.420.789 1.414.275 1.229.545 Kromosom 7 3.331.697 3.366.001 2.558.697 1.420.939 1.414.425 1.229.695 Kromosom 8 3.331.522 3.365.826 2.558.872 1.421.114 1.414.250 1.229.520 Kromosom 9 3.331.722 3.366.026 2.558.672 1.421.314 1.414.450 1.229.320 Kromosom 10 3.331.507 3.365.811 2.558.887 1.421.099 1.414.235 1.229.105 Kromosom 11 3.331.732 3.366.036 2.559.112 1.421.324 1.414.460 1.229.330 Kromosom 12 3.331.982 3.365.786 2.558.862 1.421.074 1.414.210 1.229.580 Kromosom 13 3.331.697 3.365.501 2.558.577 1.421.359 1.414.495 1.229.865 Kromosom 14 3.331.997 3.365.801 2.558.877 1.421.059 1.414.195 1.230.165 Kromosom 15 3.331.672 3.366.126 2.558.552 1.420.734 1.414.520 1.229.840 Kromosom 16 3.331.322 3.365.776 2.558.202 1.421.084 1.414.870 1.230.190 Kromosom 17 3.331.707 3.366.161 2.558.587 1.421.469 1.415.255 1.230.575 Kromosom 18 3.331.307 3.366.561 2.558.187 1.421.869 1.414.855 1.230.975 Kromosom 19 3.331.732 3.366.136 2.558.612 1.421.444 1.415.280 1.230.550 Kromosom 20 3.331.282 3.365.686 2.558.162 1.421.894 1.415.730 1.231.000 Kromosom 21 3.331.757 3.366.161 2.557.687 1.421.419 1.416.205 1.230.525 Kromosom 22 3.331.257 3.365.661 2.558.187 1.421.919 1.415.705 1.230.025 Kromosom 23 3.330.732 3.365.136 2.557.662 1.422.444 1.416.230 1.229.500 Kromosom 24 3.331.282 3.365.686 2.558.212 1.421.894 1.416.780 1.228.950 Kromosom 25 3.330.697 3.365.101 2.558.797 1.422.479 1.416.195 1.228.365 Kromosom 26 3.331.312 3.365.716 2.559.412 1.421.864 1.415.580 1.228.980 Kromosom 27 3.330.677 3.366.351 2.560.047 1.421.229 1.416.215 1.228.345 Kromosom 28 3.330.002 3.367.026 2.560.722 1.420.554 1.416.890 1.229.020 Kromosom 29 3.329.287 3.366.311 2.560.007 1.421.269 1.416.175 1.228.305 Kromosom 30 3.328.537 3.367.061 2.560.757 1.420.519 1.415.425 1.227.555 Kromosom 31 3.327.802 3.367.796 2.560.022 1.421.254 1.414.690 1.228.290 Kromosom 32 3.328.587 3.367.011 2.560.807 1.422.039 1.413.905 1.227.505 Kromosom 33 3.329.402 3.366.196 2.559.992 1.422.854 1.414.720 1.228.320 Kromosom 34 3.328.577 3.367.021 2.560.817 1.422.029 1.413.895 1.227.495 Kromosom 35 3.327.727 3.366.171 2.559.967 1.421.179 1.413.045 1.226.645 Kromosom 36 3.326.862 3.367.036 2.560.832 1.422.044 1.413.910 1.227.510 Kromosom 37 3.327.747 3.366.151 2.559.947 1.421.159 1.413.025 1.226.625 Kromosom 38 3.328.672 3.367.076 2.560.872 1.420.234 1.412.100 1.225.700 Kromosom 39 3.327.757 3.367.991 2.561.787 1.419.319 1.411.185 1.224.785 Kromosom 40 3.326.807 3.367.041 2.560.837 1.420.269 1.412.135 1.225.735 Kromosom 41 3.327.792 3.368.026 2.561.822 1.419.284 1.411.150 1.226.720 Kromosom 42 3.328.767 3.369.001 2.560.847 1.418.309 1.412.125 1.227.695 Kromosom 43 3.327.767 3.370.001 2.561.847 1.417.309 1.411.125 1.226.695 Kromosom 44 3.326.742 3.368.976 2.562.872 1.416.284 1.412.150 1.225.670 Kromosom 45 3.327.757 3.369.991 2.561.857 1.417.299 1.411.135 1.224.655 Kromosom 46 3.326.722 3.368.956 2.560.822 1.418.334 1.410.100 1.225.690 Kromosom 47 3.325.672 3.367.906 2.561.872 1.419.384 1.409.050 1.224.640 Kromosom 48 3.326.737 3.366.841 2.562.937 1.418.319 1.410.115 1.223.575 Kromosom 49 3.327.822 3.367.926 2.561.852 1.419.404 1.411.200 1.224.660 Kromosom 50 3.326.747 3.366.851 2.560.777 1.418.329 1.410.125 1.223.585
72
4.6.2 Fungsi Fitnees
Adapun fungsi fitnees pada penelitian ini adalah fungsi fitness
untuk meminimumkan TC. Penentuan nilai fitness didapat dari
penjumlah gen di setiap kromosom:
Tabel 4.22 Nilai Fitness masing-masing kromosom
Fitness 1 13.322.034 Fitness 2 13.322.034 Fitness 3 13.322.034 Fitness 4 13.321.434 Fitness 5 13.321.184 Fitness 6 13.321.454 Fitness 7 13.321.454 Fitness 8 13.321.104 Fitness 9 13.321.504 Fitness 10 13.320.644 Fitness 11 13.321.994 Fitness 12 13.321.494 Fitness 13 13.321.494 Fitness 14 13.322.094 Fitness 15 13.321.444 Fitness 16 13.321.444 Fitness 17 13.323.754 Fitness 18 13.323.754 Fitness 19 13.323.754 Fitness 20 13.323.754 Fitness 21 13.323.754 Fitness 22 13.322.754 Fitness 23 13.321.704 Fitness 24 13.322.804 Fitness 25 13.321.634
Fitness 26 13.322.864 Fitness 27 13.322.864 Fitness 28 13.324.214 Fitness 29 13.321.354 Fitness 30 13.319.854 Fitness 31 13.319.854 Fitness 32 13.319.854 Fitness 33 13.321.484 Fitness 34 13.319.834 Fitness 35 13.314.734 Fitness 36 13.318.194 Fitness 37 13.314.654 Fitness 38 13.314.654 Fitness 39 13.312.824 Fitness 40 13.312.824 Fitness 41 13.314.794 Fitness 42 13.316.744 Fitness 43 13.314.744 Fitness 44 13.312.694 Fitness 45 13.312.694 Fitness 46 13.310.624 Fitness 47 13.308.524 Fitness 48 13.308.524 Fitness 49 13.312.864 Fitness 50 13.306.414
73
Diperoleh nilai fitness tertinggi pada pada populasi generasi
pertama dihasilkan oleh kromosom 28 yaitu sebesar
13.324.214 dan nilai fitness terkecil pada kemudian setelah
diketahui nilai fitness masing masing kromosom, langkah
selanjutnya adalah menentukan seleksi. Dari table 4.14
diketahui nilai fitness terbaik yaitu
4.6.3 Elitisme
Pencatatan untuk populasi generasi pertama pada tabel berikut:
Tabel 4.23 Elitisme Generasi Pertama
Nilai Fitness Maksimum 13.324.214
Urutan Kromosom dengan
nilai Fitness maksimum
28
Urutan generasi dengan
fitness maksimum
1
Nilai fitness maksimum sementara adalah 13.324.214 yang
merupakan fungsi fitness dari kromosom ke-28 generasi pertama,
dengan rincian pembelian optimum sementara Oli Shell Rimula
R2 10W 153,2 L, Oli Shell Rimula R2 30 146,2 L, Oli Shell
Rimula R3 15W-40 108,2 L, Oli Shell Rimula R2 30 58,3 L, Oli
Shell Rimula R3 15W-40 56,9 L, Oli Shell Rimula R2 10W 54,2
L. yang harus dikeluarkan setiap kali pemesanan adalah
Rp3.330.002, Rp3.367.026, Rp2.560.722, Rp1.420.554,
Rp1.416.890, Rp1.229.020
74
4.6.4 Proses Seleksi
Proses seleksi yaitu memilih anggota populasi tertentu untuk
menjadi orang tua(parent) dengan probabilitas sama dengan total
fitness populasi. Pada seleksi ini, orangtua dipilih berdasarkan
fitness mereka. Lebih baik suatu individu lebih besar kesempatan
terpilih. Langkah pertama adalah dengan menghitung total nilai
fitness (∑ �倦)
Total Nilai fitness 岫∑ �倦岻 = 13.322.034 + 13.322.034 +
13.322.034 + 13.321.434 + 13.321.184 + 13.321.454 +
13.321.454 + 13.321.104 + 13.321.504 + 13.320.664 +
13.321.994 + 13.321.494 + 13.321.494 + 13.322.094 +
13.321.444 + 13.322.444 + 13.323.754 + 13.323.745 +
13.323.745 + 13.323.745 + 13.323.745 + 13.322.754 +
13.321.704 + 13.322.804 + 13.321.634 + 13.322.864 +
13.322.864 + 13.324.214 + 13.321.354 + 13.319.854 +
13.319.854 + 13.319.854 + 13.321.484 + 13.319.834 +
13.314.734 + 13.318.194 + 13.314.654 + 13.314.654 +
13.312.824 + 13.312.824 + 13.314.794 + 13.316.744 +
13.314.744 + 13.312.694 + 13.312.694 + 13.310.624 +
13.308.524 + 13.308.524 + 13.312.864 + 13.306.414 =
665.951.190
Dengan probablitas seleksi (Pk)
Pk= ��∑ ��
kromosom 1
Pk= 怠戴.戴態態.待戴替 滞滞泰.苔泰怠.怠苔待 = 0,02000452
Kromosom 2
Pk= 怠戴.戴態態.待戴替 滞滞泰.苔泰怠.怠苔待 = 0,02000452
Kromsom 3
Pk= 怠戴.戴態態.待戴替 滞滞泰.苔泰怠.怠苔待 = 0,02000452
75
Kromosom 4
Pk= 怠戴.戴態怠.替戴替 滞滞泰.苔泰怠.怠苔待 = 0,02000362
Kromosom 5
Pk= 怠戴.戴態怠.怠腿替 滞滞泰.苔泰怠.怠苔待 = 0,02000324
Kromosom 6
Pk= 怠戴.戴態怠.替泰替 滞滞泰.苔泰怠.怠苔待 = 0,02000365
Kromosom 7
Pk= 怠戴.戴態怠.替泰替 滞滞泰.苔泰怠.怠苔待 = 0,02000365
Kromosom 8
Pk= 怠戴.戴態怠.怠待替 滞滞泰.苔泰怠.怠苔待 = 0,02000312
Kromosom 9
Pk= 怠戴.戴態怠.泰待替 滞滞泰.苔泰怠.怠苔待 = 0,02000372
Kromosom 10
Pk= 怠戴.戴態待.滞滞替 滞滞泰.苔泰怠.怠苔待 = 0,02000243
Kromosom 11
Pk= 怠戴.戴態怠.苔苔替 滞滞泰.苔泰怠.怠苔待 = 0,02000446
Kromosom 12
Pk= 怠戴.戴態怠.替苔替 滞滞泰.苔泰怠.怠苔待 = 0,02000371
Kromosom 13
Pk= 怠戴.戴態怠.替苔替 滞滞泰.苔泰怠.怠苔待 = 0,02000371
Kromosom 14
Pk= 怠戴.戴態態.待苔替 滞滞泰.苔泰怠.怠苔待 = 0,02000461
Kromosom 15
Pk= 怠戴.戴態怠.替替替 滞滞泰.苔泰怠.怠苔待 = 0,02000363
Kromosom 16
Pk= 怠戴.戴態態.替替替 滞滞泰.苔泰怠.怠苔待 = 0,02000363
76
Kromosom 17
Pk= 怠戴.戴態戴.胎泰替 滞滞泰.苔泰怠.怠苔待 = 0,02000710
Kromosom 18
Pk= 怠戴.戴態戴.胎替泰滞滞泰.苔泰怠.怠苔待 = 0,02000710
Kromosom 19
Pk= 怠戴.戴態戴.胎替泰 滞滞泰.苔泰怠.怠苔待 = 0,02000710
Kromosom 20
Pk= 怠戴.戴態戴.胎替泰 滞滞泰.苔泰怠.怠苔待 = 0,02000710
Kromosom 21
Pk= 怠戴.戴態戴.胎替泰 滞滞泰.苔泰怠.怠苔待 = 0,02000710
Kromosom 22
Pk= 怠戴.戴態態.胎泰替 滞滞泰.苔泰怠.怠苔待 = 0,02000560
Kromosom 23
Pk= 怠戴.戴態怠.胎待替 滞滞泰.苔泰怠.怠苔待 = 0,02000402
Kromosom 24
Pk= 怠戴.戴態態.腿待替 滞滞泰.苔泰怠.怠苔待 = 0,02000568
Kromosom 25
Pk= 怠戴.戴態怠.滞戴替 滞滞泰.苔泰怠.怠苔待 = 0,02000392
Kromosom 26
Pk= 怠戴.戴態態.腿滞替 滞滞泰.苔泰怠.怠苔待 = 0,02000577
Kromosom 27
Pk= 怠戴.戴態態.腿滞替 滞滞泰.苔泰怠.怠苔待 = 0,02000577
Kromosom 28
Pk= 怠戴.戴態替.態怠替 滞滞泰.苔泰怠.怠苔待 = 0,02000779
Kromosom 29
Pk= 怠戴.戴態怠.戴泰替 滞滞泰.苔泰怠.怠苔待 = 0,02000350
77
Kromosom 30
Pk= 怠戴.戴怠苔.腿泰替 滞滞泰.苔泰怠.怠苔待 = 0,02000125
Kromosom 31
Pk= 怠戴.戴怠苔.腿泰替 滞滞泰.苔泰怠.怠苔待 = 0,02000125
Kromosom 32
Pk= 怠戴.戴怠苔.腿泰替 滞滞泰.苔泰怠.怠苔待 = 0,02000125
Kromosom 33
Pk= 怠戴.戴態怠.替腿替 滞滞泰.苔泰怠.怠苔待 = 0,02000369
Kromosom 34
Pk= 怠戴.戴怠苔.腿戴替 滞滞泰.苔泰怠.怠苔待 = 0,02000122
Kromosom 35
Pk= 怠戴.戴怠替.胎戴替 滞滞泰.苔泰怠.怠苔待 = 0,01999356
Kromosom 36
Pk= 怠戴.戴怠腿.怠苔替 滞滞泰.苔泰怠.怠苔待 = 0,01999875
Kromosom 37
Pk= 怠戴.戴怠替.滞泰替 滞滞泰.苔泰怠.怠苔待 = 0,01999344
Kromosom 38
Pk= 怠戴.戴怠替.滞泰替 滞滞泰.苔泰怠.怠苔待 = 0,01999344
Kromosom 39
Pk= 怠戴.戴怠態.腿態替 滞滞泰.苔泰怠.怠苔待 = 0,01999069
Kromosom 40
Pk= 怠戴.戴怠態.腿態替 滞滞泰.苔泰怠.怠苔待 = 0,01999069
Kromosom 41
Pk= 怠戴.戴怠替.胎苔替 滞滞泰.苔泰怠.怠苔待 = 0,01999365
Kromosom 42
Pk= 怠戴.戴怠滞.胎替替 滞滞泰.苔泰怠.怠苔待 = 0,01999658
Kromosom 43
78
Pk= 怠戴.戴怠替.胎替替 滞滞泰.苔泰怠.怠苔待 = 0,01999357
Kromosom 44
Pk= 怠戴.戴怠態.滞苔替 滞滞泰.苔泰怠.怠苔待 = 0,01999050
Kromosom 45
Pk= 怠戴.戴怠態.滞苔替 滞滞泰.苔泰怠.怠苔待 = 0,01999050
Kromosom 46
Pk= 怠戴.戴怠待.滞態替 滞滞泰.苔泰怠.怠苔待 = 0,01998739
Kromosom 47
Pk= 怠戴.戴待腿.泰態替 滞滞泰.苔泰怠.怠苔待 = 0,01998423
Kromosom 48
Pk= 怠戴.戴待腿.泰態替 滞滞泰.苔泰怠.怠苔待 = 0,01998423
Kromosom 49
Pk= 怠戴.戴怠態.腿滞替 滞滞泰.苔泰怠.怠苔待 = 0,01999075
Kromosom 50
Pk= 怠戴.戴待滞.替怠替 滞滞泰.苔泰怠.怠苔待 = 0,01998106
Setelah mendapatkan nilai Fitness relatif (Fr) langkah
berikutnya yaitu mencari nilai Fitness komulatif (Fk)
fr1 = fk1 = 0,02000452
fk2 = fk1+ fr2 = 0,02000452 + 0,02000452
= 0,04000904
fk3 = fk2 + fr3 = 0,04000904 + 0,02000452
= 0,06001356
fk4 = fk3 + fr4 = 0,06001356 + 0,02000362
= 0,08001718
fk5 = fk4 + fr5 = 0,08001718 + 0,02000324
= 0,10002042
79
fk6 = fk5 + fr6 = 0,10002042 + 0,02000365
= 0,12002407
fk7 = fk6 + fr7 = 0,12002407 + 0,02000365
= 0,14002772
fk8 = fk7 + fr8 = 0,14002772 + 0,02000312
= 0,16003085
fk9 = fk8 + fr9 =0,16003085 + 0,02000372
= 0,18003457
fk10 = fk9 + fr10 = 0,18003457 + 0,02000243
= 0,20003700
fk11 = fk10 + fr11 = 0,20003700 + 0,02000446
= 0,22004146
fk12 = fk11 + fr12 = 0,22004146 + 0,02000371
=0,24004517
fk13 = fk12 + fr13 = 0,24004517 + 0,02000371
=0,26004888
fk14 = fk13 + fr14 = 0,26004888 + 0,02000461
=0,28005349
fk15 = fk14 + fr15 = 0,28005349 + 0,02000363
=0,30005713
fk16 = fk15 + fr16 = 0,30005713 + 0,02000363
=0,32006076
fk17 = fk16 + fr17 = 0,32006076 + 0,02000710
= 0,34006786
fk18 = fk17 + fr18 = 0,34006786 + 0,02000710
= 0,36007497
fk19 = fk18 + fr19 = 0,36007497 + 0,02000710
= 0,38008207
fk20 = fk19 + fr20 = 0,38008207 + 0,02000710
= 0,40008917
80
fk21 = fk20 + fr21 =0,40008917 +0,02000710
= 0,42009627
fk22 = fk21 + fr22 = 0,42009627 + 0,02000560
= 0,44010188
fk23 = fk22 + fr23 = 0,44010188 + 0,02000402
= 0,46010590
fk24 = fk23 + fr24 = 0,46010590 + 0,02000568
= 0,48011158
fk25 = fk24 + fr25 = 0,48011158 + 0,02000392
= 0,50011550
fk26 = fk25 + fr26 = 0,50011550 + 0,02000577
= 0,52012126
fk27 = fk26 + fr27=0,52012126 + 0,02000577
= 0,54012703
fk28 = fk227 + fr28 = 0,54012703 +0,02000779
=0,56013482
fk29 = fk29 + fr29 = 0,56013482 + 0,02000350
= 0,58013832
fk30 = fk329 + fr30 =0,58013832 + 0,02000125
= 0,60013957
fk31 = fk30 + fr31 = 0,60013957 + 0,02000125
= 0,62014082
fk32 = fk31 + fr32 = 0,62014082+0,02000125
=0,64014206
fk33 = fk32 + fr33 =0,64014206 + 0,02000369
=0,66014576
fk34 = fk33 + fr34 =0,66014576 +0,02000122
= 0,68014697
fk35 = fk34 + fr35 = 0,68014697 +0,01999356
= 0,70014053
81
fk36 = fk35 + fr36 = 0,70014053 + 0,01999875
=0,72013929
fk37 = fk36 + fr37 =0,72013929 + 0,01999344
= 0,74013272
fk38 = fk37 + fr38 = 0,74013272 +0,01999344
= 0,76012616
fk39 = fk38 + fr39 = 0,76012616 + 0,01999069
= 0,78011685
fk40 = fk39 + fr40 = 0,78011685 + 0,01999069
=0,80010754
fk41 = fk40 + fr41 = 0,80010754 + 0,01999365
= 0,82010119
fk42 = fk41 + fr42 =0,82010119 + 0,01999658
= 0,84009777
fk43 = fk42 + fr43 = 0,84009777 + 0,01999357
=0,86009134
fk44 = fk43 + fr44 =0,86009134 + 0,01999050
= 0,88008184
fk45 = fk44 + fr45 = 0,88008184 + 0,01999050
= 0,90007233
fk46 = fk45 + fr46 =0,90007233 + 0,01998739
= 0,92005972
fk47 = fk46 + fr47 = 0,92005972 + 0,01998423
= 0,94004395
fk48 = fk47 + fr48 = 0,94004395 + 0,01998423
= 0,96002818
fk49 = fk48 + fr49 =0,96002818 + 0,01999075
= 0,98001894
fk50 = fk49 + fr50 = 0,98001894 + 0,01998106
= 1,00000000
82
Tabel 4.24 Nilai probabilitas seleksi
Dari tabel diatas nilai dari Kromosom 28 memiliki nilai
fitnes yang paling besar, dengan demikian peluang kromosom
28 untuk terpilih menjadi orangtua sebesar 0,02000779
Kromosom Nilai Fitness Probabilitas Seleksi fk RANK1 13.322.034 0,02000452 0,02000452 12 2 13.322.034 0,02000452 0,04000904 13 3 13.322.034 0,02000452 0,06001356 14 4 13.321.434 0,02000362 0,08001718 26 5 13.321.184 0,02000324 0,10002042 28 6 13.321.454 0,02000365 0,12002407 22 7 13.321.454 0,02000365 0,14002772 23 8 13.321.104 0,02000312 0,16003085 29 9 13.321.504 0,02000372 0,18003457 18
10 13.320.644 0,02000243 0,20003700 30 11 13.321.994 0,02000446 0,22004146 15 12 13.321.494 0,02000371 0,24004517 19 13 13.321.494 0,02000371 0,26004888 20 14 13.322.094 0,02000461 0,28005349 11 15 13.321.444 0,02000363 0,30005713 24 16 13.321.444 0,02000363 0,32006076 25 17 13.323.754 0,02000710 0,34006786 2 18 13.323.754 0,02000710 0,36007497 3 19 13.323.754 0,02000710 0,38008207 4 20 13.323.754 0,02000710 0,40008917 5 21 13.323.754 0,02000710 0,42009627 6 22 13.322.754 0,02000560 0,44010188 10 23 13.321.704 0,02000402 0,46010590 16 24 13.322.804 0,02000568 0,48011158 9 25 13.321.634 0,02000392 0,50011550 17 26 13.322.864 0,02000577 0,52012126 7 27 13.322.864 0,02000577 0,54012703 8 28 13.324.214 0,02000779 0,56013482 1 29 13.321.354 0,02000350 0,58013832 27 30 13.319.854 0,02000125 0,60013957 31 31 13.319.854 0,02000125 0,62014082 32 32 13.319.854 0,02000125 0,64014206 33 33 13.321.484 0,02000369 0,66014576 21 34 13.319.834 0,02000122 0,68014697 34 35 13.314.734 0,01999356 0,70014053 39 36 13.318.194 0,01999875 0,72013929 35 37 13.314.654 0,01999344 0,74013272 40 38 13.314.654 0,01999344 0,76012616 41 39 13.312.824 0,01999069 0,78011685 43 40 13.312.824 0,01999069 0,80010754 44 41 13.314.794 0,01999365 0,82010119 37 42 13.316.744 0,01999658 0,84009777 36 43 13.314.744 0,01999357 0,86009134 38 44 13.312.694 0,01999050 0,88008184 45 45 13.312.694 0,01999050 0,90007233 46 46 13.310.624 0,01998739 0,92005972 47 47 13.308.524 0,01998423 0,94004395 48 48 13.308.524 0,01998423 0,96002818 49 49 13.312.864 0,01999075 0,98001894 42 50 13.306.414 0,01998106 1,00000000 50
83
sedangkan nilai kromosom 17, 18,19, 20 dan kromosom 21
memiliki peluang sebesar 0,02000710
4.6.5 Pemilihan Crossover
Menurut George F. Luger dan William A. Stubblefield dalam
buku Artificial Intelegence Structures and Strategies For Complex
Promblem Solving. Kekuatan dari algoritma genetik ialah pada
kemampuan pencarian mereka dalam pindah silang, dimana
algoritma genetik menerapkan mempertahankan beberapa solusi
terbaik, dan menghilangkan solusi yang tidak bagus.
Probabilitias Crossover / Pc yang digunakan pada pebelitian
ini adalah sebesar 0.8 yang berarti 80% dari total kromosom
mengalami pindah silang, maka dibangkitkan bilangan acak [0,1]
sebanyak 50. Dari Tabel 4.25 bahwa kromosom pertama
merupakan induk R (0.9624) < Pc (0.8) merupakan bukan induk
karena nilai R lebih besar dari Pc sehingga bisa diperoleh bahwa
terdapat 42 kromosom induk. Dengan demikian terdapat 21
pasangan kromosom yang akan dikenai operator penyilangan.
84
Tabel 4.25 Pemilihan Induk Penyilangan
Kromosom R Crossover PC Kategori1 0.9624 0.8 Bukan Induk2 0.2584 0.8 Induk3 0.7655 0.8 Induk4 0.7129 0.8 Induk5 0.6667 0.8 Induk6 0.0947 0.8 Induk7 0.5252 0.8 Induk8 0.1669 0.8 Induk9 0.6477 0.8 Induk
10 0.8144 0.8 Bukan Induk11 0.8747 0.8 Bukan Induk12 0.5006 0.8 Induk13 0.8829 0.8 Bukan Induk14 0.4954 0.8 Induk15 0.7484 0.8 Induk16 0.2830 0.8 Induk17 0.7645 0.8 Induk18 0.2291 0.8 Induk19 0.4016 0.8 Induk20 0.9898 0.8 Bukan Induk21 0.0328 0.8 Induk22 0.2605 0.8 Induk23 0.6763 0.8 Induk24 0.6311 0.8 Induk25 0.8260 0.8 Bukan Induk26 0.7511 0.8 Induk27 0.6907 0.8 Induk28 0.0933 0.8 Induk29 0.3527 0.8 Induk30 0.6490 0.8 Induk31 0.0288 0.8 Induk32 0.5871 0.8 Induk33 0.2851 0.8 Induk34 0.0851 0.8 Induk35 0.5142 0.8 Induk36 0.3656 0.8 Induk37 0.1205 0.8 Induk38 0.4943 0.8 Induk39 0.0062 0.8 Induk40 0.5898 0.8 Induk41 0.4393 0.8 Induk42 0.0036 0.8 Induk43 0.1105 0.8 Induk44 0.8701 0.8 Bukan Induk45 0.6564 0.8 Induk46 0.8323 0.8 Bukan Induk47 0.6879 0.8 Induk48 0.0259 0.8 Induk49 0.6327 0.8 Induk50 0.6884 0.8 Induk
85
Berikut adalah ke-21 pasangan kromosom induk:
Penyilangan dilakukan dengan pindah silang satu titik (One
Note Point). Titik crossover iyalah titik terjadi pertukaran gen
antar dua individu orangtua yang terpilih secara acak. Untuk
populasi generasi pertama pada penelitian ini itik potong
ditentukan pada gen ke-1.
Tabel 4.26 Induk Kromosom 2 dan 3 yang akan di Crossover
Tabel 4.27 Induk Kromosom 4 dan 5 yang akan di Crossover
Tabel 4.28 Induk Kromosom 6 dan 7 yang akan di Crossover
2 4 6 8 12 15 17 19 22 243 5 7 9 14 16 18 21 23 26
27 29 31 33 35 37 39 41 43 4728 30 32 34 36 38 40 42 45 48
4950
Q1 Q2 Q3 Q4 Q5 Q6induk 2 3331852 3366596 2558602 1421234 1414030 1.229.720induk 3 3331937 3366511 2558687 1421149 1414115 1.229.635anak 2 3331937 3366596 2558602 1421234 1414030 1.229.720anak 3 3331852 3366511 2558687 1421149 1414115 1.229.635
Q1 Q2 Q3 Q4 Q5 Q6induk 4 3331837 3366411 2558587 1421049 1414015 1.229.535induk 5 3331712 3366286 2558712 1420924 1414140 1.229.410anak 4 3331712 3366411 2558587 1421049 1414015 1.229.535anak 5 3331837 3366286 2558712 1420924 1414140 1.229.410
Q1 Q2 Q3 Q4 Q5 Q6induk 6 3331847 3366151 2558847 1420789 1414275 1.229.545induk 7 3331697 3366001 2558697 1420939 1414425 1.229.695anak 6 3331697 3366151 2558847 1420789 1414275 1.229.545anak 7 3331847 3366001 2558697 1420939 1414425 1.229.695
86
Tabel 4.29 Induk Kromosom 8 dan 9 yang akan di Crossover
Tabel 4.30 Induk Kromosom 12 dan 14 yang akan di Crossover
Tabel 4.31 Induk Kromosom 15 dan 16 yang akan di Crossover
Tabel 4.32 Induk Kromosom 17 dan 18 yang akan di Crossover
Tabel 4.33 Induk Kromosom 19 dan 21 yang akan di Crossover
Q1 Q2 Q3 Q4 Q5 Q6induk 8 3331522 3365826 2558872 1421114 1414250 1.229.520induk 9 3331722 3366026 2558672 1421314 1414450 1.229.320anak 8 3331722 3365826 2558872 1421114 1414250 1.229.520anak 9 3331522 3366026 2558672 1421314 1414450 1.229.320
Q1 Q2 Q3 Q4 Q5 Q6induk 12 3331982 3365786 2558862 1421074 1414210 1229580induk 14 3331997 3365801 2558877 1421059 1414195 1230165anak 12 3331997 3365786 2558862 1421074 1414210 1229580anak 14 3331982 3365801 2558877 1421059 1414195 1230165
Q1 Q2 Q3 Q4 Q5 Q6induk 15 3.331.672 3.366.126 2.558.552 1.420.734 1.414.520 1.229.840 induk 16 3331322 3365776 2558202 1421084 1414870 1.230.190anak 15 3331322 3.366.126 2.558.552 1.420.734 1.414.520 1.229.840 anak 16 3.331.672 3365776 2558202 1421084 1414870 1.230.190
Q1 Q2 Q3 Q4 Q5 Q6induk 17 3.331.707 3.366.161 2.558.587 1.421.469 1.415.255 1.230.575 induk 18 3331307 3366561 2558187 1421869 1414855 1.230.975anak 17 3331307 3.366.161 2.558.587 1.421.469 1.415.255 1.230.575 anak 18 3.331.707 3366561 2558187 1421869 1414855 1.230.975
Q1 Q2 Q3 Q4 Q5 Q6induk 19 3.331.732 3.366.136 2.558.612 1.421.444 1.415.280 1.230.550 induk 21 3331757 3366161 2557687 1421419 1416205 1.230.525anak 19 3331757 3.366.136 2.558.612 1.421.444 1.415.280 1.230.550 anak 21 3.331.732 3366161 2557687 1421419 1416205 1.230.525
87
Tabel 4.34 Induk Kromosom 22 dan 23 yang akan di Crossover
Tabel 4.35 Induk Kromosom 24 dan 26 yang akan di Crossover
Tabel 4.36 Induk Kromosom 27 dan 28 yang akan di Crossover
Tabel 4.37 Induk Kromosom 29 dan 30 yang akan di Crossover
Q1 Q2 Q3 Q4 Q5 Q6induk 22 3.331.257 3.365.661 2.558.187 1.421.919 1.415.705 1.230.025 induk 23 3330732 3365136 2557662 1422444 1416230 1.229.500anak 22 3330732 3.365.661 2.558.187 1.421.919 1.415.705 1.230.025 anak 23 3.331.257 3365136 2557662 1422444 1416230 1.229.500
Q1 Q2 Q3 Q4 Q5 Q6induk 24 3.331.282 3.365.686 2.558.212 1.421.894 1.416.780 1.228.950 induk 26 3331312 3365716 2559412 1421864 1415580 1.228.980anak 24 3331312 3.365.686 2.558.212 1.421.894 1.416.780 1.228.950 anak 26 3.331.282 3365716 2559412 1421864 1415580 1.228.980
Q1 Q2 Q3 Q4 Q5 Q6induk 27 3330677 3366351 2560047 1421229 1416215 1.228.345induk 28 3330002 3367026 2560722 1420554 1416890 1.229.020anak 27 3330002 3366351 2560047 1421229 1416215 1.228.345anak 28 3330677 3367026 2560722 1420554 1416890 1.229.020
Q1 Q2 Q3 Q4 Q5 Q6induk 29 3329287 3366311 2560007 1421269 1416175 1.228.305induk 30 3328537 3367061 2560757 1420519 1415425 1.227.555anak 29 3328537 3366311 2560007 1421269 1416175 1.228.305anak 30 3329287 3367061 2560757 1420519 1415425 1.227.555
88
Tabel 4.38 Induk Kromosom 31 dan 32 yang akan di Crossover
Tabel 4.39 Induk Kromosom 33 dan 34 yang akan di Crossover
Tabel 4.40 Induk Kromosom 35 dan 36 yang akan di Crossover
Tabel 4.41 Induk Kromosom 37 dan 38 yang akan di Crossover
Tabel 4.42 Induk Kromosom 39 dan 40 yang akan di Crossover
Q1 Q2 Q3 Q4 Q5 Q6induk 31 3.327.802 3.367.796 2.560.022 1.421.254 1.414.690 1.228.290 induk 32 3.328.587 3.367.011 2.560.807 1.422.039 1.413.905 1.227.505 anak 31 3.328.587 3.367.796 2.560.022 1.421.254 1.414.690 1.228.290 anak 32 3.327.802 3.367.011 2.560.807 1.422.039 1.413.905 1.227.505
Q1 Q2 Q3 Q4 Q5 Q6induk 33 3.329.402 3.366.196 2.559.992 1.422.854 1.414.720 1.228.320 induk 34 3.328.577 3.367.021 2.560.817 1.422.029 1.413.895 1.227.495 anak 33 3.328.577 3.366.196 2.559.992 1.422.854 1.414.720 1.228.320 anak 34 3.329.402 3.367.021 2.560.817 1.422.029 1.413.895 1.227.495
Q1 Q2 Q3 Q4 Q5 Q6induk 35 3.327.727 3.366.171 2.559.967 1.421.179 1.413.045 1.226.645 induk 36 3.326.862 3.367.036 2.560.832 1.422.044 1.413.910 1.227.510 anak 35 3.326.862 3.366.171 2.559.967 1.421.179 1.413.045 1.226.645 anak 36 3.327.727 3.367.036 2.560.832 1.422.044 1.413.910 1.227.510
induk 37 3.327.747 3.366.151 2.559.947 1.421.159 1.413.025 1.226.625 induk 38 3.328.672 3.367.076 2.560.872 1.420.234 1.412.100 1.225.700 anak 37 3.328.672 3.366.151 2.559.947 1.421.159 1.413.025 1.226.625 anak 38 3.327.747 3.367.076 2.560.872 1.420.234 1.412.100 1.225.700
Q1 Q2 Q3 Q4 Q5 Q6induk 39 3.327.757 3.367.991 2.561.787 1.419.319 1.411.185 1.224.785 induk 40 3.326.807 3.367.041 2.560.837 1.420.269 1.412.135 1.225.735 anak 39 3.326.807 3.367.991 2.561.787 1.419.319 1.411.185 1.224.785 anak 40 3.327.757 3.367.041 2.560.837 1.420.269 1.412.135 1.225.735
89
Tabel 4.43 Induk Kromosom 41 dan 42 yang akan di Crossover
Tabel 4.44 Induk Kromosom 43 dan 45 yang akan di Crossover
Tabel 4.45 Induk Kromosom 47 dan 48 yang akan di Crossover
Tabel 4.46 Induk Kromosom 49 dan 50 yang akan di Crossover
Q1 Q2 Q3 Q4 Q5 Q6induk 41 3.327.792 3.368.026 2.561.822 1.419.284 1.411.150 1.226.720 induk 42 3.328.767 3.369.001 2.560.847 1.418.309 1.412.125 1.227.695 anak 41 3.328.767 3.368.026 2.561.822 1.419.284 1.411.150 1.226.720 anak 42 3.327.792 3.369.001 2.560.847 1.418.309 1.412.125 1.227.695
Q1 Q2 Q3 Q4 Q5 Q6induk 43 3.327.767 3.370.001 2.561.847 1.417.309 1.411.125 1.226.695 induk 45 3.327.757 3.369.991 2.561.857 1.417.299 1.411.135 1.224.655 anak 43 3.327.757 3.370.001 2.561.847 1.417.309 1.411.125 1.226.695 anak 45 3.327.767 3.369.991 2.561.857 1.417.299 1.411.135 1.224.655
Q1 Q2 Q3 Q4 Q5 Q6induk 47 3.325.672 3.367.906 2.561.872 1.419.384 1.409.050 1.224.640 induk 48 3.326.737 3.366.841 2.562.937 1.418.319 1.410.115 1.223.575 anak 47 3.326.737 3.367.906 2.561.872 1.419.384 1.409.050 1.224.640 anak 48 3.325.672 3.366.841 2.562.937 1.418.319 1.410.115 1.223.575
Q1 Q2 Q3 Q4 Q5 Q6induk 49 3.327.822 3.367.926 2.561.852 1.419.404 1.411.200 1.224.660 induk 50 3.326.747 3.366.851 2.560.777 1.418.329 1.410.125 1.223.585 anak 49 3.326.747 3.367.926 2.561.852 1.419.404 1.411.200 1.224.660 anak 50 3.327.822 3.366.851 2.560.777 1.418.329 1.410.125 1.223.585
90
Tabel 4.47 Populasi setelah Proses Crossover
Q1 Q2 Q3 Q4 Q5 Q6Kromosom 1 3.331.902 3.366.546 2.558.652 1.421.184 1.414.080 1.229.670
Kromosom 2 3.331.937 3.366.596 2.558.602 1.421.234 1.414.030 1.229.720 Kromosom 3 3.331.852 3.366.511 2.558.687 1.421.149 1.414.115 1.229.635 Kromosom 4 3.331.712 3.366.411 2.558.587 1.421.049 1.414.015 1.229.535 Kromosom 5 3.331.837 3.366.286 2.558.712 1.420.924 1.414.140 1.229.410 Kromosom 6 3.331.697 3.366.151 2.558.847 1.420.789 1.414.275 1.229.545 Kromosom 7 3.331.847 3.366.001 2.558.697 1.420.939 1.414.425 1.229.695 Kromosom 8 3.331.722 3.365.826 2.558.872 1.421.114 1.414.250 1.229.520 Kromosom 9 3.331.522 3.366.026 2.558.672 1.421.314 1.414.450 1.229.320 Kromosom 10 3.331.507 3.365.811 2.558.887 1.421.099 1.414.235 1.229.105 Kromosom 11 3.331.732 3.366.036 2.559.112 1.421.324 1.414.460 1.229.330 Kromosom 12 3.331.997 3.365.786 2.558.862 1.421.074 1.414.210 1.229.580 Kromosom 13 3.331.697 3.365.501 2.558.577 1.421.359 1.414.495 1.229.865 Kromosom 14 3.331.982 3.365.801 2.558.877 1.421.059 1.414.195 1.230.165 Kromosom 15 3.331.322 3.366.126 2.558.552 1.420.734 1.414.520 1.229.840 Kromosom 16 3.331.672 3.365.776 2.558.202 1.421.084 1.414.870 1.230.190 Kromosom 17 3.331.307 3.366.161 2.558.587 1.421.469 1.415.255 1.230.575 Kromosom 18 3.331.707 3.366.561 2.558.187 1.421.869 1.414.855 1.230.975 Kromosom 19 3.331.757 3.366.136 2.558.612 1.421.444 1.415.280 1.230.550 Kromosom 20 3.331.282 3.365.686 2.558.162 1.421.894 1.415.730 1.231.000 Kromosom 21 3.331.732 3.366.161 2.557.687 1.421.419 1.416.205 1.230.525 Kromosom 22 3.330.732 3.365.661 2.558.187 1.421.919 1.415.705 1.230.025 Kromosom 23 3.331.257 3.365.136 2.557.662 1.422.444 1.416.230 1.229.500 Kromosom 24 3.331.312 3.365.686 2.558.212 1.421.894 1.416.780 1.228.950 Kromosom 25 3.330.697 3.365.101 2.558.797 1.422.479 1.416.195 1.228.365 Kromosom 26 3.331.282 3.365.716 2.559.412 1.421.864 1.415.580 1.228.980 Kromosom 27 3.330.002 3.366.351 2.560.047 1.421.229 1.416.215 1.228.345 Kromosom 28 3.330.677 3.367.026 2.560.722 1.420.554 1.416.890 1.229.020 Kromosom 29 3.328.537 3.366.311 2.560.007 1.421.269 1.416.175 1.228.305 Kromosom 30 3.329.287 3.367.061 2.560.757 1.420.519 1.415.425 1.227.555 Kromosom 31 3.328.587 3.367.796 2.560.022 1.421.254 1.414.690 1.228.290 Kromosom 32 3.327.802 3.367.011 2.560.807 1.422.039 1.413.905 1.227.505 Kromosom 33 3.328.577 3.366.196 2.559.992 1.422.854 1.414.720 1.228.320 Kromosom 34 3.329.402 3.367.021 2.560.817 1.422.029 1.413.895 1.227.495 Kromosom 35 3.326.862 3.366.171 2.559.967 1.421.179 1.413.045 1.226.645 Kromosom 36 3.327.727 3.367.036 2.560.832 1.422.044 1.413.910 1.227.510 Kromosom 37 3.328.672 3.366.151 2.559.947 1.421.159 1.413.025 1.226.625 Kromosom 38 3.327.747 3.367.076 2.560.872 1.420.234 1.412.100 1.225.700 Kromosom 39 3.326.807 3.367.991 2.561.787 1.419.319 1.411.185 1.224.785 Kromosom 40 3.327.757 3.367.041 2.560.837 1.420.269 1.412.135 1.225.735 Kromosom 41 3.328.767 3.368.026 2.561.822 1.419.284 1.411.150 1.226.720 Kromosom 42 3.327.792 3.369.001 2.560.847 1.418.309 1.412.125 1.227.695 Kromosom 43 3.327.757 3.370.001 2.561.847 1.417.309 1.411.125 1.226.695 Kromosom 44 3.326.742 3.368.976 2.562.872 1.416.284 1.412.150 1.225.670 Kromosom 45 3.327.767 3.369.991 2.561.857 1.417.299 1.411.135 1.224.655 Kromosom 46 3.326.722 3.368.956 2.560.822 1.418.334 1.410.100 1.225.690 Kromosom 47 3.326.737 3.367.906 2.561.872 1.419.384 1.409.050 1.224.640 Kromosom 48 3.325.672 3.366.841 2.562.937 1.418.319 1.410.115 1.223.575 Kromosom 49 3.326.747 3.367.926 2.561.852 1.419.404 1.411.200 1.224.660 Kromosom 50 3.327.822 3.366.851 2.560.777 1.418.329 1.410.125 1.223.585
91
4.6.6 Mutasi
Mutasi dilakukan untuk semua gen pada individu, jumlah
kromosom yang mengalami mutase dalam suatu populasi
ditentukan oleh mutation_rate. Mutation_rate pada penelitian ini
adalah 0,1 sehingga diharapkan 10% dari total gen akan
mengalami mutasi, yang berarti jika jumlah populasinya 50
individu (kromosom) maka yang akan mengalami mutasi adalah
sebanyak 5 kromosom.
Tahapan untuk melakukan mutasi:
1. Untuk memilih variable mana yang akan dilakukan
mutasi, maka membangkitkan bilangan acak sebanyak
total gen yang terdapat pada populasi. Jika populasinya
adalah 50 kromosom dimana dalam setiap kromosom
terdapat 6 gen maka Panjang total gen = popsize * jumlah
gen pada setiap kromosom.
Panjang total gen = 50 * 6 =300
2. Untuk memilih posisi gen yang akan mengalami mutasi
dilakukan dengan cara membangkitkan bilangan acak
antara 1 sampai total gen yaitu 1- 300. Jika bilangan acak
yang dibangkitkan lebih kecil daripada mutation_rate
maka dipilih posisi tersebut sebagai sub-kromosom yang
mengalami mutasi. Mutation_rate yang ditentukan 10%
maka diharapkan 10% dari total gen yang mengalami
populasi:
Jumlah Mutasi = 0.1 * 300
= 30
3. Menciptakan bilangan acak [0,1] sebanyak jumlah gen
yaitu 300 dengan jumlah kromosom 50. Selanjutnya pilih
nilai gen antara 1-6 pada tiap kromosom dengan nilai yang
kurang dari 0.1.
92
Tabel 4.48 Bilangan Random Mutasi
Q1 Q2 Q3 Q4 Q5 Q6R1 0.3504 R1 0.7957 R1 0.3182 R1 0.7438 R1 0.8863 R1 0.1643R2 0.0456 R2 0.9109 R2 0.0103 R2 0.7954 R2 0.8141 R2 0.9587R3 0.1532 R3 0.8562 R3 0.8040 R3 0.5995 R3 0.0869 R3 0.6139R4 0.9384 R4 0.9030 R4 0.2854 R4 0.5536 R4 0.4721 R4 0.5198R5 0.0979 R5 0.2562 R5 0.8605 R5 0.9711 R5 0.5083 R5 0.8905R6 0.0842 R6 0.4892 R6 0.1269 R6 0.0930 R6 0.7997 R6 0.6946R7 0.0792 R7 0.3067 R7 0.0690 R7 0.8894 R7 0.5414 R7 0.8910R8 0.5068 R8 0.8401 R8 0.6134 R8 0.2049 R8 0.2599 R8 0.7377R9 0.7109 R9 0.0661 R9 0.7389 R9 0.6795 R9 0.9846 R9 0.2030R10 0.1346 R10 0.7847 R10 0.2520 R10 0.4821 R10 0.1990 R10 0.2772R11 0.3769 R11 0.5774 R11 0.6406 R11 0.8214 R11 0.0252 R11 0.3741R12 0.3009 R12 0.5167 R12 0.1054 R12 0.9362 R12 0.8692 R12 0.4627R13 0.0279 R13 0.5209 R13 0.7167 R13 0.6095 R13 0.4054 R13 0.2215R14 0.2782 R14 0.3934 R14 0.0333 R14 0.6069 R14 0.2036 R14 0.7401R15 0.5665 R15 0.8993 R15 0.5716 R15 0.3079 R15 0.3710 R15 0.6709R16 0.6316 R16 0.9893 R16 0.2534 R16 0.5927 R16 0.9952 R16 0.6937R17 0.8676 R17 0.6591 R17 0.3077 R17 0.9296 R17 0.4568 R17 0.9048R18 0.5051 R18 0.8086 R18 0.0615 R18 0.5591 R18 0.6814 R18 0.6247R19 0.8225 R19 0.5366 R19 0.7922 R19 0.4919 R19 0.3417 R19 0.4312R20 0.8395 R20 0.5494 R20 0.9104 R20 0.7574 R20 0.1431 R20 0.3609R21 0.7120 R21 0.2633 R21 0.1849 R21 0.4731 R21 0.2885 R21 0.5737R22 0.4096 R22 0.8215 R22 0.0953 R22 0.5254 R22 0.4803 R22 0.8494R23 0.9592 R23 0.1764 R23 0.5227 R23 0.8246 R23 0.9293 R23 0.4257R24 0.3242 R24 0.1194 R24 0.4969 R24 0.0414 R24 0.3305 R24 0.3349R25 0.1991 R25 0.6873 R25 0.5194 R25 0.4061 R25 0.2691 R25 0.4519R26 0.4941 R26 0.8046 R26 0.0048 R26 0.6140 R26 0.7140 R26 0.8866R27 0.0050 R27 0.9117 R27 0.5550 R27 0.9149 R27 0.4327 R27 0.2310R28 0.7513 R28 0.6588 R28 0.4593 R28 0.5038 R28 0.2285 R28 0.9911R29 0.3265 R29 0.8842 R29 0.2273 R29 0.4615 R29 0.6742 R29 0.9643R30 0.4640 R30 0.1688 R30 0.2213 R30 0.9243 R30 0.4956 R30 0.0206R31 0.0856 R31 0.4299 R31 0.6864 R31 0.2641 R31 0.7362 R31 0.0019R32 0.3440 R32 0.9167 R32 0.6422 R32 0.1123 R32 0.4678 R32 0.7176R33 0.2177 R33 0.8246 R33 0.1644 R33 0.1605 R33 0.4732 R33 0.0385R34 0.8713 R34 0.3091 R34 0.5851 R34 0.1425 R34 0.8245 R34 0.4375R35 0.1820 R35 0.9948 R35 0.5775 R35 0.9398 R35 0.6918 R35 0.5550R36 0.8043 R36 0.2917 R36 0.7518 R36 0.3020 R36 0.7286 R36 0.3965R37 0.0660 R37 0.2483 R37 0.4719 R37 0.2471 R37 0.1246 R37 0.7895R38 0.3350 R38 0.4970 R38 0.8958 R38 0.5896 R38 0.6956 R38 0.7577R39 0.5105 R39 0.9186 R39 0.0900 R39 0.4449 R39 0.0004 R39 0.4667R40 0.0387 R40 0.5193 R40 0.7993 R40 0.3767 R40 0.1888 R40 0.2031R41 0.1351 R41 0.8938 R41 0.9977 R41 0.8749 R41 0.2845 R41 0.4017R42 0.7252 R42 0.7109 R42 0.4541 R42 0.1235 R42 0.2938 R42 0.6853R43 0.4196 R43 0.4950 R43 0.2138 R43 0.3960 R43 0.7961 R43 0.2149R44 0.4225 R44 0.4869 R44 0.2250 R44 0.4233 R44 0.0850 R44 0.4516R45 0.0047 R45 0.0489 R45 0.1113 R45 0.1495 R45 0.9924 R45 0.3816R46 0.3408 R46 0.9865 R46 0.3027 R46 0.2683 R46 0.4202 R46 0.5604R47 0.9140 R47 0.8275 R47 0.3195 R47 0.1944 R47 0.9336 R47 0.7470R48 0.8788 R48 0.7992 R48 0.1299 R48 0.0754 R48 0.4595 R48 0.4302R49 0.8507 R49 0.2383 R49 0.9181 R49 0.9182 R49 0.4160 R49 0.9937R50 0.0562 R50 0.0047 R50 0.5247 R50 0.6705 R50 0.2517 R50 0.1086
93
4. Pindahkan gen dengan mengambil gen tersebut dengan
mengambil nilai gen di depannya kemudian lakukan
pertukaran, maka nilai Gen = Gen + 1 dan Gen +1 =Gen.
apabila gen pada posisi terakhir maka diambil dari gen
yang paling depan, tukar gen depan = paling belakang dan
gen terakhir = gen paling depan
Tabel 4.49 Kromosom yang terkena mutasi
Kromosom dan Gen yang terkena Mutasi
Kromosom 1 dan Gen Q3 kromosom 2 dan Gen Q1 kromosom 3 dan Gen Q5 kromosom 5 dan Gen Q1 Kromosom 6 dan Gen Q4 Kromosom 7 dan Gen Q3 Kromosom 9 dan Gen Q2 Kromosom 11 dan Gen Q5 Kromosom 13 dan Gen Q1 Kromosom 14 dan Gen Q3 Kromosom 16 dan Gen Q5 Kromosom 18 dan Gen Q3 Kromosom 22 dan Gen Q3 Kromosom 24 dan Gen Q4 Kromosom 25 dan Gen Q5 Kromosom 26 dan Gen Q3 Kromosom 27 dan Gen Q1 Kromosom 28 dan Gen Q2 Kromosom 30 dan Gen Q6 Kromosom 31 dan Gen Q6 Kromosom 33 dan Gen Q6 Kromosom 35 dan Gen Q2 Kromosom 37 dan Gen Q1 Kromosom 39 dan Gen Q3 Kromosom 40 dan Gen Q1 Kromosom 42 dan Gen Q3 Kromosom 44 dan Gen Q5 Kromosom 45 dan Gen Q1 Kromosom 48 dan Gen Q4 Kromosom 49 dan Gen Q6 Kromosom 50 dan Gen Q1
94
Tabel 4.50 Bentuk populasi awal
Q1 Q2 Q3 Q4 Q5 Q6 Gen yang Ditukarkan Kromosom 1 3.331.902 3.366.546 2.558.652 1.421.184 1.414.080 1.229.670 Gen3 dengan Gen 2Kromosom 2 3.331.937 3.366.596 2.558.602 1.421.234 1.414.030 1.229.720 Gen 1 dengan Gen 6Kromosom 3 3.331.852 3.366.511 2.558.687 1.421.149 1.414.115 1.229.635 Gen 5 dengan Gen 4Kromosom 4 3.331.712 3.366.411 2.558.587 1.421.049 1.414.015 1.229.535 Kromosom 5 3.331.837 3.366.286 2.558.712 1.420.924 1.414.140 1.229.410 Gen 1 dengan Gen 6Kromosom 6 3.331.697 3.366.151 2.558.847 1.420.789 1.414.275 1.229.545 Gen 4 dengan Gen 3Kromosom 7 3.331.847 3.366.001 2.558.697 1.420.939 1.414.425 1.229.695 Gen 3 dengan Gen 2Kromosom 8 3.331.722 3.365.826 2.558.872 1.421.114 1.414.250 1.229.520 Kromosom 9 3.331.522 3.366.026 2.558.672 1.421.314 1.414.450 1.229.320 Gen 2 dengan Gen 1Kromosom 10 3.331.507 3.365.811 2.558.887 1.421.099 1.414.235 1.229.105 Kromosom 11 3.331.732 3.366.036 2.559.112 1.421.324 1.414.460 1.229.330 Gen 5 dengan Gen 4Kromosom 12 3.331.997 3.365.786 2.558.862 1.421.074 1.414.210 1.229.580 Kromosom 13 3.331.697 3.365.501 2.558.577 1.421.359 1.414.495 1.229.865 Gen 1 dengan Gen 6Kromosom 14 3.331.982 3.365.801 2.558.877 1.421.059 1.414.195 1.230.165 Gen 3 dengan Gen 2Kromosom 15 3.331.322 3.366.126 2.558.552 1.420.734 1.414.520 1.229.840 Kromosom 16 3.331.672 3.365.776 2.558.202 1.421.084 1.414.870 1.230.190 Gen 5 dengan Gen 4Kromosom 17 3.331.307 3.366.161 2.558.587 1.421.469 1.415.255 1.230.575 Kromosom 18 3.331.707 3.366.561 2.558.187 1.421.869 1.414.855 1.230.975 Gen 3 dengan Gen 2Kromosom 19 3.331.757 3.366.136 2.558.612 1.421.444 1.415.280 1.230.550 Kromosom 20 3.331.282 3.365.686 2.558.162 1.421.894 1.415.730 1.231.000 Kromosom 21 3.331.732 3.366.161 2.557.687 1.421.419 1.416.205 1.230.525 Kromosom 22 3.330.732 3.365.661 2.558.187 1.421.919 1.415.705 1.230.025 Gen 3 dengan Gen 2Kromosom 23 3.331.257 3.365.136 2.557.662 1.422.444 1.416.230 1.229.500 Kromosom 24 3.331.312 3.365.686 2.558.212 1.421.894 1.416.780 1.228.950 Gen 4 dengan Gen 3Kromosom 25 3.330.697 3.365.101 2.558.797 1.422.479 1.416.195 1.228.365 Gen 5 dengan Gen 4Kromosom 26 3.331.282 3.365.716 2.559.412 1.421.864 1.415.580 1.228.980 Gen 3 dengan Gen 2Kromosom 27 3.330.002 3.366.351 2.560.047 1.421.229 1.416.215 1.228.345 Gen 1 dengan Gen 6Kromosom 28 3.330.677 3.367.026 2.560.722 1.420.554 1.416.890 1.229.020 Gen 2 dengan Gen 1Kromosom 29 3.328.537 3.366.311 2.560.007 1.421.269 1.416.175 1.228.305 Kromosom 30 3.329.287 3.367.061 2.560.757 1.420.519 1.415.425 1.227.555 Gen 6 dengan Gen 5Kromosom 31 3.328.587 3.367.796 2.560.022 1.421.254 1.414.690 1.228.290 Gen 6 dengan Gen 5Kromosom 32 3.327.802 3.367.011 2.560.807 1.422.039 1.413.905 1.227.505 Kromosom 33 3.328.577 3.366.196 2.559.992 1.422.854 1.414.720 1.228.320 Gen 6 dengan Gen 5Kromosom 34 3.329.402 3.367.021 2.560.817 1.422.029 1.413.895 1.227.495 Kromosom 35 3.326.862 3.366.171 2.559.967 1.421.179 1.413.045 1.226.645 Gen 2 dengan Gen 1Kromosom 36 3.327.727 3.367.036 2.560.832 1.422.044 1.413.910 1.227.510 Kromosom 37 3.328.672 3.366.151 2.559.947 1.421.159 1.413.025 1.226.625 Gen 1 dengan Gen 6Kromosom 38 3.327.747 3.367.076 2.560.872 1.420.234 1.412.100 1.225.700 Kromosom 39 3.326.807 3.367.991 2.561.787 1.419.319 1.411.185 1.224.785 Gen 3 dengan Gen 2Kromosom 40 3.327.757 3.367.041 2.560.837 1.420.269 1.412.135 1.225.735 Gen 1 dengan Gen 6Kromosom 41 3.328.767 3.368.026 2.561.822 1.419.284 1.411.150 1.226.720 Kromosom 42 3.327.792 3.369.001 2.560.847 1.418.309 1.412.125 1.227.695 Gen 3 dengan Gen 2Kromosom 43 3.327.757 3.370.001 2.561.847 1.417.309 1.411.125 1.226.695 Kromosom 44 3.326.742 3.368.976 2.562.872 1.416.284 1.412.150 1.225.670 Gen 5 dengan Gen 4Kromosom 45 3.327.767 3.369.991 2.561.857 1.417.299 1.411.135 1.224.655 Gen 1 dengan Gen 6Kromosom 46 3.326.722 3.368.956 2.560.822 1.418.334 1.410.100 1.225.690 Kromosom 47 3.326.737 3.367.906 2.561.872 1.419.384 1.409.050 1.224.640 Kromosom 48 3.325.672 3.366.841 2.562.937 1.418.319 1.410.115 1.223.575 Gen 4 dengan Gen 3Kromosom 49 3.326.747 3.367.926 2.561.852 1.419.404 1.411.200 1.224.660 Gen 6 dengan Gen 5Kromosom 50 3.327.822 3.366.851 2.560.777 1.418.329 1.410.125 1.223.585 Gen 1 dengan Gen 6
95
Tabel 4.51 Hasil Mutasi
Q1 Q2 Q3 Q4 Q5 Q6Kromosom 1 3.331.902 2.558.652 3.366.546 1.421.184 1.414.080 1.229.670Kromosom 2 1.229.720 3.366.596 2.558.602 1.421.234 1.414.030 3.331.937 Kromosom 3 3.331.852 3.366.511 2.558.687 1.414.115 1.421.149 1.229.635 Kromosom 4 3.331.712 3.366.411 2.558.587 1.421.049 1.414.015 1.229.535 Kromosom 5 1.229.410 3.366.286 2.558.712 1.420.924 1.414.140 3.331.837 Kromosom 6 3.331.697 3.366.151 1.420.789 2.558.847 1.414.275 1.229.545 Kromosom 7 3.331.847 2.558.697 3.366.001 1.420.939 1.414.425 1.229.695 Kromosom 8 3.331.722 3.365.826 2.558.872 1.421.114 1.414.250 1.229.520 Kromosom 9 3.366.026 3.331.522 2.558.672 1.421.314 1.414.450 1.229.320 Kromosom 10 3.331.507 3.365.811 2.558.887 1.421.099 1.414.235 1.229.105 Kromosom 11 3.331.732 3.366.036 2.559.112 1.414.460 1.421.324 1.229.330 Kromosom 12 3.331.997 3.365.786 2.558.862 1.421.074 1.414.210 1.229.580 Kromosom 13 1.229.865 3.365.501 2.558.577 1.421.359 1.414.495 3.331.697 Kromosom 14 3.331.982 2.558.877 3.365.801 1.421.059 1.414.195 1.230.165 Kromosom 15 3.331.322 3.366.126 2.558.552 1.420.734 1.414.520 1.229.840 Kromosom 16 3.331.672 3.365.776 2.558.202 1.414.870 1.421.084 1.230.190 Kromosom 17 3.331.307 3.366.161 2.558.587 1.421.469 1.415.255 1.230.575 Kromosom 18 3.331.707 2.558.187 3.366.561 1.421.869 1.414.855 1.230.975 Kromosom 19 3.331.757 3.366.136 2.558.612 1.421.444 1.415.280 1.230.550 Kromosom 20 3.331.282 3.365.686 2.558.162 1.421.894 1.415.730 1.231.000 Kromosom 21 3.331.732 3.366.161 2.557.687 1.421.419 1.416.205 1.230.525 Kromosom 22 3.330.732 2.558.187 3.365.661 1.421.919 1.415.705 1.230.025 Kromosom 23 3.331.257 3.365.136 2.557.662 1.422.444 1.416.230 1.229.500 Kromosom 24 3.331.312 3.365.686 1.421.894 2.558.212 1.416.780 1.228.950 Kromosom 25 3.330.697 3.365.101 2.558.797 1.416.195 1.422.479 1.228.365 Kromosom 26 3.331.282 2.559.412 3.365.716 1.421.864 1.415.580 1.228.980 Kromosom 27 1.228.345 3.366.351 2.560.047 1.421.229 1.416.215 3.330.002 Kromosom 28 3.367.026 3.330.677 2.560.722 1.420.554 1.416.890 1.229.020 Kromosom 29 3.328.537 3.366.311 2.560.007 1.421.269 1.416.175 1.228.305 Kromosom 30 3.329.287 3.367.061 2.560.757 1.420.519 1.227.555 1.415.425 Kromosom 31 3.328.587 3.367.796 2.560.022 1.421.254 1.228.290 1.414.690 Kromosom 32 3.327.802 3.367.011 2.560.807 1.422.039 1.413.905 1.227.505 Kromosom 33 3.328.577 3.366.196 2.559.992 1.422.854 1.228.320 1.414.720 Kromosom 34 3.329.402 3.367.021 2.560.817 1.422.029 1.413.895 1.227.495 Kromosom 35 3.366.171 3.326.862 2.559.967 1.421.179 1.413.045 1.226.645 Kromosom 36 3.327.727 3.367.036 2.560.832 1.422.044 1.413.910 1.227.510 Kromosom 37 1.226.625 3.366.151 2.559.947 1.421.159 1.413.025 3.328.672 Kromosom 38 3.327.747 3.367.076 2.560.872 1.420.234 1.412.100 1.225.700 Kromosom 39 3.326.807 2.561.787 3.367.991 1.419.319 1.411.185 1.224.785 Kromosom 40 1.225.735 3.367.041 2.560.837 1.420.269 1.412.135 3.327.757 Kromosom 41 3.328.767 3.368.026 2.561.822 1.419.284 1.411.150 1.226.720 Kromosom 42 3.327.792 2.560.847 3.369.001 1.418.309 1.412.125 1.227.695 Kromosom 43 3.327.757 3.370.001 2.561.847 1.417.309 1.411.125 1.226.695 Kromosom 44 3.326.742 3.368.976 2.562.872 1.412.150 1.416.284 1.225.670 Kromosom 45 1.224.655 3.369.991 2.561.857 1.417.299 1.411.135 3.327.767 Kromosom 46 3.326.722 3.368.956 2.560.822 1.418.334 1.410.100 1.225.690 Kromosom 47 3.326.737 3.367.906 2.561.872 1.419.384 1.409.050 1.224.640 Kromosom 48 3.325.672 3.366.841 1.418.319 2.562.937 1.410.115 1.223.575 Kromosom 49 3.326.747 3.367.926 2.561.852 1.419.404 1.224.660 1.411.200 Kromosom 50 1.223.585 3.366.851 2.560.777 1.418.329 1.410.125 3.327.822
96
4.6.7 Evaluasi Fitness
Proses Generasi pertama selesai dan akan dijadikan populasi awal
untuk generasi kedua. Dengan cara dan langkah langkah yang
sama dilakukan sampai seratus kali. Berikut adalah nilai fitness
pada generasi pertama:
Tabel 4.52 Evaluasi Fitness
Q1 Q2 Q3 Q4 Q5 Q6 f RankKromosom 1 3.331.902 2.558.652 3.366.546 1.421.184 1.414.080 1.229.670 13.322.034 14Kromosom 2 1.229.720 3.366.596 2.558.602 1.421.234 1.414.030 3.331.937 13.322.119 12Kromosom 3 3.331.852 3.366.511 2.558.687 1.414.115 1.421.149 1.229.635 13.321.949 16Kromosom 4 3.331.712 3.366.411 2.558.587 1.421.049 1.414.015 1.229.535 13.321.309 22Kromosom 5 1.229.410 3.366.286 2.558.712 1.420.924 1.414.140 3.331.837 13.321.309 22Kromosom 6 3.331.697 3.366.151 1.420.789 2.558.847 1.414.275 1.229.545 13.321.304 24Kromosom 7 3.331.847 2.558.697 3.366.001 1.420.939 1.414.425 1.229.695 13.321.604 19Kromosom 8 3.331.722 3.365.826 2.558.872 1.421.114 1.414.250 1.229.520 13.321.304 24Kromosom 9 3.366.026 3.331.522 2.558.672 1.421.314 1.414.450 1.229.320 13.321.304 24Kromosom 10 3.331.507 3.365.811 2.558.887 1.421.099 1.414.235 1.229.105 13.320.644 30Kromosom 11 3.331.732 3.366.036 2.559.112 1.414.460 1.421.324 1.229.330 13.321.994 15Kromosom 12 3.331.997 3.365.786 2.558.862 1.421.074 1.414.210 1.229.580 13.321.509 20Kromosom 13 1.229.865 3.365.501 2.558.577 1.421.359 1.414.495 3.331.697 13.321.494 21Kromosom 14 3.331.982 2.558.877 3.365.801 1.421.059 1.414.195 1.230.165 13.322.079 13Kromosom 15 3.331.322 3.366.126 2.558.552 1.420.734 1.414.520 1.229.840 13.321.094 27Kromosom 16 3.331.672 3.365.776 2.558.202 1.414.870 1.421.084 1.230.190 13.321.794 17Kromosom 17 3.331.307 3.366.161 2.558.587 1.421.469 1.415.255 1.230.575 13.323.354 6Kromosom 18 3.331.707 2.558.187 3.366.561 1.421.869 1.414.855 1.230.975 13.324.154 2Kromosom 19 3.331.757 3.366.136 2.558.612 1.421.444 1.415.280 1.230.550 13.323.779 3Kromosom 20 3.331.282 3.365.686 2.558.162 1.421.894 1.415.730 1.231.000 13.323.754 4Kromosom 21 3.331.732 3.366.161 2.557.687 1.421.419 1.416.205 1.230.525 13.323.729 5Kromosom 22 3.330.732 2.558.187 3.365.661 1.421.919 1.415.705 1.230.025 13.322.229 9Kromosom 23 3.331.257 3.365.136 2.557.662 1.422.444 1.416.230 1.229.500 13.322.229 9Kromosom 24 3.331.312 3.365.686 1.421.894 2.558.212 1.416.780 1.228.950 13.322.834 7Kromosom 25 3.330.697 3.365.101 2.558.797 1.416.195 1.422.479 1.228.365 13.321.634 18Kromosom 26 3.331.282 2.559.412 3.365.716 1.421.864 1.415.580 1.228.980 13.322.834 7Kromosom 27 1.228.345 3.366.351 2.560.047 1.421.229 1.416.215 3.330.002 13.322.189 11Kromosom 28 3.367.026 3.330.677 2.560.722 1.420.554 1.416.890 1.229.020 13.324.889 1Kromosom 29 3.328.537 3.366.311 2.560.007 1.421.269 1.416.175 1.228.305 13.320.604 32Kromosom 30 3.329.287 3.367.061 2.560.757 1.420.519 1.227.555 1.415.425 13.320.604 32Kromosom 31 3.328.587 3.367.796 2.560.022 1.421.254 1.228.290 1.414.690 13.320.639 31Kromosom 32 3.327.802 3.367.011 2.560.807 1.422.039 1.413.905 1.227.505 13.319.069 34Kromosom 33 3.328.577 3.366.196 2.559.992 1.422.854 1.228.320 1.414.720 13.320.659 28Kromosom 34 3.329.402 3.367.021 2.560.817 1.422.029 1.413.895 1.227.495 13.320.659 28Kromosom 35 3.366.171 3.326.862 2.559.967 1.421.179 1.413.045 1.226.645 13.313.869 40Kromosom 36 3.327.727 3.367.036 2.560.832 1.422.044 1.413.910 1.227.510 13.319.059 35Kromosom 37 1.226.625 3.366.151 2.559.947 1.421.159 1.413.025 3.328.672 13.315.579 38Kromosom 38 3.327.747 3.367.076 2.560.872 1.420.234 1.412.100 1.225.700 13.313.729 42Kromosom 39 3.326.807 2.561.787 3.367.991 1.419.319 1.411.185 1.224.785 13.311.874 45Kromosom 40 1.225.735 3.367.041 2.560.837 1.420.269 1.412.135 3.327.757 13.313.774 41Kromosom 41 3.328.767 3.368.026 2.561.822 1.419.284 1.411.150 1.226.720 13.315.769 36Kromosom 42 3.327.792 2.560.847 3.369.001 1.418.309 1.412.125 1.227.695 13.315.769 36Kromosom 43 3.327.757 3.370.001 2.561.847 1.417.309 1.411.125 1.226.695 13.314.734 39Kromosom 44 3.326.742 3.368.976 2.562.872 1.412.150 1.416.284 1.225.670 13.312.694 44Kromosom 45 1.224.655 3.369.991 2.561.857 1.417.299 1.411.135 3.327.767 13.312.704 43Kromosom 46 3.326.722 3.368.956 2.560.822 1.418.334 1.410.100 1.225.690 13.310.624 47Kromosom 47 3.326.737 3.367.906 2.561.872 1.419.384 1.409.050 1.224.640 13.309.589 48Kromosom 48 3.325.672 3.366.841 1.418.319 2.562.937 1.410.115 1.223.575 13.307.459 50Kromosom 49 3.326.747 3.367.926 2.561.852 1.419.404 1.224.660 1.411.200 13.311.789 46Kromosom 50 1.223.585 3.366.851 2.560.777 1.418.329 1.410.125 3.327.822 13.307.489 49
97
Berdasarkan hasil optimasi algoritma genetika diperoleh nilai TC
Optimum yaitu sebesar Rp. 13.324.889 dengan nilai masing
masing QRpi dan EOQ Optimum adalah
Tabel 4.53 EOQ Optimum untuk masing-masing Item
QRpi
(Rupiah)
Pi
(Rupiah)
EOQ
(Unit)
Pembulatan
EOQ (Unit)
3.367.026 Rp 21.732 153.2303 153
3.330.677 Rp 23.016 146.2906 145
2.560.722 Rp 23.647 108.2895 108
1.420.554 Rp 24.360 58.3150 58
1.416.890 Rp 24.880 56.9489 57
1.229.020 Rp 22.652 54,257 54
Tabel 4. 54 Perbandingan Jumlah Q Optimum dan Algoritma genetika
Item ke -
Dengan Algoritma
genetika
EOQ
(Unit)
1 153 1548
2 145 1492
3 108 1086
4 58 588
5 57 570
6 54 556
TOTAL 575 5840
Titik pemesanan kembali yang idealnya dilakukan perusahaan
dihitung dengan R = 拶� × � adalah sebagai berikut:
R = 拶� × � =
捜挿捜惣掃捜 � 挿 = 層層 hari.
98
BAB V
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Kesimpulan hasil dan uraian pembahasan diatas dapat disimpulkan
sebagai berikut:
1. Representasi kromosom dengan menggunakan real number encoding
dengan proses crossover dan mutasi yang digunakan dalam algoritma
genetika mampu mengoptimalkan nilai EOQ.
2. Nilai parameter yang algoritma genetika berpengaruh terhadap hasil
optimasi yang dihasilkan.
3. Perbandingan Q optimum EOQ dengan algoritma genetika sangat
signifikan yaitu dengan hasil total EOQ 5840 unit untuk 6 item yang terdiri
1548 liter Oli shell rimula R2 10W, 1492 liter Oli Shell Rimula R2 30,
1086 liter Oli shell rimula R3 15W-40, 588 liter Oli shell rimula R2 30,
570 liter oli shell rimula R3 15W-40, 556 liter Oli shell rimula R2 10W
dan algoritma genetika sebesar 575 unit untuk 6 item yang teridiri dari 153
liter Oli shell rimula R2 10W, 145 liter Oli Shell Rimula R2 30, 108 liter
Oli shell rimula R3 15W-40, 58 liter Oli shell rimula R2 30, 57 liter oli
shell rimula R3 15W-40, 54 liter Oli shell rimula R2 10W, pengoptimalan
menggunakan algoritma genetika terlihat sangat signifikan.
99
5.2 Saran
1. Penentuan parameter algoritma genetika sebaiknya mengikuti parameter
yang direkomendasikan seperti untuk permasalahan yang memiliki
kawasan solusi cukup besar, De Jong merekomendasikan nilai parameter:
(popsize; pc; pm) = (50;0,6;0,001) kemudian bila rata-rata fitness setiap
generasi digunakan sebagai indikator, maka Grefenstette
merekomendasikan: (popsize; pc; pm) = (30;0,95;0,01).
2. Perlu dilakukan pengulangan pengujian dengan nilai parameter crossover,
mutasi, dan seleksi yang berbeda agar dapat menghasilkan solusi yang
optimal.
3. Perlu dilakukan pengujian algoritma genetika dengan metode lain agar
mendapatkan solusi dan hasil yang variatif.
4. Untuk peneliti selanjutnya bisa melakukan penggabungan algoritma
genetika dengan algoritma yang lain agar untuk memperoleh solusi yang
lebih baik.
100
DAFTAR PUSTAKA
Gen M. & Cheng R., 1999, Genetic Algorithms Optimization Engineering, John
Wiley and Sons, New York
Haupt, R.L. dan Haupt. 2004. Practical Genetic Algorithms. New Yersey: Jhon
Wileydan Sons, Inc.
Zukhri, Z. 2013. Algoritma Genetika Metode Komputasi Evolusioner Untuk
Menyelesaikan Masalah Optimasi. Yogyakarta:ANDI
Suyanto.2010. Algoritma Optimasi Deterministik atau probabilistic.Yogyakarta:
Graha Ilmu
Suyanto.2010. Algoritma Genetika DalamMatlab.Yogyakarta:ANDI
Riadi,Muchlisin. 2018. Pengertian,Fungsi dan Jenis- jenis Persediaan (Inventory).
https://www.kajianpustaka.com/2018/02/pengertian-fungsi-dan-jenis-persediaan-
inventory.html diakses 19 Juni 2018.
Herjanto, Eddy. 2007. Manajemen Operasi. Jakarta: Grasindo.
Widya, Amyra. 2015. Teory Tentang Persediaan (Inventory).
http://awosassite.blogspot.com/2015/10/teori-tentang-persediaan-inventory.html diakses
25 Juni 2018.
Makplus, Om. 2015. Definisi Dan Pengertian Informasi Menurut Para Ahli.
http://www.definisi-pengertian.com/2015/03/definisi-dan-pengertian-informasi.html
diakses 28 Juni 2018.
101
Buahpikiranmereka. 2014 Pengertian Tentang XAMPP.
https://kumpulanartikelilmu.wordpress.com/2014/10/30/pengertian-tentang-xampp-2/
diakses 15 juli 2018.
A.S., Rosa dan Salahuddin M. 2013. Rekayasa Perangkat Lunak Terstruktur dan
Berorientasi Objek. Informatika. Bandung.
Goldberg, David E.1989. Genetic Algorithm in Search, Optimization & Machine
Learning.USA: Adison-Wesley.Diambil dari
http://www2.fiit.stuba.sk/~kvasnicka/Free%20books/Goldberg_Genetic_Algorithms_in_
Search.pdf. Di akses 28 Juli 2018
Michalewicz, Z.1996.Genetic + Data Structures = Evolution Programs. USA:
Spinger-Verlag. Diambil dari
http://web.ist.utl.pt/adriano.simoes/tese/referencias/Michalewicz%20Z.%20Genetic%20
Algorithms%20+%20Data%20Structures%20=%20Evolution%20Programs%20%283ed
%29.PDF. Diakses 28 Juli 2018.
Arum, Riama. 2018.Analisis dan Perancangan Sistem Informasi Perencanaan
persediaan barang menggunakan Metode Economic Order Quantitity (Studi kasus:Giant
Extra Cileduk). Jakarta. Jurnal Satya Informatika.Vol.4 No.1 Mei 2018. Diambil dari
http://teknik.usni.ac.id/jurnal/RIAMA%20SIBARANI.pdf. (10 Agustus 2018)
Ramuna, Maretta Dwi Tika, Wayan. 2015. Optimasi Persediaan Barang Dalam
Produksi Jilbab Menggunakan Algoritma genetika. Malang. Jurnal Mahasiswa PTIIK
Universitas Brawijaya . Vol.5, No.14. Diambil dari
102
http://wayanfm.lecture.ub.ac.id/files/2015/06/JurnalSkripsi-2014-2015-020-Maretta-Dwi-
Tika-Ramuna.pdf. ( 20 Juli 2018).
Indri, Utami, Sri wahyuningsih dan Memi Nor hayati. 2015. Analisis Pengendalian
Persediaan Produk dengan Metode Economic Quantity Multi Item Menggunakan
Algoritma Genetika Untuk Mengefisiensikan Biaya Persediaan hasil Peramalan Berbasis
Exponential Smoothing. Samarinda. Jurnal Exponential. Vol.6, No. 2. Diambil dari
https://fmipa.unmul.ac.id/files/docs/[18]%20JURNAL%20INDRI%20UTAMI%20edit.p
df. (20 Juli 2018).
Benevides, Dirce Maria J.G.D.S, Yuliawati. 2014. Optimasi Pengendalian Persediaan
Bahan Kimia Dengan Pendekatan EOQ Menggunakan Algoritma Genetika. Surabaya.
Jurnal Peforma. Vol.13, No.2:117-126. Diambil dari
https://jurnal.uns.ac.id/performa/article/view/9842/8768. (25 Juli 2018).
Nugraha, Aditya. 2015. Analisis Pengendalian Bahan Baku Menggunakan Metode
Economic Order Quantity(EOQ). (Skripsi). Semarang: Universitas Negeri Semarang.
Yuwanda, Aspi. “Analisis Perencanaan dan Pengawasan Persediaan Menggunakan
Metode EOQ - BAB II”ふOnlineぶ, http://aspiyuwandaa.blogspot.com/2016/02/analisis-
perencanaan-dan-pengawasan.html. Diakses (21 Juli 2018).
Slamet, Achmad. 2007. Penganggaran Perencanaan dan Pengendalian Usaha.
Semarang: UNNES PRESS.
Luger, George F, Stubblefield, William A. 1989. Artificial Intelligence and the
Design of Expert Systems, The Benjamin/Cumming Publishing Company, Inc,
107
Lampiran Source Code
Koneksi
<?php
class Koneksi extends CI_Model {
function __construct() {
parent::__construct();
}
function proses_masuk($kd_pengguna, $kt_sandi) {
$kode_pengguna_masuk = $kd_pengguna;
$kata_sandi_masuk = $kt_sandi;
$query = $this->db->query("SELECT * FROM pengguna, cabang WHERE
pengguna.kode_pengguna = cabang.kode_pengguna AND
pengguna.kode_pengguna='$kd_pengguna' AND kata_sandi='$kt_sandi'");
return $query;
}
function notifikasi() {
return $this->db->query("SELECT permintaan.kode_permintaan, SUM(jumlah_permintaan)
AS jumlah,tanggal_permintaan, cabang.nama_cabang FROM
barang,permintaan,permintaan_detail,cabang WHERE barang.kode_barang =
permintaan_detail.kode_barang AND permintaan.kode_permintaan =
permintaan_detail.kode_permintaan AND cabang.kode_cabang = permintaan.kode_cabang
AND MONTH(permintaan.tanggal_permintaan)=MONTH(NOW()) GROUP BY
permintaan.kode_permintaan ORDER BY permintaan.kode_permintaan DESC")->result();
}
function notifikasi_cabang() {
return $this->db->query("SELECT permintaan.kode_permintaan, SUM(jumlah_permintaan)
AS jumlah,tanggal_permintaan, cabang.nama_cabang FROM
108
barang,permintaan,permintaan_detail,cabang WHERE barang.kode_barang =
permintaan_detail.kode_barang AND permintaan.kode_permintaan =
permintaan_detail.kode_permintaan AND cabang.kode_cabang = permintaan.kode_cabang
AND MONTH(permintaan.tanggal_permintaan)=MONTH(NOW()) GROUP BY
permintaan.kode_permintaan ORDER BY permintaan.kode_permintaan DESC")->result();
}
function kategori() {
return $this->db->query("SELECT * FROM kategori ORDER BY nama_kategori ASC")-
>result();
}
public function kode_kategori() {
$q = $this->db->query("select MAX(RIGHT(kode_kategori,4)) as kd_max from kategori");
$kd = "";
if ($q->num_rows() > 0) {
foreach ($q->result() as $k) {
$tmp = ((int) $k->kd_max) + 1;
$kd = sprintf("%04s", $tmp);
}
} else {
$kd = "0001";
}
return "K" . $kd;
}
function edit_kategori($id) {
$edit = $this->db->query("select * FROM kategori WHERE kode_kategori='$id'");
return $edit;
}
109
function barang() {
return $this->db->query("select * from barang, kategori WHERE barang.kode_kategori =
kategori.kode_kategori ORDER BY nama_barang ASC")->result();
}
public function kode_barang() {
$q = $this->db->query("select MAX(RIGHT(kode_barang,6)) as kd_max from barang");
$kd = "";
if ($q->num_rows() > 0) {
foreach ($q->result() as $k) {
$tmp = ((int) $k->kd_max) + 1;
$kd = sprintf("%06s", $tmp);
}
} else {
$kd = "000001";
}
return "B" . $kd;
}
function edit_barang($id) {
$edit = $this->db->query("select * FROM barang, kategori WHERE barang.kode_kategori =
kategori.kode_kategori AND kode_barang='$id'");
return $edit;
}
function pengguna() {
return $this->db->query("SELECT * FROM pengguna WHERE jabatan_pengguna='supervisor'
ORDER BY nama_pengguna")->result();
}
110
public function kode_pengguna() {
$q = $this->db->query("select MAX(RIGHT(kode_pengguna,4)) as kd_max from pengguna");
$kd = "";
if ($q->num_rows() > 0) {
foreach ($q->result() as $k) {
$tmp = ((int) $k->kd_max) + 1;
$kd = sprintf("%04s", $tmp);
}
} else {
$kd = "0001";
}
return "P" . $kd;
}
function edit_pengguna($id) {
$edit = $this->db->query("select * FROM pengguna WHERE kode_pengguna='$id'");
return $edit;
}
function cabang() {
return $this->db->query("SELECT * FROM cabang WHERE divisi='Operasional' ORDER BY
nama_cabang")->result();
}
public function kode_cabang() {
$q = $this->db->query("select MAX(RIGHT(kode_cabang,4)) as kd_max from cabang");
$kd = "";
if ($q->num_rows() > 0) {
111
foreach ($q->result() as $k) {
$tmp = ((int) $k->kd_max) + 1;
$kd = sprintf("%04s", $tmp);
}
} else {
$kd = "0001";
}
return "C" . $kd;
}
function edit_cabang($id) {
$edit = $this->db->query("select * FROM cabang WHERE kode_cabang='$id'");
return $edit;
}
function permintaan() {
return $this->db->query("SELECT "
. " permintaan.kode_permintaan,"
. " cabang.nama_cabang,"
. " permintaan.tanggal_permintaan,"
. " permintaan.tanggal_permintaan,"
. " SUM(permintaan_detail.jumlah_permintaan) AS total_permintaan,"
. " COUNT(permintaan_detail.kode_barang) AS jumlah_items"
. " FROM barang,"
. " permintaan,"
. " permintaan_detail,"
. " cabang"
. " WHERE barang.kode_barang = permintaan_detail.kode_barang"
. " AND permintaan.kode_permintaan = permintaan_detail.kode_permintaan"
112
. " AND cabang.kode_cabang = permintaan.kode_cabang"
. " AND cabang.divisi='Operasional'"
. " GROUP BY permintaan.kode_permintaan"
. " ORDER BY permintaan.kode_permintaan DESC")->result();
}
function header_cetak_laporan_permintaan($kode_permintaan) {
$query_total = $this->db->query("select permintaan.tanggal_permintaan,
cabang.nama_cabang, SUM(permintaan_detail.jumlah_permintaan) AS total from permintaan,
permintaan_detail, cabang WHERE cabang.kode_cabang = permintaan.kode_cabang AND
permintaan.kode_permintaan = permintaan_detail.kode_permintaan AND
permintaan.kode_permintaan='$kode_permintaan'");
return $query_total;
}
function header_cetak_laporan_eoq($kode_eoq) {
$query_total = $this->db->query("select hitung_eoq.biaya_pemesanan,
hitung_eoq.kode_eoq, barang.harga AS harga_satuan, kategori.nama_kategori,
hitung_eoq.tanggal_hitung FROM barang, kategori, hitung_eoq WHERE barang.kode_kategori =
kategori.kode_kategori AND barang.kode_barang = hitung_eoq.kode_barang AND
hitung_eoq.kode_eoq='$kode_eoq'");
return $query_total;
}
function economic_order_quantity() {
return $this->db->query(
"SELECT"
. " barang.kode_barang,"
. "hitung_eoq.kode_eoq, "
. " nama_barang,"
. " total_pemesanan,"
113
. " biaya_pemesanan, "
. " harga_barang,"
. " round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*10/100)),0)
AS EOQ,"
. " round((total_pemesanan*1)/6,0) AS reorder_point, "
. "
round(total_pemesanan/round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*1
0/100)),0),0) AS frekuensi_pemesanan,"
. " round((total_pemesanan/168),0) AS pemakaian_perhari,"
. "
round((round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*10/100)),0)/2)*(har
ga_barang*10/100),0) AS biaya_penyimpanan,"
. "
round(total_pemesanan/round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*1
0/100)),0),0)*biaya_pemesanan AS total_biaya_pemesanan,"
. "
round(round((round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*10/100)),0)/
2)*(harga_barang*10/100),0)+round(total_pemesanan/round(sqrt((2*biaya_pemesanan*total_
pemesanan)/(harga_barang*10/100)),0),0)*biaya_pemesanan,0) AS total_biaya, "
. "
168/round(total_pemesanan/round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_bara
ng*10/100)),0),0) AS periode_pesanan"
. " FROM"
. " barang,"
. " hitung_eoq"
. " WHERE barang.kode_barang = hitung_eoq.kode_barang")->result();
}
public function kode_economic_order_quantity() {
$q = $this->db->query("select MAX(RIGHT(kode_eoq,7)) as kd_max from hitung_eoq");
$kd = "";
if ($q->num_rows() > 0) {
foreach ($q->result() as $k) {
114
$tmp = ((int) $k->kd_max) + 1;
$kd = sprintf("%07s", $tmp);
}
} else {
$kd = "0000001";
}
return "EOQ" . $kd;
}
public function detail_barang_eoq($id) {
$query = $this->db->query("SELECT barang.kode_barang, barang.nama_barang,
barang.harga, SUM(jumlah_permintaan) AS total_pemesanan FROM barang, permintaan_detail
WHERE barang.kode_barang = permintaan_detail.kode_barang AND barang.kode_barang
='$id'");
return $query->result();
}
function simpan_eoq($in) {
$eoq = $this->db->insert('hitung_eoq', $in);
return $eoq;
}
function laporan_permintaan_berdasarkan_periode($dari, $sampai) {
$query = $this->db->query("SELECT permintaan.kode_permintaan,
permintaan.tanggal_permintaan, cabang.nama_cabang, SUM(jumlah_permintaan) AS
total_quantity, COUNT(permintaan_detail.kode_barang) AS total_items FROM permintaan,
permintaan_detail, barang, cabang WHERE permintaan.kode_permintaan =
permintaan_detail.kode_permintaan AND permintaan.kode_cabang = cabang.kode_cabang
AND permintaan_detail.kode_barang = barang.kode_barang AND
permintaan.tanggal_permintaan BETWEEN '" . $dari . "' AND '" . $sampai . "' GROUP BY
kode_permintaan");
return $query->result();
115
}
function laporan_permintaan_berdasarkan_kategori($kode_kategori) {
$query = $this->db->query("SELECT barang.kode_barang, barang.nama_barang,
cabang.nama_cabang, SUM(jumlah_permintaan) AS total_quantity,
COUNT(permintaan_detail.kode_barang) AS total_items FROM permintaan, permintaan_detail,
barang, cabang, kategori WHERE permintaan.kode_permintaan =
permintaan_detail.kode_permintaan AND permintaan.kode_cabang = cabang.kode_cabang
AND permintaan_detail.kode_barang = barang.kode_barang AND kategori.kode_kategori =
barang.kode_kategori AND kategori.kode_kategori = '" . $kode_kategori . "' GROUP BY
permintaan_detail.kode_barang");
return $query->result();
}
function header_cetak_laporan_permintaan_berdasarkan_kategori($kode_barang) {
$query_total = $this->db->query("select permintaan.tanggal_permintaan,
barang.nama_barang, kategori.nama_kategori, SUM(permintaan_detail.jumlah_permintaan) AS
total from permintaan, permintaan_detail,barang, cabang, kategori WHERE
barang.kode_kategori = kategori.kode_kategori AND cabang.kode_cabang =
permintaan.kode_cabang AND permintaan.kode_permintaan =
permintaan_detail.kode_permintaan AND barang.kode_barang =
permintaan_detail.kode_barang AND permintaan_detail.kode_barang='$kode_barang'");
return $query_total;
}
function laporan_permintaan_berdasarkan_cabang($kode_cabang) {
$query = $this->db->query("SELECT permintaan.kode_permintaan,
permintaan.tanggal_permintaan, cabang.nama_cabang, SUM(jumlah_permintaan) AS
total_quantity, COUNT(permintaan_detail.kode_barang) AS total_items FROM permintaan,
permintaan_detail, barang, cabang, kategori WHERE permintaan.kode_permintaan =
permintaan_detail.kode_permintaan AND permintaan.kode_cabang = cabang.kode_cabang
AND permintaan_detail.kode_barang = barang.kode_barang AND kategori.kode_kategori =
barang.kode_kategori AND cabang.kode_cabang = '" . $kode_cabang . "' GROUP BY
kode_permintaan");
return $query->result();
}
116
function laporan_eoq_berdasarkan_periode_hitung($dari, $sampai) {
$query = $this->db->query("SELECT
hitung_eoq.kode_eoq,hitung_eoq.harga_barang,hitung_eoq.total_pemesanan,hitung_eoq.biay
a_pemesanan, hitung_eoq.tanggal_hitung, barang.kode_barang, barang.nama_barang,
kategori.nama_kategori, barang.satuan, hitung_eoq.harga_barang,
round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*10/100)),0) AS EOQ,
round(total_pemesanan/round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*1
0/100)),0),0) AS FREKUENSI_PEMESANAN, round((total_pemesanan*1)/24,0) AS
REORDER_POINT,
round((round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*10/100)),0)/2)*(har
ga_barang*10/100),0) AS TOTAL_BIAYA_PENYIMPANAN,
round(total_pemesanan/round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*1
0/100)),0),0)*biaya_pemesanan AS TOTAL_BIAYA_PERMINTAAN FROM barang, kategori,
hitung_eoq WHERE barang.kode_kategori = kategori.kode_kategori AND barang.kode_barang =
hitung_eoq.kode_barang AND hitung_eoq.tanggal_hitung BETWEEN '" . $dari . "' AND '" .
$sampai . "' GROUP BY hitung_eoq.kode_eoq ORDER BY hitung_eoq.kode_eoq DESC");
return $query->result();
}
function laporan_eoq_berdasarkan_kategori_excel($kode_kategori) {
$query = $this->db->query("SELECT
hitung_eoq.kode_eoq,hitung_eoq.harga_barang,hitung_eoq.total_pemesanan,hitung_eoq.biay
a_pemesanan, hitung_eoq.tanggal_hitung, barang.kode_barang, barang.nama_barang,
kategori.nama_kategori, barang.satuan, hitung_eoq.harga_barang,
round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*10/100)),0) AS EOQ,
round(total_pemesanan/round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*1
0/100)),0),0) AS FREKUENSI_PEMESANAN, round((total_pemesanan*1)/24,0) AS
REORDER_POINT,
round((round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*10/100)),0)/2)*(har
ga_barang*10/100),0) AS TOTAL_BIAYA_PENYIMPANAN,
round(total_pemesanan/round(sqrt((2*biaya_pemesanan*total_pemesanan)/(harga_barang*1
0/100)),0),0)*biaya_pemesanan AS TOTAL_BIAYA_PERMINTAAN FROM barang, kategori,
hitung_eoq WHERE barang.kode_kategori = kategori.kode_kategori AND barang.kode_barang =
hitung_eoq.kode_barang AND kategori.kode_kategori='$kode_kategori' GROUP BY
hitung_eoq.kode_eoq ORDER BY hitung_eoq.kode_eoq DESC");
return $query->result();
}
117
function transaksi_permintaan() {
return $this->db->query("SELECT permintaan.kode_permintaan, cabang.nama_cabang,
permintaan.tanggal_permintaan, SUM(permintaan_detail.total_pemesanan) AS
total_pemesanan FROM permintaan,permintaan_detail, cabang, barang WHERE
permintaan.kode_cabang = cabang.kode_cabang AND permintaan.kode_permintaan =
permintaan_detail.kode_permintaan AND permintaan_detail.kode_barang =
barang.kode_barang GROUP BY permintaan.kode_permintaan ORDER BY
permintaan.kode_permintaan DESC")->result();
}
function permintaan_per_cabang($kode_cabang) {
$permintaan_per_cabang = $this->db->query("SELECT permintaan.kode_permintaan,
cabang.nama_cabang, permintaan.tanggal_permintaan, permintaan.tanggal_permintaan,
SUM(permintaan_detail.jumlah_permintaan) AS total_permintaan,
COUNT(permintaan_detail.kode_barang) AS jumlah_items FROM barang,
permintaan,permintaan_detail, cabang WHERE barang.kode_barang =
permintaan_detail.kode_barang AND permintaan.kode_permintaan =
permintaan_detail.kode_permintaan AND cabang.kode_cabang = permintaan.kode_cabang
AND cabang.kode_cabang = '$kode_cabang' GROUP BY permintaan.kode_permintaan ORDER BY
permintaan.kode_permintaan DESC");
return $permintaan_per_cabang;
}
public function kode_permintaan() {
$q = $this->db->query("select MAX(RIGHT(kode_permintaan,8)) as kd_max from
permintaan");
$kd = "";
if ($q->num_rows() > 0) {
foreach ($q->result() as $k) {
$tmp = ((int) $k->kd_max) + 1;
118
$kd = sprintf("%08s", $tmp);
}
} else {
$kd = "00000001";
}
return "PG" . $kd;
}
public function detail_barang_cabang($id) {
$query = $this->db->query("SELECT barang.kode_barang, barang.nama_barang,
barang.harga, satuan, stok FROM barang WHERE barang.kode_barang ='$id'");
return $query->result();
}
function laporan_permintaan_periode_cabang($dari, $sampai, $kode_cabang) {
$query = $this->db->query("SELECT permintaan.kode_permintaan,
permintaan.tanggal_permintaan, cabang.nama_cabang, SUM(jumlah_permintaan) AS
total_permintaan FROM permintaan, permintaan_detail, barang, cabang WHERE
permintaan.kode_permintaan = permintaan_detail.kode_permintaan AND
permintaan.kode_cabang = cabang.kode_cabang AND permintaan_detail.kode_barang =
barang.kode_barang AND permintaan.kode_cabang = '$kode_cabang' AND
permintaan.tanggal_permintaan BETWEEN '" . $dari . "' AND '" . $sampai . "' GROUP BY
kode_permintaan");
return $query->result();
}
function laporan_permintaan_kategori_cabang($kode_kategori) {
$query = $this->db->query("SELECT barang.kode_barang, barang.nama_barang,
cabang.nama_cabang, SUM(jumlah_permintaan) AS total_quantity,
COUNT(permintaan_detail.kode_barang) AS total_items FROM permintaan, permintaan_detail,
barang, cabang, kategori WHERE permintaan.kode_permintaan =
permintaan_detail.kode_permintaan AND permintaan.kode_cabang = cabang.kode_cabang
AND permintaan_detail.kode_barang = barang.kode_barang AND kategori.kode_kategori =
119
barang.kode_kategori AND kategori.kode_kategori = '" . $kode_kategori . "' GROUP BY
permintaan_detail.kode_barang");
return $query->result();
}
function laporan_permintaan_barang($kode_barang) {
$query = $this->db->query("SELECT permintaan.kode_permintaan,
permintaan.tanggal_permintaan, cabang.nama_cabang, SUM(jumlah_permintaan) AS
total_permintaan FROM permintaan, permintaan_detail, barang, cabang, kategori WHERE
permintaan.kode_permintaan = permintaan_detail.kode_permintaan AND
permintaan.kode_cabang = cabang.kode_cabang AND permintaan_detail.kode_barang =
barang.kode_barang AND kategori.kode_kategori = barang.kode_kategori AND
barang.kode_barang = '" . $kode_barang . "' GROUP BY kode_permintaan");
return $query->result();
}
function laporan_permintaan_barang_cabang($kode_barang, $kode_cabang) {
$query = $this->db->query("SELECT permintaan.kode_permintaan,
permintaan.tanggal_permintaan, cabang.nama_cabang, SUM(jumlah_permintaan) AS
total_permintaan FROM permintaan, permintaan_detail, barang, cabang, kategori WHERE
permintaan.kode_permintaan = permintaan_detail.kode_permintaan AND
permintaan.kode_cabang = cabang.kode_cabang AND permintaan_detail.kode_barang =
barang.kode_barang AND kategori.kode_kategori = barang.kode_kategori AND
permintaan.kode_cabang = '$kode_cabang' AND barang.kode_barang = '" . $kode_barang . "'
GROUP BY kode_permintaan");
return $query->result();
}
function laporan_eoq_barang($kode_barang) {
$query = $this->db->query("SELECT hitung_eoq.kode_eoq, hitung_eoq.tanggal_hitung,
barang.kode_barang, barang.nama_barang, kategori.nama_kategori, barang.satuan,
hitung_eoq.harga_barang FROM barang, kategori, hitung_eoq WHERE barang.kode_kategori =
kategori.kode_kategori AND barang.kode_barang = hitung_eoq.kode_barang AND
barang.kode_barang = '" . $kode_barang . "' GROUP BY barang.kode_barang");
return $query->result();
120
}
public function kurangi_stok($kode_barang, $kurang) {
$q = $this->db->query("select stok from barang where kode_barang='" . $kode_barang .
"'");
$stok = "";
foreach ($q->result() as $d) {
$stok = $d->stok - $kurang;
}
return $stok;
}
public function tambahin_permintaan($kode_barang, $kurang) {
$q = $this->db->query("select total_jual from barang where kode_barang='" .
$kode_barang . "'");
$total_jual = "";
foreach ($q->result() as $d) {
$total_jual = $d->total_jual + $kurang;
}
return $total_jual;
}
public function pilih_satu($table, $data) {
return $this->db->get_where($table, $data);
}
public function tampil_semua($table) {
return $this->db->get($table);
}
121
function updateData($table, $data, $field_key) {
$this->db->update($table, $data, $field_key);
}
function pilihan_cabang() {
$this->db->order_by('kode_cabang');
return $this->db->get('cabang');
}
function simpan_transaksi($table, $data) {
$this->db->insert($table, $data);
}
function simpan($table, $data) {
$this->db->insert($table, $data);
if ($this->db->affected_rows() == '1') {
return TRUE;
}
return FALSE;
}
function perbaharui($table, $data, $fieldID, $ID) {
$this->db->where($fieldID, $ID);
$this->db->update($table, $data);
122
if ($this->db->affected_rows() >= 0) {
return TRUE;
}
return FALSE;
}
function hapus($table, $fieldID, $ID) {
$this->db->where($fieldID, $ID);
$this->db->delete($table);
if ($this->db->affected_rows() == '1') {
return TRUE;
}
return FALSE;
}
function sql_biasa($q) {
return $this->db->query($q);
}
function total_permintaan_per_counter($kode_permintaan) {
$query_total = $this->db->query("select permintaan.tanggal_permintaan,
cabang.nama_cabang, SUM(permintaan_detail.jumlah_permintaan) AS total from permintaan,
permintaan_detail, cabang WHERE cabang.kode_cabang = permintaan.kode_cabang AND
permintaan.kode_permintaan = permintaan_detail.kode_permintaan AND
permintaan.kode_permintaan='$kode_permintaan'");
return $query_total;
}
}
123
Source Code Administrator
<?php
class Administrator extends CI_Controller {
function __construct() {
parent::__construct();
session_start();
}
public function index() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Utama";
$data["notifikasi"] = $this->koneksi->notifikasi();
$this->load->view('administrator/header', $data);
$this->load->view('administrator/index', $data);
$this->load->view('administrator/footer');
124
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function kategori() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
125
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Kategori";
$data["kategori"] = $this->koneksi->kategori();
$this->load->view('administrator/header', $data);
$this->load->view('administrator/kategori/kategori', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function entri_kategori() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
126
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Entri Kategori";
$data["kode_kategori"] = $this->koneksi->kode_kategori();
$this->load->library('form_validation');
$this->data['custom_error'] = '';
if ($this->form_validation->run('kategori') == false) {
$this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' .
validation_errors() . '</div>' : false);
} else {
$data = array(
'kode_kategori' => set_value('kode_kategori'),
'nama_kategori' => set_value('nama_kategori')
);
if ($this->koneksi->simpan('kategori', $data) == TRUE) {
$this->session->set_flashdata('message', '<div class="alert">Satu Data Kategori
Berhasil di Simpan</div>');
127
redirect(base_url() . 'index.php/administrator/kategori');
} else {
$this->data['custom_error'] = '<div class="form_error"><p>An Error
Occured.</p></div>';
}
}
$this->load->view('administrator/header', $data);
$this->load->view('administrator/kategori/entri_kategori', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function edit_kategori() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
128
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$id = '';
if ($this->uri->segment(3) === FALSE) {
$id = '';
} else {
$id = $this->uri->segment(3);
}
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Edit Kategori";
$data['edit_kategori'] = $this->koneksi->edit_kategori($id);
$data['custom_error'] = '';
if ($this->form_validation->run('kategori') == false) {
$data['custom_error'] = (validation_errors() ? '<div class="form_error">' .
validation_errors() . '</div>' : false);
} else {
$data = array(
'kode_kategori' => $this->input->post('kode_kategori'),
'nama_kategori' => $this->input->post('nama_kategori')
);
129
if ($this->koneksi->perbaharui('kategori', $data, 'kode_kategori', $this->input-
>post('kode_kategori')) == TRUE) {
redirect(base_url() . 'index.php/administrator/kategori/');
} else {
$data['custom_error'] = '<div class="form_error"><p>An Error
Occured</p></div>';
}
}
$this->load->view('administrator/header', $data);
$this->load->view('administrator/kategori/edit_kategori', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
130
public function barang() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Barang";
$data["barang"] = $this->koneksi->barang();
$this->load->view('administrator/header', $data);
$this->load->view('administrator/barang/barang', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
131
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function entri_barang() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Entri Barang";
$data["kode_barang"] = $this->koneksi->kode_barang();
$kategori = $this->db->query("SELECT * FROM kategori ORDER BY nama_kategori")-
>result();
$data['pilih_kategori'][''] = ' --- Pilih Kategori --- ';
132
foreach ($kategori as $row) {
$data['pilih_kategori'][$row->kode_kategori] = $row->nama_kategori;
}
$this->load->library('form_validation');
$this->data['custom_error'] = '';
if ($this->form_validation->run('barang') == false) {
$this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' .
validation_errors() . '</div>' : false);
} else {
$data = array(
'kode_barang' => set_value('kode_barang'),
'kode_kategori' => set_value('kode_kategori'),
'nama_barang' => set_value('nama_barang'),
'satuan' => set_value('satuan'),
'harga' => set_value('harga'),
'stok' => set_value('stok')
);
if ($this->koneksi->simpan('barang', $data) == TRUE) {
$this->session->set_flashdata('message', '<div class="alert">Satu Data Barang
Berhasil di Simpan</div>');
redirect(base_url() . 'index.php/administrator/barang');
} else {
$this->data['custom_error'] = '<div class="form_error"><p>An Error
Occured.</p></div>';
}
}
$data['default']['kode_kategori'] = $this->input->post('kode_kategori');
133
$this->load->view('administrator/header', $data);
$this->load->view('administrator/barang/entri_barang', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function edit_barang() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
134
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$id = '';
if ($this->uri->segment(3) === FALSE) {
$id = '';
} else {
$id = $this->uri->segment(3);
}
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Edit Barang";
$kategori = $this->db->query("SELECT * FROM kategori ORDER BY nama_kategori")-
>result();
$data['pilih_kategori'][''] = ' --- Pilih Kategori --- ';
foreach ($kategori as $row) {
$data['pilih_kategori'][$row->kode_kategori] = $row->nama_kategori;
}
$data['edit_barang'] = $this->koneksi->edit_barang($id);
$data['custom_error'] = '';
if ($this->form_validation->run('barang') == false) {
$data['custom_error'] = (validation_errors() ? '<div class="form_error">' .
validation_errors() . '</div>' : false);
} else {
$data = array(
'kode_barang' => $this->input->post('kode_barang'),
'kode_kategori' => $this->input->post('kode_kategori'),
'nama_barang' => $this->input->post('nama_barang'),
135
'satuan' => $this->input->post('satuan'),
'harga' => $this->input->post('harga')
);
if ($this->koneksi->perbaharui('barang', $data, 'kode_barang', $this->input-
>post('kode_barang')) == TRUE) {
redirect(base_url() . 'index.php/administrator/barang/');
} else {
$data['custom_error'] = '<div class="form_error"><p>An Error
Occured</p></div>';
}
}
$data['default']['kode_kategori'] = $this->input->post('kode_kategori');
$this->load->view('administrator/header', $data);
$this->load->view('administrator/barang/edit_barang', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
136
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function pengguna() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Pengguna";
$data["pengguna"] = $this->koneksi->pengguna();
$this->load->view('administrator/header', $data);
$this->load->view('administrator/pengguna/pengguna', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
137
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function entri_pengguna() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Entri Pengguna";
$data["kode_pengguna"] = $this->koneksi->kode_pengguna();
138
$this->load->library('form_validation');
$this->data['custom_error'] = '';
if ($this->form_validation->run('pengguna') == false) {
$this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' .
validation_errors() . '</div>' : false);
} else {
$data = array(
'kode_pengguna' => set_value('kode_pengguna'),
'kata_sandi' => set_value('kata_sandi'),
'nama_pengguna' => set_value('nama_pengguna'),
'telepon_pengguna' => set_value('telepon_pengguna'),
'jabatan_pengguna' => set_value('jabatan_pengguna')
);
if ($this->koneksi->simpan('pengguna', $data) == TRUE) {
$this->session->set_flashdata('message', '<div class="alert">Satu Data Pengguna
Berhasil di Simpan</div>');
redirect(base_url() . 'index.php/administrator/pengguna');
} else {
$this->data['custom_error'] = '<div class="form_error"><p>An Error
Occured.</p></div>';
}
}
$this->load->view('administrator/header', $data);
$this->load->view('administrator/pengguna/entri_pengguna', $data);
$this->load->view('administrator/footer');
} else {
?>
139
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function edit_pengguna() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$id = '';
140
if ($this->uri->segment(3) === FALSE) {
$id = '';
} else {
$id = $this->uri->segment(3);
}
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Edit Pengguna";
$data['edit_pengguna'] = $this->koneksi->edit_pengguna($id);
$data['custom_error'] = '';
if ($this->form_validation->run('pengguna') == false) {
$data['custom_error'] = (validation_errors() ? '<div class="form_error">' .
validation_errors() . '</div>' : false);
} else {
$data = array(
'kode_pengguna' => $this->input->post('kode_pengguna'),
'kata_sandi' => $this->input->post('kata_sandi'),
'nama_pengguna' => $this->input->post('nama_pengguna'),
'telepon_pengguna' => $this->input->post('telepon_pengguna'),
'jabatan_pengguna' => $this->input->post('jabatan_pengguna')
);
if ($this->koneksi->perbaharui('pengguna', $data, 'kode_pengguna', $this->input-
>post('kode_pengguna')) == TRUE) {
redirect(base_url() . 'index.php/administrator/pengguna/');
} else {
$data['custom_error'] = '<div class="form_error"><p>An Error
Occured</p></div>';
}
}
141
$this->load->view('administrator/header', $data);
$this->load->view('administrator/pengguna/edit_pengguna', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function cabang() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
142
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Cabang";
$data["cabang"] = $this->koneksi->cabang();
$this->load->view('administrator/header', $data);
$this->load->view('administrator/cabang/cabang', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
143
}
public function entri_cabang() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Entri Cabang";
$data["kode_cabang"] = $this->koneksi->kode_cabang();
$this->load->library('form_validation');
$this->data['custom_error'] = '';
$pengguna = $this->db->query("SELECT * FROM cabang RIGHT OUTER JOIN pengguna
ON pengguna.kode_pengguna = cabang.kode_pengguna WHERE jabatan_pengguna='supervisor'
AND cabang.kode_pengguna IS NULL")->result();
$data['pilih_pengguna'][''] = ' --- Pilih Supervisor --- ';
foreach ($pengguna as $row) {
$data['pilih_pengguna'][$row->kode_pengguna] = $row->nama_pengguna;
}
if ($this->form_validation->run('cabang') == false) {
$this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' .
validation_errors() . '</div>' : false);
144
} else {
$data = array(
'kode_cabang' => set_value('kode_cabang'),
'nama_cabang' => set_value('nama_cabang'),
'telepon_cabang' => set_value('telepon_cabang'),
'alamat_cabang' => set_value('alamat_cabang'),
'kode_pengguna' => $this->input->post('kode_pengguna'),
'divisi' => $this->input->post('divisi')
);
if ($this->koneksi->simpan('cabang', $data) == TRUE) {
$this->session->set_flashdata('message', '<div class="alert">Satu Data Cabang
Berhasil di Simpan</div>');
redirect(base_url() . 'index.php/administrator/cabang');
} else {
$this->data['custom_error'] = '<div class="form_error"><p>An Error
Occured.</p></div>';
}
}
$data['default']['kode_pengguna'] = $this->input->post('kode_pengguna');
$this->load->view('administrator/header', $data);
$this->load->view('administrator/cabang/entri_cabang', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
145
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function edit_cabang() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$id = '';
if ($this->uri->segment(3) === FALSE) {
$id = '';
} else {
$id = $this->uri->segment(3);
}
146
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Edit Cabang";
$data['edit_cabang'] = $this->koneksi->edit_cabang($id);
$pengguna = $this->db->query("SELECT * FROM pengguna WHERE
jabatan_pengguna='Supervisor'")->result();
$data['pilih_pengguna'][''] = ' --- Pilih Supervisor --- ';
foreach ($pengguna as $row) {
$data['pilih_pengguna'][$row->kode_pengguna] = $row->nama_pengguna;
}
$data['custom_error'] = '';
if ($this->form_validation->run('cabang') == false) {
$data['custom_error'] = (validation_errors() ? '<div class="form_error">' .
validation_errors() . '</div>' : false);
} else {
$data = array(
'kode_cabang' => $this->input->post('kode_cabang'),
'nama_cabang' => $this->input->post('nama_cabang'),
'telepon_cabang' => $this->input->post('telepon_cabang'),
'alamat_cabang' => $this->input->post('alamat_cabang'),
'kode_pengguna' => $this->input->post('kode_pengguna'),
'divisi' => $this->input->post('divisi')
);
if ($this->koneksi->perbaharui('cabang', $data, 'kode_cabang', $this->input-
>post('kode_cabang')) == TRUE) {
redirect(base_url() . 'index.php/administrator/cabang/');
} else {
$data['custom_error'] = '<div class="form_error"><p>An Error
Occured</p></div>';
147
}
}
$data['default']['kode_pengguna'] = $this->input->post('kode_pengguna');
$this->load->view('administrator/header', $data);
$this->load->view('administrator/cabang/edit_cabang', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function permintaan() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
148
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Permintaan Barang";
$data["permintaan"] = $this->koneksi->permintaan();
$this->load->view('administrator/header', $data);
$this->load->view('administrator/permintaan/permintaan', $data);
$this->load->view('administrator/footer');
$this->session->unset_userdata('limit_add_cart');
$this->cart->destroy();
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
149
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function cetak_permintaan($kode_permintaan) {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Cetak Laporan permintaan";
// $this->pdf->FPDF('L', 'cm', 'A4');
$this->load->library('fpdf_gen');
$this->fpdf->AddPage();
$this->fpdf->Ln();
$this->fpdf->setFont('Arial', 'B', 14);
$this->fpdf->Text(8.3, 1, 'LAPORAN PERMINTAAN BARANG PT. DUNKINDO LESTARI');
$this->fpdf->SetFont('Arial', 'B', 10);
150
$this->fpdf->Text(10.3, 1.5, 'Jl. Hayam Wuruk No. 9 A Jakarta Pusat Telp (021)
3858567');
$this->fpdf->Line(28.7, 2, 1, 2);
$this->fpdf->ln(1.6);
$this->fpdf->SetFont('Arial', '', 10);
$this->fpdf->Text(1, 2.7, 'Kode Permintaan :');
$this->fpdf->Text(1, 3.5, 'Cabang :');
$this->fpdf->Text(10.1, 2.7, 'Hari, Tanggal :');
$this->fpdf->Text(10.1, 3.5, 'Total Quantity :');
$this->fpdf->SetFont('Arial', '', 10);
$this->fpdf->SetFont('Arial', 'B', 10);
$this->fpdf->Text(4, 2.7, $kode_permintaan);
$jumlah = $this->koneksi->header_cetak_laporan_permintaan($kode_permintaan);
$jum = 0;
$tanggal_permintaan;
$nama_cabang;
foreach ($jumlah->result() as $harga) {
$jum +=$harga->total;
$tanggal_permintaan = $harga->tanggal_permintaan;
$nama_cabang = $harga->nama_cabang;
$hari_array = array('Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu');
$hr = date('w', strtotime($harga->tanggal_permintaan));
$hari = $hari_array[$hr];
$tgl = date('d-m-Y', strtotime($harga->tanggal_permintaan));
$tanggal_permintaan = "$hari, $tgl";
}
$this->fpdf->SetFont('Arial', 'B', 10);
$this->fpdf->Text(12.7, 3.5, $jum);
151
$this->fpdf->Text(12.5, 2.7, $tanggal_permintaan);
$this->fpdf->Text(2.5, 3.5, $nama_cabang);
$this->fpdf->ln(1.5);
$this->fpdf->Cell(1, 0.5, 'No', 1, 0, 'C');
$this->fpdf->Cell(3, 0.5, 'Kode Barang', 1, 0, 'L');
$this->fpdf->Cell(11, 0.5, 'Kategori', 1, 0, 'L');
$this->fpdf->Cell(7, 0.5, 'Nama Barang', 1, 0, 'L');
$this->fpdf->Cell(2.5, 0.5, 'Quantity', 1, 0, 'L');
$this->fpdf->Cell(3, 0.5, 'Satuan', 1, 0, 'L');
$this->fpdf->Ln();
$user = 'root';
$password = '';
$db = 'skripsi';
$host = 'localhost';
$link = mysqli_init();
$success = mysqli_real_connect(
$link,
$host,
$user,
$password,
$db
);
152
$SQL = mysql_query("$success, select * from permintaan_detail, barang, kategori
WHERE permintaan_detail.kode_barang = barang.kode_barang AND barang.kode_kategori =
kategori.kode_kategori AND kode_permintaan='$kode_permintaan'");
$jumlah = mysql_num_rows($SQL);
$dataArray = array();
$no = 0;
while ($row = mysql_fetch_array($SQL, MYSQL_ASSOC)) {
$no++;
$this->fpdf->SetFont('Arial', '', 10);
$this->fpdf->Cell(1, 0.5, $row_array['no'] = $no, 1, 0, 'C');
$this->fpdf->Cell(3, 0.5, $row_array['kode_barang'] = $row['kode_barang'], 1, 0, 'L');
$this->fpdf->Cell(11, 0.5, $row_array['nama_kategori'] = $row['nama_kategori'], 1, 0,
'L');
$this->fpdf->Cell(7, 0.5, $row_array['nama_barang'] = $row['nama_barang'], 1, 0,
'L');
$this->fpdf->Cell(2.5, 0.5, $row_array['jumlah_permintaan'] =
$row['jumlah_permintaan'], 1, 0, 'L');
$this->fpdf->Cell(3, 0.5, $row_array['satuan'] = $row['satuan'], 1, 0, 'L');
$this->fpdf->Ln();
array_push($dataArray, $row_array);
}
$this->fpdf->Output();
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
153
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function rumus_eoq() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Economic Order Quantity";
$data["eoq"] = $this->koneksi->economic_order_quantity();
$this->load->view('administrator/header', $data);
$this->load->view('administrator/rumus_eoq/rumus_eoq', $data);
$this->load->view('administrator/footer');
154
$this->session->unset_userdata('limit_add_cart');
$this->cart->destroy();
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
function hitung_eoq() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
155
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Hitung EOQ";
$data["kode_eoq"] = $this->koneksi->kode_economic_order_quantity();
$data["barang"] = $this->koneksi->sql_biasa("SELECT * FROM barang,
permintaan_detail WHERE barang.kode_barang = permintaan_detail.kode_barang GROUP BY
barang.kode_barang")->result();
$this->load->view('administrator/header', $data);
$this->load->view('administrator/rumus_eoq/hitung_eoq', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
156
function detail_barang() {
$id = $this->input->post('kode_barang');
$data = array(
'detail_barang' => $this->koneksi->detail_barang_eoq($id),
);
$this->load->view('administrator/rumus_eoq/detail_barang', $data);
}
function simpan_eoq() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Hitung EOQ";
$in = array();
$in['kode_eoq'] = $this->input->post('kode_eoq');
$in['kode_barang'] = $this->input->post('kode_barang');
$in['harga_barang'] = $this->input->post('harga_barang');
$in['total_pemesanan'] = $this->input->post('total_pemesanan');
$in['biaya_pemesanan'] = $this->input->post('biaya_pemesanan');
$in['tanggal_hitung'] = date("Y-m-d", strtotime($this->input->post('tanggal_hitung')));
157
$this->koneksi->simpan_eoq($in);
echo "<meta http-equiv='refresh' content='0; url=" . base_url() .
"index.php/administrator/rumus_eoq'>";
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function cetak_eoq($kode_eoq) {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
158
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Cetak Laporan Economic Order Quantity";
$this->pdf->FPDF('L', 'cm', 'A4');
$this->pdf->AddPage();
$this->pdf->Ln();
$this->pdf->setFont('Arial', 'B', 14);
$this->pdf->Text(8.3, 1, 'LAPORAN ECONOMIC ORDER QUANTITY PT. DUNKINDO
LESTARI');
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(10.3, 1.5, 'Jl. Hayam Wuruk No. 9 A Jakarta Pusat Telp (021)
3858567');
$this->pdf->Line(28.7, 2, 1, 2);
$this->pdf->ln(1.6);
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->Text(1, 2.7, 'Kode Permintaan :');
$this->pdf->Text(1, 3.5, 'Kategori :');
$this->pdf->Text(10.1, 2.7, 'Hari, Tanggal :');
$this->pdf->Text(10.1, 3.5, 'Biaya Pemesanan :');
$this->pdf->Text(18.1, 2.7, 'Harga Satuan :');
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(4, 2.7, $kode_eoq);
$jumlah = $this->koneksi->header_cetak_laporan_eoq($kode_eoq);
$biaya_pemesanan = 0;
159
$tanggal_hitung;
$nama_kategori;
$harga_satuan;
foreach ($jumlah->result() as $harga) {
$biaya_pemesanan +=$harga->biaya_pemesanan;
$tanggal_hitung = $harga->tanggal_hitung;
$nama_kategori = $harga->nama_kategori;
$harga_satuan = $harga->harga_satuan;
$hari_array = array('Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu');
$hr = date('w', strtotime($harga->tanggal_hitung));
$hari = $hari_array[$hr];
$tgl = date('d-m-Y', strtotime($harga->tanggal_hitung));
$tanggal_hitung = "$hari, $tgl";
}
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(13.3, 3.5, $biaya_pemesanan);
$this->pdf->Text(12.5, 2.7, $tanggal_hitung);
$this->pdf->Text(2.6, 3.5, $nama_kategori);
$this->pdf->Text(20.6, 2.7, $harga_satuan);
$this->pdf->ln(1.5);
$this->pdf->Cell(1, 0.5, 'No', 1, 0, 'C');
$this->pdf->Cell(3, 0.5, 'Kode Barang', 1, 0, 'L');
$this->pdf->Cell(10.5, 0.5, 'Kategori', 1, 0, 'L');
$this->pdf->Cell(7, 0.5, 'Nama Barang', 1, 0, 'L');
$this->pdf->Cell(3.3, 0.5, 'Total Permintaan', 1, 0, 'L');
$this->pdf->Cell(2.7, 0.5, 'Satuan', 1, 0, 'L');
$this->pdf->Ln();
160
$SQL = mysql_query("select * FROM barang, kategori, hitung_eoq WHERE
barang.kode_kategori = kategori.kode_kategori AND hitung_eoq.kode_barang =
barang.kode_barang AND kode_eoq='$kode_eoq'");
$jumlah = mysql_num_rows($SQL);
$dataArray = array();
$no = 0;
while ($row = mysql_fetch_array($SQL, MYSQL_ASSOC)) {
$no++;
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->Cell(1, 0.5, $row_array['no'] = $no, 1, 0, 'C');
$this->pdf->Cell(3, 0.5, $row_array['kode_barang'] = $row['kode_barang'], 1, 0, 'L');
$this->pdf->Cell(10.5, 0.5, $row_array['nama_kategori'] = $row['nama_kategori'], 1,
0, 'L');
$this->pdf->Cell(7, 0.5, $row_array['nama_barang'] = $row['nama_barang'], 1, 0, 'L');
$this->pdf->Cell(3.3, 0.5, $row_array['total_pemesanan'] = $row['total_pemesanan'],
1, 0, 'L');
$this->pdf->Cell(2.7, 0.5, $row_array['satuan'] = $row['satuan'], 1, 0, 'L');
$this->pdf->Ln();
array_push($dataArray, $row_array);
}
$this->pdf->Output();
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
161
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function laporan_permintaan_berdasarkan_periode() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Laporan Permintaan Berdasarkan Periode";
$dari = date('Y-m-d', strtotime($this->input->post('dari')));
$sampai = date('Y-m-d', strtotime($this->input->post('sampai')));
$data['laporan_permintaan'] = $this->koneksi-
>laporan_permintaan_berdasarkan_periode($dari, $sampai);
$data['default']['dari'] = $this->input->post('dari');
162
$data['default']['sampai'] = $this->input->post('sampai');
$this->load->view('administrator/header', $data);
$this->load-
>view('administrator/laporan_permintaan_berdasarkan_periode/laporan_permintaan_berdasa
rkan_periode', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function cetak_permintaan_berdasarkan_periode($kode_permintaan) {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
163
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Cetak Laporan permintaan";
$this->pdf->FPDF('L', 'cm', 'A4');
$this->pdf->AddPage();
$this->pdf->Ln();
$this->pdf->setFont('Arial', 'B', 14);
$this->pdf->Text(8.3, 1, 'LAPORAN PERMINTAAN BARANG PT. DUNKINDO LESTARI');
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(10.3, 1.5, 'Jl. Hayam Wuruk No. 9 A Jakarta Pusat Telp (021)
3858567');
$this->pdf->Line(28.7, 2, 1, 2);
$this->pdf->ln(1.6);
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->Text(1, 2.7, 'Kode Permintaan :');
$this->pdf->Text(1, 3.5, 'Cabang :');
$this->pdf->Text(10.1, 2.7, 'Hari, Tanggal :');
$this->pdf->Text(10.1, 3.5, 'Total Quantity :');
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(4, 2.7, $kode_permintaan);
$jumlah = $this->koneksi->header_cetak_laporan_permintaan($kode_permintaan);
164
$jum = 0;
$tanggal_permintaan;
$nama_cabang;
foreach ($jumlah->result() as $harga) {
$jum +=$harga->total;
$tanggal_permintaan = $harga->tanggal_permintaan;
$nama_cabang = $harga->nama_cabang;
$hari_array = array('Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu');
$hr = date('w', strtotime($harga->tanggal_permintaan));
$hari = $hari_array[$hr];
$tgl = date('d-m-Y', strtotime($harga->tanggal_permintaan));
$tanggal_permintaan = "$hari, $tgl";
}
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(12.7, 3.5, $jum);
$this->pdf->Text(12.5, 2.7, $tanggal_permintaan);
$this->pdf->Text(2.5, 3.5, $nama_cabang);
$this->pdf->ln(1.5);
$this->pdf->Cell(1, 0.5, 'No', 1, 0, 'C');
$this->pdf->Cell(3, 0.5, 'Kode Barang', 1, 0, 'L');
$this->pdf->Cell(11, 0.5, 'Kategori', 1, 0, 'L');
$this->pdf->Cell(7, 0.5, 'Nama Barang', 1, 0, 'L');
$this->pdf->Cell(2.5, 0.5, 'Quantity', 1, 0, 'L');
$this->pdf->Cell(3, 0.5, 'Satuan', 1, 0, 'L');
$this->pdf->Ln();
$SQL = mysql_query("select * from permintaan_detail, barang, kategori WHERE
permintaan_detail.kode_barang = barang.kode_barang AND barang.kode_kategori =
kategori.kode_kategori AND kode_permintaan='$kode_permintaan'");
165
$jumlah = mysql_num_rows($SQL);
$dataArray = array();
$no = 0;
while ($row = mysql_fetch_array($SQL, MYSQL_ASSOC)) {
$no++;
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->Cell(1, 0.5, $row_array['no'] = $no, 1, 0, 'C');
$this->pdf->Cell(3, 0.5, $row_array['kode_barang'] = $row['kode_barang'], 1, 0, 'L');
$this->pdf->Cell(11, 0.5, $row_array['nama_kategori'] = $row['nama_kategori'], 1, 0,
'L');
$this->pdf->Cell(7, 0.5, $row_array['nama_barang'] = $row['nama_barang'], 1, 0, 'L');
$this->pdf->Cell(2.5, 0.5, $row_array['jumlah_permintaan'] =
$row['jumlah_permintaan'], 1, 0, 'L');
$this->pdf->Cell(3, 0.5, $row_array['satuan'] = $row['satuan'], 1, 0, 'L');
$this->pdf->Ln();
array_push($dataArray, $row_array);
}
$this->pdf->Output();
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
166
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function laporan_permintaan_berdasarkan_kategori() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Laporan Permintaan Berdasarkan Kategori";
$kategori = $this->db->query("SELECT * FROM kategori")->result();
foreach ($kategori as $row) {
$data['pilih_kategori'][$row->kode_kategori] = $row->nama_kategori;
}
$kode_kategori = $this->input->post('kode_kategori');
$data['laporan_permintaan'] = $this->koneksi-
>laporan_permintaan_berdasarkan_kategori($kode_kategori);
$data['default']['kode_kategori'] = $this->input->post('kode_kategori');
$this->load->view('administrator/header', $data);
167
$this->load-
>view('administrator/laporan_permintaan_berdasarkan_kategori/laporan_permintaan_berdasa
rkan_kategori', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function cetak_permintaan_berdasarkan_kategori($kode_barang) {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
168
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Cetak Laporan permintaan";
$this->pdf->FPDF('L', 'cm', 'A4');
$this->pdf->AddPage();
$this->pdf->Ln();
$this->pdf->setFont('Arial', 'B', 14);
$this->pdf->Text(8.3, 1, 'LAPORAN PERMINTAAN BARANG PT. DUNKINDO LESTARI');
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(10.3, 1.5, 'Jl. Hayam Wuruk No. 9 A Jakarta Pusat Telp (021)
3858567');
$this->pdf->Line(28.7, 2, 1, 2);
$this->pdf->ln(1.6);
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->Text(1, 2.7, 'Kode Barang :');
$this->pdf->Text(1, 3.5, 'Nama Barang :');
$this->pdf->Text(14.1, 2.7, 'Kategori :');
$this->pdf->Text(14.1, 3.5, 'Total Quantity :');
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(3.4, 2.7, $kode_barang);
$jumlah = $this->koneksi-
>header_cetak_laporan_permintaan_berdasarkan_kategori($kode_barang);
$jum = 0;
169
$nama_kategori;
$nama_barang;
foreach ($jumlah->result() as $harga) {
$jum +=$harga->total;
$nama_kategori = $harga->nama_kategori;
$nama_barang = $harga->nama_barang;
}
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(16.6, 3.5, $jum);
$this->pdf->Text(15.8, 2.7, $nama_kategori);
$this->pdf->Text(3.5, 3.5, $nama_barang);
$this->pdf->ln(1.5);
$this->pdf->Cell(1, 0.5, 'No', 1, 0, 'C');
$this->pdf->Cell(3.4, 0.5, 'Kode Permintaan', 1, 0, 'L');
$this->pdf->Cell(11, 0.5, 'Nama Cabang', 1, 0, 'L');
$this->pdf->Cell(7, 0.5, 'Quantity', 1, 0, 'L');
$this->pdf->Cell(4, 0.5, 'Hari, Tanggal', 1, 0, 'L');
$this->pdf->Ln();
$SQL = mysql_query("select * from permintaan_detail, barang, kategori, cabang,
permintaan WHERE permintaan.kode_permintaan = permintaan_detail.kode_permintaan AND
permintaan.kode_cabang = cabang.kode_cabang AND permintaan_detail.kode_barang =
barang.kode_barang AND barang.kode_kategori = kategori.kode_kategori AND
barang.kode_barang='$kode_barang' ORDER BY permintaan.tanggal_permintaan DESC");
$jumlah = mysql_num_rows($SQL);
$dataArray = array();
$no = 0;
while ($row = mysql_fetch_array($SQL, MYSQL_ASSOC)) {
$hari_array = array('Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu');
170
$hr = date('w', strtotime($row['tanggal_permintaan']));
$hari = $hari_array[$hr];
$tgl = date('d-m-Y', strtotime($row['tanggal_permintaan']));
$tanggal_permintaan = "$hari, $tgl";
$no++;
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->Cell(1, 0.5, $row_array['no'] = $no, 1, 0, 'C');
$this->pdf->Cell(3.4, 0.5, $row_array['kode_permintaan'] =
$row['kode_permintaan'], 1, 0, 'L');
$this->pdf->Cell(11, 0.5, $row_array['nama_cabang'] = $row['nama_cabang'], 1, 0,
'L');
$this->pdf->Cell(7, 0.5, $row_array['jumlah_permintaan'] =
$row['jumlah_permintaan'], 1, 0, 'L');
$this->pdf->Cell(4, 0.5, $tanggal_permintaan = $tanggal_permintaan, 1, 0, 'L');
$this->pdf->Ln();
array_push($dataArray, $row_array);
}
$this->pdf->Output();
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
171
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function laporan_permintaan_berdasarkan_cabang() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Laporan Permintaan Berdasarkan Cabang";
$cabang = $this->db->query("SELECT * FROM cabang WHERE divisi = 'Operasional'")-
>result();
foreach ($cabang as $row) {
$data['pilih_cabang'][$row->kode_cabang] = $row->nama_cabang;
}
$kode_cabang = $this->input->post('kode_cabang');
$data['laporan_permintaan'] = $this->koneksi-
>laporan_permintaan_berdasarkan_cabang($kode_cabang);
172
$data['default']['kode_cabang'] = $this->input->post('kode_cabang');
$this->load->view('administrator/header', $data);
$this->load-
>view('administrator/laporan_permintaan_berdasarkan_cabang/laporan_permintaan_berdasar
kan_cabang', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function cetak_permintaan_berdasarkan_cabang($kode_permintaan) {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
173
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Cetak Laporan permintaan";
$this->pdf->FPDF('L', 'cm', 'A4');
$this->pdf->AddPage();
$this->pdf->Ln();
$this->pdf->setFont('Arial', 'B', 14);
$this->pdf->Text(8.3, 1, 'LAPORAN PERMINTAAN BARANG PT. DUNKINDO LESTARI');
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(10.3, 1.5, 'Jl. Hayam Wuruk No. 9 A Jakarta Pusat Telp (021)
3858567');
$this->pdf->Line(28.7, 2, 1, 2);
$this->pdf->ln(1.6);
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->Text(1, 2.7, 'Kode Permintaan :');
$this->pdf->Text(1, 3.5, 'Cabang :');
$this->pdf->Text(10.1, 2.7, 'Hari, Tanggal :');
$this->pdf->Text(10.1, 3.5, 'Total Quantity :');
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(4, 2.7, $kode_permintaan);
$jumlah = $this->koneksi->header_cetak_laporan_permintaan($kode_permintaan);
174
$jum = 0;
$tanggal_permintaan;
$nama_cabang;
foreach ($jumlah->result() as $harga) {
$jum +=$harga->total;
$tanggal_permintaan = $harga->tanggal_permintaan;
$nama_cabang = $harga->nama_cabang;
$hari_array = array('Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu');
$hr = date('w', strtotime($harga->tanggal_permintaan));
$hari = $hari_array[$hr];
$tgl = date('d-m-Y', strtotime($harga->tanggal_permintaan));
$tanggal_permintaan = "$hari, $tgl";
}
$this->pdf->SetFont('Arial', 'B', 10);
$this->pdf->Text(12.7, 3.5, $jum);
$this->pdf->Text(12.5, 2.7, $tanggal_permintaan);
$this->pdf->Text(2.5, 3.5, $nama_cabang);
$this->pdf->ln(1.5);
$this->pdf->Cell(1, 0.5, 'No', 1, 0, 'C');
$this->pdf->Cell(3, 0.5, 'Kode Barang', 1, 0, 'L');
$this->pdf->Cell(11, 0.5, 'Kategori', 1, 0, 'L');
$this->pdf->Cell(7, 0.5, 'Nama Barang', 1, 0, 'L');
$this->pdf->Cell(2.5, 0.5, 'Quantity', 1, 0, 'L');
$this->pdf->Cell(3, 0.5, 'Satuan', 1, 0, 'L');
$this->pdf->Ln();
$SQL = mysql_query("select * from permintaan_detail, barang, kategori WHERE
permintaan_detail.kode_barang = barang.kode_barang AND barang.kode_kategori =
kategori.kode_kategori AND kode_permintaan='$kode_permintaan'");
175
$jumlah = mysql_num_rows($SQL);
$dataArray = array();
$no = 0;
while ($row = mysql_fetch_array($SQL, MYSQL_ASSOC)) {
$no++;
$this->pdf->SetFont('Arial', '', 10);
$this->pdf->Cell(1, 0.5, $row_array['no'] = $no, 1, 0, 'C');
$this->pdf->Cell(3, 0.5, $row_array['kode_barang'] = $row['kode_barang'], 1, 0, 'L');
$this->pdf->Cell(11, 0.5, $row_array['nama_kategori'] = $row['nama_kategori'], 1, 0,
'L');
$this->pdf->Cell(7, 0.5, $row_array['nama_barang'] = $row['nama_barang'], 1, 0, 'L');
$this->pdf->Cell(2.5, 0.5, $row_array['jumlah_permintaan'] =
$row['jumlah_permintaan'], 1, 0, 'L');
$this->pdf->Cell(3, 0.5, $row_array['satuan'] = $row['satuan'], 1, 0, 'L');
$this->pdf->Ln();
array_push($dataArray, $row_array);
}
$this->pdf->Output();
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
176
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function laporan_eoq_berdasarkan_periode_hitung() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Laporan Hitung Economic Order Quantity Berdasarkan Periode";
$dari = date('Y-m-d', strtotime($this->input->post('dari')));
$sampai = date('Y-m-d', strtotime($this->input->post('sampai')));
$data['default']['dari'] = $this->input->post('dari');
$data['default']['sampai'] = $this->input->post('sampai');
$this->load->view('administrator/header', $data);
$this->load-
>view('administrator/laporan_eoq_berdasarkan_periode_hitung/laporan_eoq_berdasarkan_pe
riode_hitung', $data);
$this->load->view('administrator/footer');
} else {
177
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
function laporan_eoq_berdasarkan_periode_hitung_excel() {
$dari = date('Y-m-d', strtotime($this->input->post('dari')));
$sampai = date('Y-m-d', strtotime($this->input->post('sampai')));
$data['laporan_eoq'] = $this->koneksi->laporan_eoq_berdasarkan_periode_hitung($dari,
$sampai);
$data['default']['dari'] = $this->input->post('dari');
$data['default']['sampai'] = $this->input->post('sampai');
$this->load-
>view('administrator/laporan_eoq_berdasarkan_periode_hitung/laporan_eoq_berdasarkan_pe
riode_hitung_excel', $data);
}
public function laporan_eoq_berdasarkan_kategori() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
178
$pecah = explode("|", $session);
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Laporan permintaan";
$kategori = $this->db->query("SELECT * FROM kategori,barang,hitung_eoq WHERE
barang.kode_kategori = kategori.kode_kategori AND barang.kode_barang =
hitung_eoq.kode_barang")->result();
foreach ($kategori as $row) {
$data['pilih_kategori'][$row->kode_kategori] = $row->nama_kategori;
}
$kode_kategori = $this->input->post('kode_kategori');
$data['default']['kode_kategori'] = $this->input->post('kode_kategori');
$this->load->view('administrator/header', $data);
$this->load-
>view('administrator/laporan_eoq_berdasarkan_kategori/laporan_eoq_berdasarkan_kategori',
$data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
179
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
function laporan_eoq_berdasarkan_kategori_excel() {
$kategori = $this->db->query("SELECT * FROM kategori")->result();
foreach ($kategori as $row) {
$data['pilih_kategori'][$row->kode_kategori] = $row->nama_kategori;
}
$kode_kategori = $this->input->post('kode_kategori');
$data['laporan_eoq'] = $this->koneksi-
>laporan_eoq_berdasarkan_kategori_excel($kode_kategori);
$data['default']['kode_kategori'] = $this->input->post('kode_kategori');
$this->load-
>view('administrator/laporan_eoq_berdasarkan_kategori/laporan_eoq_berdasarkan_kategori_
excel', $data);
}
public function algoritma() {
$session = isset($_SESSION['pengguna_masuk']) ? $_SESSION['pengguna_masuk'] : '';
if ($session != "") {
$pecah = explode("|", $session);
180
$data["kode_pengguna"] = $pecah[0];
$data["kata_sandi"] = $pecah[1];
$data["nama_pengguna"] = $pecah[2];
$data["telepon_pengguna"] = $pecah[3];
$data["jabatan_pengguna"] = $pecah[4];
$data["kode_cabang"] = $pecah[5];
$data["nama_cabang"] = $pecah[6];
if ($data["jabatan_pengguna"] == "administrator") {
$data['judul_aplikasi'] = $this->config->item('judul_aplikasi');
$data['halaman'] = "Algortima";
$data["notifikasi"] = $this->koneksi->notifikasi();
$this->load->view('administrator/header', $data);
$this->load->view('administrator/algoritma', $data);
$this->load->view('administrator/footer');
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda tidak berhak masuk
ke Halaman Administrator");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
} else {
?>
<script type="text/javascript" language="javascript">alert("Anda belum Masuk\nAnda
harus Masuk untuk mengakses halaman ini");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
181
}
}
}
Source Code MASUK
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Masuk extends CI_Controller {
function __construct() {
parent::__construct();
session_start();
}
public function index() {
$this->load->view('masuk');
public function proses_masuk() {
$kode_pengguna = $this->input->post('kode_pengguna_masuk');
$kata_sandi = $this->input->post('kata_sandi_masuk');
$masuk = $this->koneksi->proses_masuk($kode_pengguna, $kata_sandi);
if (count($masuk->result_array()) > 0) {
foreach ($masuk->result() as $pengguna) {
$sesi_pengguna = $pengguna->kode_pengguna . "|" . $pengguna->kata_sandi . "|" .
$pengguna->nama_pengguna . "|" . $pengguna->telepon_pengguna . "|" . $pengguna-
>jabatan_pengguna . "|" . $pengguna->kode_cabang . "|" . $pengguna->nama_cabang;
$apabila = $pengguna->jabatan_pengguna;
182
}
$_SESSION['pengguna_masuk'] = $sesi_pengguna;
if ($apabila == "administrator") {
echo "<meta http-equiv='refresh' content='0; url=" . base_url() .
"index.php/administrator'>";
} else if ($apabila == "supervisor") {
echo "<meta http-equiv='refresh' content='0; url=" . base_url() .
"index.php/supervisor'>";
}
} else {
?>
<script type="text/javascript">alert("Kode Pengguna atau Kata Sandi Yang Anda
Masukkan Salah..!!!");</script>
<?php
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}
public function keluar() {
session_destroy();
echo "<meta http-equiv='refresh' content='0; url=" . base_url() . "index.php/masuk/'>";
}
}