OPTIMASI PENGENDALIAN PERSEDIAAN SPARE PART ...

198
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

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

ii

iii

iv

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,

103

104

105

106

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/'>";

}

}