Upload
duongxuyen
View
225
Download
0
Embed Size (px)
Citation preview
BAB 3
ANALISIS DAN PERANCANGAN
3.1 Sejarah Singkat dan Gambaran Umum Perusahaan
PT Selat Anyar adalah perusahaan yang bergerak dalam bidang jasa las dan
bubut, jasa reparasi alat berat dan peralatan pabrik dan pertambangan, dan juga produksi
spare part alat berat dan peralatan pertambangan. Perusahaan ini didirikan oleh Bapak
Darmawan pada tahun 1970.
Pada awal berdirinya, perusahaan keluarga ini hanya merupakan sebuah bengkel
las kecil bernama Selat Anyar di Jl. Sukamulya no. 7, Tangerang, yang mempekerjakan
tiga orang pegawai dengan tiga mesin las sederhana, dan menerima jasa las untuk
pekerjaan logam seperti perbaikan sepeda, pintu pagar, dan sebagainya. Namun,
perusahaan ini terus berkembang dan menambah peralatan las dan bubut. Karyawannya
lambat laun dapat menangani pekerjaan logam yang lebih bervariasi dan kompleks.
Setelah putera keempat Bapak Darmawan, yaitu Bapak Abadi Darmawan ikut
terjun dalam perusahaan pada tahun 1981, perusahaan ini berkembang lebih pesat lagi
dan mampu menangani pekerjaan-pekerjaan dari pertambangan pasir, batu bara, dan biji
besi; seperti reparasi peralatan pertambangan, hingga memproduksi spare partnya.
Bengkel Selat Anyar itu berevolusi menjadi PT Selat Anyar. Pada tahun 1986, setelah
ikut bergabungnya putera sulung dan ketiga Bapak Darmawan, yaitu Bapak Barkah
Darmawan dan Bapak Slamet Darmawan, PT Selat Anyar memekarkan diri dan
membuka cabang di Kawasan Industri Manis, yang memiliki spesialisasi menangani
38
konstruksi besi dan produksi peralatan industri, yang ditangani oleh putera ketiga Bapak
Darmawan, yaitu Bapak Slamet Darmawan.
Setelah berhasil melewati krisis ekonomi pada tahun 1998, PT Selat Anyar terus
berkembang pesat, dan akhirnya membuka cabang baru pada tahun 2008 di Jl. Imam
Bonjol Gg. Usaha I no. 1, Karawaci, Tangerang, yang ditangani langsung oleh Bapak
Abadi Darmawan. Cabang ketiga ini mempunyai spesialisasi menangani reparasi
peralatan pertambangan pasir, batu bara, dan biji besi; juga memproduksi spare part alat
berat seperti excavator dan bulldozer. Walaupun memiliki nama yang sama, ketiga
cabang PT Selat Anyar ini memiliki manajemen yang terpisah dan juga spesialisasi yang
berbeda pula, namun masih menjalin kerjasama satu sama lain.
3.2 Struktur Organisasi
Setiap perusahaan perlu dimiliki struktur organisasi yang sesuai agar perusahaan
dapat berjalan dengan baik. Hal ini penting mengingat organisasi mencakup pembagian
kerja, wewenang, serta tanggung jawab untuk mencapai tujuan perusahaan yang telah
ditetapkan. Salah satu faktor yang mempengaruhi kinerja suatu perusahaan adalah
struktur organisasi dan batasan-batasan tanggung jawab semua pihak dalam perusahaan.
Dalam membentuk dan menetapkan suatu struktur organisasi, perlu diperhatikan
bahwa organisasi harus mempunyai tujuan dan merupakan alat bagi pimpinan dalam
melakukan pengawasan terhadap bawahannya. Pendelegasian tugas, wewenang, dan
tanggung jawab dari pimpinan harus jelas, tegas, dan berjalan menurut garis yang telah
ditentukan dan dapat dipahami oleh setiap personil yang berada dalam organisasi
tersebut. Untuk memilih personil yang berada dalam organisasi tersebut, perlu dilakukan
seleksi sesuai dengan keahliannya.
m
K
y
w
Kare
maka struktu
Karawaci ya
yang dapat d
Berik
wewenang d
1. Pimp
Pimp
a. M
d
b. M
c. M
d. L
2. Keua
Bagi
Keuanga
Purchasindan
Transporta
ena tiap cab
ur organisas
ang mempro
dilihat pada G
GSumber:
kut ini disa
dan tanggung
pinan
pinan memil
Mengawasi k
dilakukan de
Melakukan lo
Merancang s
Langsung me
angan
ian Keuanga
n
ng
asi Pe
bang dari PT
inya pun ter
oduksi spare
Gambar 3.1.
Gambar 3.1 : Hasil Waw
ajikan meng
g jawab dari
liki wewenan
kegiatan per
mi tercapain
obby dan ne
istem kerja u
enangani ope
an memiliki w
Pimpinan
Divisi engelasan
T Selat Any
rpisah satu d
e part alat b
.
Struktur Owancara den
genai uraia
setiap bagia
ng dan tangg
rusahaan sec
nya tujuan pe
gosiasi deng
untuk setiap
erasi perusah
wewenang d
n
DivisPembub
yar memilik
dengan yang
erat, memili
rganisasi PTngan Pimpin
an tugas (jo
an pada PT S
gung jawab s
cara umum d
erusahaan.
gan relasi dan
proyek dan
haan jika dir
dan tanggung
Operasiondan HRD
si butan
ki manajeme
g lain. PT Se
iki struktur o
T Selat Anynan PT Sela
ob descripti
Selat Anyar.
sebagai berik
dan memasti
n supplier.
order yang
rasa perlu.
g jawab seba
nal D
Divisi Pengeboran
en yang terp
elat Anyar ca
organisasi se
yar at Anyar
ion) yang b
kut.
ikan semua u
diterima.
agai berikut.
DPrep
dan F
39
pisah,
abang
eperti
berisi
usaha
Divisi paring Finishing
40
a. Bertanggung jawab langsung kepada Pimpinan.
b. Mengawasi cash flow perusahaan dan menangani langsung segala jenis
transaksi dalam perusahaan termasuk relasi dengan bank.
c. Mengawasi penagihan invoice dan juga purchasing bahan baku.
3. Operasional dan HRD
Bagian Operasional dan HRD memiliki wewenang dan tanggung jawab sebagai
berikut.
a. Bertanggung jawab langsung kepada Pimpinan.
b. Mengawasi langsung kegiatan produksi dan operasional dalam perusahaan.
c. Menyeleksi dan mewawancarai calon karyawan baru.
d. Membayarkan gaji dan bonus untuk semua karyawan.
4. Purchasing dan Transportasi
Bagian Purchasing dan Transportasi memiliki wewenang dan tanggung jawab
sebagai berikut.
a. Bertanggung jawab langsung kepada Bagian Keuangan dan bertanggung
jawab secara tidak langsung kepada Pimpinan.
b. Melakukan pembelian bahan baku dan mendistribusikan barang hasil
produksi, termasuk penagihan dan penjemputan barang.
5. Divisi Pengelasan
Divisi Pengelasan memiliki wewenang dan tanggung jawab sebagai berikut.
a. Bertanggung jawab langsung kepada Bagian Operasional dan HRD, dan
bertanggung jawab secara tidak langsung kepada Pimpinan.
b. Melakukan semua pekerjaan yang memerlukan proses pengelasan.
41
6. Divisi Pembubutan
Divisi Pembubutan memiliki wewenang dan tanggung jawab sebagai berikut.
a. Bertanggung jawab langsung kepada Bagian Operasional dan HRD, dan
bertanggung jawab secara tidak langsung kepada Pimpinan.
b. Melakukan semua pekerjaan yang memerlukan proses pembubutan.
7. Divisi Pengeboran
Divisi Pengeboran memiliki wewenang dan tanggung jawab sebagai berikut.
a. Bertanggung jawab langsung kepada Bagian Operasional dan HRD, dan
bertanggung jawab secara tidak langsung kepada Pimpinan.
b. Melakukan semua pekerjaan yang memerlukan proses pengeboran.
8. Divisi Preparing dan Finishing
Divisi Preparing dan Finishing memiliki wewenang dan tanggung jawab sebagai
berikut.
a. Bertanggung jawab langsung kepada Bagian Operasional dan HRD, dan
bertanggung jawab secara tidak langsung kepada Pimpinan.
b. Melakukan semua persiapan untuk proses operasional seperti penghalusan
pada logam dan juga penyetelan ukuran dan posisi logam.
c. Melakukan semua pekerjaan finishing atau penyelesaian seperti perakitan
dan pengecatan.
3.3 Metode Pengumpulan Data
Unit dasar yang diteliti adalah produk yang yang bersifat kritis saja, yaitu spare
part bulldozer, yang memiliki daya serap tinggi terhadap modal perusahaan dan juga
42
memiliki tingkat permintaan yang relatif tinggi dan stabil setiap bulannya. Metode
pengumpulan data yang digunakan adalah sebagai berikut.
1. Wawancara / interview
Pada tahap ini data diperoleh dengan melakukan tanya jawab secara langsung
dengan pihak-pihak yang dapat memberikan penjelasan tentang data yang
diperlukan dalam penyusunan skripsi ini.
2. Observasi
Pada tahap ini data diperoleh dengan mengadakan pertemuan dan pencatatan
langsung terhadap data perusahaan.
3.4 Permasalahan yang Dihadapi PT Selat Anyar
PT Selat Anyar merupakan sebuah perusahaan yang memproduksi suku cadang
(spareparts) alat-alat berat yang mendukung industri pertambangan pasir dan batu bara.
Selama ini, ada dua jenis produk suku cadang yang selalu dipesan tiap bulannya, yaitu
jenis x dan y. Karena permintaan akan dua jenis produk ini cukup banyak dan
berfluktuasi tiap bulannya, yaitu Guard Track Bulldozer D85 dan Brace Bulldozer D85
yang selanjutnya akan diidentifikasi sebagai produk X1 dan X2, maka PT Selat Anyar
lebih memprioritaskan sumber daya yang dimiliki untuk memproduksi dua jenis produk
ini. Karena itu dapat disimpulkan bahwa kondisi keuangan PT Selat Anyar sangat
tergantung dari penjualan dua jenis produk ini.
43
Gambar 3.2 Guard Track Bulddozer D85 (kanan) dan Brace Bulldozer D85 (kiri)
Namun, masalah yang dihadapi adalah permintaan akan dua jenis produk ini
tidaklah konstan tiap bulannya. Walaupun relatif stabil jika dibanding dengan produk
lain, namun permintaan tiap bulan produk ini cukup fluktuatif. Menurut pengalaman-
pengalaman sebelumnya, sering kali PT Selat Anyar tidak dapat mendapat keuntungan
yang maksimal akibat kelebihan memproduksi dua jenis produk ini. Kadang-kadang
jumlah produksi dua jenis produk ini kurang dari permintaan. Hal di atas terjadi, karena
selama ini prediksi jumlah yang akan diproduksi setiap bulannya hanya berdasarkan
pengalaman atau hanya perkiraan sederhana yang tidak memiliki landasan yang kuat.
Juga cash flow yang selama ini kurang dapat dikendalikan, karena PT Selat Anyar belum
dapat memprediksi seberapa besar jumlah keuntungan yang dapat diperoleh dari
produksi yang juga sudah dikendalikan dan diprediksi pada periode (bulan) selanjutnya.
Oleh sebab itu, skripsi ini membantu PT Selat Anyar dalam mengatasi
masalahnya tersebut sekaligus membuat sebuah program aplikasi untuk mengendalikan
44
dan memprediksi produksi, serta mengoptimalkan keuntungan yang akan diperoleh PT
Selat Anyar.
3.5 Penyelesaian Masalah
Setelah melakukan observasi, diperoleh data yang dimiliki oleh PT Selat Anyar.
Data ini kemudian dianalisis untuk dijadikan variabel fungsi batas optimalisasi. Data
yang akan digunakan adalah data ongkos produksi produk X1 dan X2 secara terpisah,
dan data hasil penjualan produk x dan y secara tergabung. Data penjualan kedua jenis
produk ini tergabung karena kedua jenis produk ini adalah produk komplementer satu
dengan yang lain dan merupakan suku cadang dari satu jenis alat berat yang sama
(Bulldozer D85). Oleh karena itu sebagian besar penjualannya tergabung.
Dari data itu (penjualan dan biaya produksi) dapat dilakukan peramalan dengan
menggunakan metode peramalan regresi. Setelah mendapatkan hasil peramalan, PT
Selat Anyar perlu menentukan budget untuk biaya produksi produk X1 dan X2 itu, juga
target penjualan kedua jenis produk itu per satuan terpisah. Budget dan target itu akan
menjadi konstanta dari fungsi kendala pada tahap optimalisasi. PT Selat Anyar perlu
menentukan target keuntungan yang ingin diraih per satuan produk tersebut secara
terpisah untuk menentukan fungsi tujuan (isoprofit line) dari tahap optimalisasi. Tahap
optimalisasi dilakukan dengan metode simpleks linear programming. Pada akhirnya,
akan diperoleh hasil prediksi keuntungan yang akan didapat oleh PT Selat Anyar untuk
periode (bulan) selanjutnya.
45
3.5.1 Analisis Pengendalian Produksi
Menurut teori yang tertulis pada bab 2, pengendalian produksi terhadap produk
tertentu dipengaruhi oleh struktur pasar, di mana di dalam struktur pasar itu ada
permintaan pasar akan produk tertentu di antaranya. Oleh sebab itu, dapat ditarik
kesimpulan bahwa salah satu faktor yang dapat mengendalikan produksi terhadap suatu
produk adalah permintaan pasar akan produk tersebut.
Untuk merepresentasikan permintaan itu sendiri, dapat dilihat pendapatan dari
penjualan suatu produk, dan secara tidak langsung dapat direpresentasikan oleh biaya
produksi produk tersebut. Dengan kata lain, untuk mengendalikan produksi produk X1
dan X2, maka PT Selat Anyar perlu melihat data hasil penjualan dan biaya produksi
kedua jenis produk itu. Dengan demikian jumlah permintaan terhadap kedua jenis
produk itu dapat diprediksi setiap bulannya.
3.5.2 Peramalan dengan Metode Regresi Linier
Menurut hasil observasi, data penjualan dan biaya produksi dari produk X1 dan
X2 yang akan diproduksi yang diperoleh oleh penulis adalah sebagai berikut.
46
Tabel 3.1 Data penjualan dan biaya produksi produk X1 dan X2 Sumber: Catatan Keuangan PT Selat Anyar Periode September 2008 – Oktober
2009 Penjualan X1 dan X2 Biaya produksi X1 Biaya produksi X2 Bulan (xi)
Revenue (yi)
Bulan (xi)
Cost (yi)
Bulan (xi)
Cost (yi)
1 97 1 28 1 12
2 103 2 37 2 14 3 117 3 34 3 17 4 121 4 51 4 18 5 129 5 47 5 22 6 143 6 39 6 24 7 151 7 34 7 31 8 130 8 35 8 26 9 127 9 38 9 19 10 123 10 36 10 17 11 125 11 38 11 20 12 124 12 39 12 22 13 125 13 41 13 21 14 125 14 37 14 23 Keterangan : revenue dan cost dalam ratusan ribu rupiah
Dari data yang diperoleh, maka dapat ditarik kesimpulan bahwa PT Selat Anyar
dapat meramalkan revenue, cost X1, dan cost X2 untuk bulan ke 15. Kemudian
dilakukan tiga peramalan dengan Metode Regresi Linier untuk tiga variabel yang
berbeda, yaitu Peramalan Revenue, Peramalan Cost X1, dan Peramalan Cost X2, dengan
variabel bulan (xi) sebagai variabel bebas (independent variable), dan variabel revenue
dan cost (yi) sebagai variabel terikat (dependent variable).
1. Peramalan Revenue
Peramalan Revenue dapat dihitung dari:
13.349; 105; 1.015
1740
47
Dengan:
∑14
7,5
∑14
124,2857
Maka:
∑ 14∑ 14
13.349 14 124,2857 7,51.015 14 7,5 1,3143
124,2857 1,3143 7,5 114,4285
Jadi perkiraan revenue dengan fungsi:
Karena peramalan dilakukan untuk bulan ke 15, maka nilai x disubstitusikan oleh 15
sehingga menjadi:
114,4285 1,3143 15 134,143
Jadi diperoleh bahwa perkiraan revenue di bulan ke 15 adalah 134,143 atau secara
nyata adalah Rp 13.414.300,-.
48
1. Peramalan cost X1
Peramalan cost X1 dapat dihitung dari:
4.034; 105; 1.015
534
Dengan:
∑14
7,5
∑14
38,1429
Maka:
∑ 14∑ 14
4.034 14 38,1429 7,51.015 14 7,5 0,1275
38,1429 0,1275 7,5 37,1867
Jadi perkiraan cost produk x dengan fungsi:
Karena peramalan dilakukan untuk bulan ke 15, maka nilai x disubstitusikan
oleh 15 sehingga menjadi:
49
37,1867 0,1275 15 39,0992
Jadi diperoleh bahwa perkiraan cost produk X1 di bulan ke 15 adalah
39,0992 atau secara nyata adalah Rp 3.909.920,-.
2. Peramalan cost X2
Peramalan cost X1 dapat dihitung dari:
2.262; 105; 1.015
286
Dengan:
∑14
7,5
∑14
20,4286
Maka:
∑ 14∑ 14
2.262 14 20,4286 7,51.015 14 7,5 0,5143
20,4286 0,5143 7,5 16,5714
Jadi perkiraan cost produk y dengan fungsi:
50
Karena peramalan dilakukan untuk bulan ke 15, maka nilai x disubstitusikan oleh 15
sehingga menjadi:
16,5714 0,5143 15 24,2859
Jadi diperoleh bahwa perkiraan cost produk X2 di bulan ke 15 adalah 24,2859 atau
secara nyata adalah Rp 2.428.590,-.
3.5.3 Optimalisasi dengan Metode Simpleks Linear Programming
Setelah melakukan peramalan terhadap data penjualan dan biaya produksi, maka
perlu ditentukan target penjualan dan budget biaya produksi per satuan pada tiap jenis
produk untuk menentukan konstanta pada setiap fungsi kendala. Target keuntungan yang
ingin diraih PT Selat Anyar adalah fungsi tujuan (isoprofit line) yang akan digunakan
pada tahap optimalisasi dengan metode simpleks linear programming.
Dalam skripsi ini, kondisi ekonomi, politik, dan lain-lain telah dikondisikan
stabil, namun budget biaya produksi per satuan tiap jenis setiap bulan, target penjualan
per satuannya, dan target keuntungan per satuan pada tiap jenis produk yang dapat
diubah-ubah tergantung pada seberapa besar keuntungan yang ingin diraih dan budget
PT Selat Anyar di masa tertentu. Namun pada bulan ke 15, PT Selat Anyar menentukan
kalau target keuntungan yang ingin diraih per satuan produk X1 adalah Rp 150.000,-,
dan produk X2 adalah Rp 270.000,-.
Dari observasi, diperoleh bahwa selama 14 bulan terakhir budget untuk biaya
produksi produk X1 per satuan adalah Rp 370.000,- dan untuk produk X2 adalah Rp
200.000,-. Dengan target harga jual satuan produk X1 adalah Rp 900.000,- dan untuk
produk X2 adalah Rp 700.000,-. Dengan demikian target dan budget untuk bulan ke 15
51
tetap sama dengan 14 bulan sebelumnya. Dengan target keuntungan bersih per satuan
yang telah ditetapkan oleh PT Selat Anyar untuk produk X1 adalah Rp 150.000,- dan
untuk produk X2 adalah Rp 270.000,-. Hasil-hasil di atas menjadi tidak pasti antara
budget dan target per satuan dengan total penjualan dan total biaya produksi karena
dipengaruhi faktor-faktor seperti diskon, efisiensi produksi, biaya lain yang tidak
termasuk biaya produksi, dan lain sebagainya.
Fungsi tujuan: Z = 1,5x1 + 2,7x2
Fungsi kendala 1: 9x1 + 7x2 ≥ 134,143
Fungsi kendala 2: 3,7x1 ≤ 39,0992
Fungsi kendala 3: 2x2 ≤ 24,2859
dengan x1, x2 ≥ 0
Fungsi kendala 1 bertanda lebih besar sama dengan ( ≥ ), karena PT Selat Anyar
ingin penjualan selanjutnya akan berada di atas hasil peramalan yang sudah dilakukan.
Sedangkan pada fungsi kendala 2 dan 3 bertanda kurang dari sama dengan ( ≤ ), karena
PT Selat Anyar ingin biaya produksi sejanjutnya di bawah hasil peramalan. Variabel-
variabel x1, x2 ≥ 0 menunjukkan bahwa kedua jenis produk (X1 dan X2) harus
diproduksi, sehingga tidak mungkin bernilai nol atau negatif.
A. Penyelesaian
Bentuk bakunya adalah sebagai berikut.
Maksimum Z = 1,5x1 + 2,7x2 + 0S1 + MR1 + 0S2 + 0S3 atau
52
Z - 1,5x1 - 2,7x2 + 0S1 + MR1 + 0S2 + 0S3 = 0 dengan kendala-kendala sebagai
berikut.
9x1 + 7x2 – S1 + R1 ≥ 134,143
3,7x1 + S2 ≤ 39,0992
2x2 + S3 ≤ 24,2859
x1,x2,s1 , s2 , s3 ≥ 0
Dan untuk Baris Z dilakukan operasi sebagai berikut.
-1,5 -2,7 0 M 0 0 0
-M ( 9 7 -1 1 0 0 134,143) +
-1,5-9M -2,7-M -M 0 0 0 -134,143M
Solusi / table awal simpleks:
Tabel 3.2 Tahap Awal Simpleks VB X1 X2 S1 R1 S2 S3 NK Rasio
Z -1,5-9M -2,7-M -M 0 0 0 -134,143M
R1 9 7 -1 1 0 0 134,143
S2 3,7 0 0 0 1 0 39,0992
S3 0 2 0 0 0 1 24,2859
Karena nilai negatif terbesar ada pada kolom X1, maka kolom X1 adalah
kolom pivot dan X1 adalah variabel masuk. Rasio pembagian nilai kanan dengan
kolom pivot terkecil adalah 10,5674 bersesuaian dengan baris S2, maka baris S2
adalah baris pivot dan S2 adalah variabel keluar. Elemen pivot adalah dua.
53
Tabel 3.3 Penentuan Baris dan Kolom Pivot pada Iterasi Pertama
VB X1 X2 S1 R1 S2 S3 NK Rasio
Z -1,5-9M -2,7-M -M 0 0 0 -134,143M
R1 9 7 -1 1 0 0 134,143 14,9048
S2 3,7 0 0 0 1 0 39,0992 10,5674
S3 0 2 0 0 0 1 24,2859 ~
Nilai pertama yang dimiliki adalah nilai baris pivot baru (baris X1). Semua
nilai pada baris S2 pada tabel solusi awal dibagi dengan dua (elemen pivot).
Tabel 3.4 Baris Pivot Baru VB X1 X2 S1 R1 S2 S3 NK Rasio
Z
R1
X1 1 0 0 0 0,2703 0 10,5674
S3
Perhitungan nilai barisnya:
Baris Z:
-1,5-9M -2,7-M -M 0 0 0 -134,143M
-1,5-9M (1 0 0 0 0,2703 0 10,5674 ) -
0 -2,7-M -M 0 0,4055+2,4327M 0 15,8511-39,0364M
54
Baris R1:
9 7 -1 1 0 0 134,143
9 ( 1 0 0 0 0,2703 0 10,5674 ) -
0 7 -1 1 -2,4327 0 39,0364
Baris S3:
0 2 0 0 0 1 24,2859
0 ( 1 0 0 0 0,2703 0 10,5674 ) -
0 2 0 0 0 1 24,2859
Maka tabel iterasi 1 ditunjukkan tabel di bawah. Selanjutnya diperiksa
apakah tabel sudah optimal atau belum. Karena nilai baris Z di bawah variabel X2
dan S1 masih negatif, maka tabel belum optimal. Kolom dan baris pivotnya ditandai
pada tabel berikut ini.
Tabel 3.5 Penentuan Baris dan Kolom Pivot pada Iterasi Kedua
VB X1 X2 S1 R1 S2 S3 NK Rasio
Z 0 -2,7-M -M 0 0,4055+2,4327M 0 15,8511-39,0364M
-
R1 0 7 -1 1 -2,4327 0 39,0364 15,5766
X1 1 0 0 0 0,2703 0 10,5674 ~
S3 0 2 0 0 0 1 24,2859 12,143
Variabel masuk dengan demikian adalah X2 dan variabel keluar adalah S3 . Hasil
perhitungan iterasi kedua adalah sebagai berikut.
55
Tabel 3.6 Hasil Iterasi Kedua VB X1 X2 S1 R1 S2 S3 NK Rasio
Z 0 0 M 0 0,4055+2,4327M 1,35+M 48,6372
R1 0 0 -1 1 -2,4327 -3,5 -45,9646
X1 1 0 0 0 0,2703 0 10,5674
X2 0 1 0 0 0 0,5 12,143
Tabel sudah optimal, sehingga perhitungan iterasi dihentikan.
B. Membaca Tabel Optimal
Membaca tabel optimal adalah bagian penting bagi pengambil keputusan.
Ada beberapa hal yang dapat dibaca dari table optimal, yaitu:
1. Solusi optimal variable keputusan
2. Status sumber daya
3. harga bayangan (dual/shadow prices).
Menggunakan tabel optimal:
Tabel 3.7 Hasil Solusi Optimal VB X1 X2 S1 R1 S2 S3 NK
Z 0 0 M 0 0,4055+2,4327M 1,35+M 48,6372
X2 0 0 -1 1 -2,4327 -3,5 -45,9646
X1 1 0 0 0 0,2703 0 10,5674
S3 0 1 0 0 0 0,5 12,143
56
C. Solusi optimal
Lalu diperoleh keuntungan yang optimal (maksimal) pada (x; y) = (10,5674;
12,143) dengan keuntungan 48,6372. Jadi dengan pembulatan secara nyata, pada
bulan ke 15 PT Selat Anyar perlu memproduksi 11 unit produk X1 dan 12 unit
produk X2, agar mendapat keuntungan yang maksimal, yaitu mendekati Rp
4.863.720,-. Pembulatan dilakukan karena PT Selat Anyar tidak mungkin
memproduksi kedua jenis produk tersebut dalam bentuk pecahan. Jadi keuntungan
maksimal yang akan diperoleh hanya akan mendekati angka Rp 4.863.720,- yang
merupakan hasil optimalisasi yang dilakukan.
3.6 Perancangan Program Optimalisasi Prediksi dengan Metode Regresi Linier
dan Metode Simpleks
Untuk merancang program Optimalisasi Prediksi dengan Metode Linier Regresi
dan Metode Simpleks, digunakan Microsoft Visual Studio for C#, yang akan
dioperasikan pada sistem operasi Microsoft Windows Vista.
Algoritma untuk perhitungan Optimalisasi Prediksi dengan Metode Regresi
Linier dan Metode Simpleks adalah sebagai berikut.
1. Buka database dengan nama file localhost.sql
2. Baca dan ambil data xi dan yi dari setiap kolom revenue, cost X1, dan cost X2.
3. Masukkan data xi dan yi pada kolom revenue ke rumus-rumus.
; ;
57
4. Cari rata-rata dari variabel xi dan yi dengan rumus-rumus.
∑
∑
5. Masukkan hasil dari langkah 3 dan 4 ke rumus.
∑∑
6. Masukkan hasil dari langkah 4 dan 5 ke rumus.
7. Masukkan hasil dari langkah 5 dan 6 ke rumus.
8. Mengulangi langkah 3 sampai 7 untuk Cost X1 dan Cost X2.
9. Masukkan tiga hasil peramalan Regresi Linier di atas ke fungsi-fungsi kendala
sebagai koefisien hasil untuk Metode Simpleks.
10. Masukkan koefisien variabel pada fungsi tujuan dan fungsi kendala.
11. Masukkan semua koefisien dari fungsi-fungsi simpleks ke tabel simpleks.
12. Menentukan kolom pivot dengan melihat nilai koefisien baris Z yang paling
negative, lalu menentukan baris pivot dengan membagi masing-masing nilai kanan
dengan masing-masing elemen kolom pivot dan memilih hasil bagi paling kecil
sebagai baris pivot.
13. Membagi semua angka pada baris pivot dengan nilai irisan antara kolom dan baris
pivot untuk menentukan baris pivot baru.
14. Mengurangi elemen-elemen semua baris pada tabel simpleks, kecuali baris pivot,
dengan hasil kali antara masing-masing elemen kolom pivot tiap baris dengan baris
pivot yang baru, untuk mengisi tabel simpleks yang baru.
58
15. Mengulangi langkah 21 sampai 23 sampai koefisien pada baris Z tidak memiliki
nilai negatif yang berarti fungsi sudah optimal.
3.7 Perancangan Program Aplikasi
Pada tahap perancangan ini, akan dibuat rancangan data, rancangan proses, dan
rancangan layar dari program aplikasi yang akan dibuat. Untuk aplikasi digunakan
bahasa pemrograman C#, sedangkan untuk databasenya digunakan MySQL.
3.7.1 Perancangan Input
Pada tahap perancangan input, akan dibuat rancangan data input yang akan
diproses pada program. Data input akan diambil dari file database yang berisikan tiga
data, yaitu data revenue, cost X1, dan cost X2 yang masing-masing terdiri dari variabel xi
dan yi yang berbentuk integer. Setelah diproses secara regresi linier akan dihasilkan tiga
data baru yang berbentuk float yang akan menjadi data yang diinput secara otomatis ke
fungsi kendala untuk proses simpleks.
Untuk melengkapi koefisien pada fungsi kendala proses simpleks, tidak lagi
diperlukan input secara manual oleh user yang bertipe data float, karena program akan
member input secara default yang dapat diupdate secara manual oleh user. Setelah
melewati proses iterasi simpleks, maka dihasilkan output akhir berupa nilai X1, X1, dan
Z yang bertipe float yang merupakan hasil akhir tujuan pembuatan program ini.
3.7.2 Perancangan Proses
Proses yang digunakan dalam aplikasi ini dijelaskan dalam flowchart pada
Gambar 3.3 dan Gambar 3.4.
59
Done
Not Done
Done
Not Done
Not Done Done
Gambar 3.3 Flowchart Proses Kerja Program
Welcome Screen
Check Data
Check Update
Start
Input Update
∑
∑
∑∑
y* = a + bx
Check Requirement
To Simplex Method Process
Input Data
DisplayData
Display Result
60
No
Yes
Note Done
Yes
Done No
Gambar 3.4 Flowchart Proses Kerja Program (Lanjutan)
Dan pada Gambar 3.5 berikut ini akan ditampilkan State Transition Diagram dari
proses pada program aplikasi.
Start
Input Update of the Coefficient
Check Validation
Convert Functions into the system
Convert the system into a table
Any Negatives in bottom row?
Pick the most negative for pivot column
Any Positives in bottom row?
Find ratios between RHS and Pivot Column
Choose the smallest ratio for pivot row
Pivot
LinReg results feed to Simplex, put coefficients as default
Display the Simplex Functions and Coefficients
Stop process, display results
End
61
button “NEXT” diklik
button “Update” diklik button “Tampilkan data” diklik
button button “SAVE”
“PREVIOUS” diklik button “NEXT” diklik
diklik
` button “UPDATE”diklik button “NEXT” diklik
button “SAVE” diklik button “NEXT” diklik
button “FINISH” diklik
Gambar 3.5 State Transition Diagram
Menampilkan tampilan awal program
Menampilkan hasil akhir
Menampilkan fungsi‐fungsi simpleks
Menunggu untuk ke langkah simpleks
Menunggu peramalan dilakukan
Menunggu untuk menampilkan database
Menunggu update dilakukan
Mengubah koefisien simpleks
62
3.7.3 Perancangan Layar
Dalam perancangan program optimalisasi prediksi keuntungan dengan Metode
Regresi Linier dan Metode Simpleks, layar-layar antarmuka yang diperlukan dirancang
pada Microsoft Visual Studio for C#.
Pada Gambar 3.6 dapat dilihat rancangan tampilan awal program saat program
baru dijalankan. Tampilan dibuat sederhana, namun user friendly agar dapat
mempermudah penggunaan oleh pengguna program ini, pimpinan perusahaan, yang
bukan pengguna komputer secara rutin. Pada tampilan awal, pengguna hanya perlu
mengklik NEXT untuk melanjutkan program ke tahap selanjutnya.
Gambar 3.6 Rancangan tampilan awal program
Pada tampilan berikutnya hanya akan ada button yang bertuliskan “Tampilkan
Database” untuk diklik untuk langsung menampilkan database dari file localhost.sql
yang akan diolah oleh program. Karena program ini dirancang untuk lebih dinamis,
PT SELAT ANYAR
Program Optimalisasi Prediksi Keuntungan
Dengan Metode Linier Regresi dan Metode Simpleks
Created by:
Agung / 0900801245
Jurusan Matematika dan Teknik Informatika
Bina Nusantara University NEXT
63
setelah button “Tampilkan Database” diklik maka langsung akan muncul tabel seperti
pada Gambar 3.7. Tabel menampilkan data revenue, cost X1, dan cost X2 berdasarkan
waktu ke waktu, di mana variabel waktu dapat disesuaikan dengan database yang ada
(sampai periode Okt 09). Lalu, button “Tampilkan Database” tetap ada di pojok kiri atas
untuk mengantisipasi bila ada pembaharuan data pada tabel di file localhost.sql. Button
UPDATE yang ada di pojok kanan atas diperlukan untuk melakukan pembaharuan data,
yang akan menghubungkan ke tampilan update. Button NEXT ada di pojok kanan
bawah untuk melanjutkan ke proses peramalan secara regresi linier untuk periode
selanjutnya, yaitu Nov 09.
Gambar 3.7 Rancangan tampilan database
Bila button UPDATE diklik maka akan ditampilkan tampilan seperti pada Gambar
3.8, di mana program secara otomatis menambahkan satu baris data yang menyesuaikan
kolom Periode. Setelah itu, pada baris baru, user diwajibkan mengisi data-data di kolom-
Periode Revenue Cost X1 Cost X2 Sept 08 Okt 09
Klik UPDATE untuk memperbarui Database
Klik NEXT untuk meramal bulan ke n+1
Tampilkan Database
NEXT
UPDATE
64
kolom revenue, cost X1, dan cost X2. Lalu, button SAVE diklik untuk menyimpan data
yang baru ke file database. Button NEXT ada di pojok kanan bawah untuk melanjutkan
ke proses peramalan secara regresi linier untuk periode selanjutnya, yaitu Des 09.
Gambar 3.8 Rancangan tampilan update database
Selanjutnya, proses peramalan secara regresi linier dilakukan. Lalu, hasil
peramalan langsung ditampilkan dengan menambahkan satu baris tambahan pada tabel
pada periode Des 09 ramalan dengan hasil peramalan xxx1, xxx2, dan xxx3; seperti pada
Gambar 3.9. Pada tampilan layar ini terdapat button PREVIOUS di pojok kiri atas untuk
kembali ke tampilan sebelumnya untuk mengantisipasi update pada database, dan
button NEXT di pojok kanan bawah untuk melanjutkan ke proses selanjutnya, yaitu
proses optimalisasi dengan metode simpleks.
Periode Revenue Cost X1 Cost X2 Sept 08 Okt 09 Nov 09
Klik SAVE untuk menyimpan Database
Klik NEXT untuk meramal periode (*selanjutnya) NEXT
SAVE
65
Gambar 3.9 Rancangan tampilan hasil peramalan
Selanjutnya, akan ada tampilan seperti pada Gambar 3.10 akan ada tampilan
fungsi tujuan dan tiga fungsi kendala untuk proses simpleks. Pada tiap fungsi telah
disiapkan tiga variabel agar program lebih dinamis. Hasil peramalan pada tampilan
sebelumnya, yaitu xxx1, xxx2, dan xxx3 akan langsung dimasukkan sebagai nilai kanan
ke masing-masing fungsi kendala. Pengisian koefisien fungsi tujuan dan fungsi kendala
lainnya dilakukan otomatis oleh sistem sesuai dengan hasil observasi, namun dapat
disesuaikan dengan kasus yang dihadapi dengan mengklik button UPDATE. Setelah
proses pengisian selesai, pengguna diharapkan mengklik button NEXT untuk menuju
tampilan hasil akhir.
Periode Revenue Cost X1 Cost X2 Sept 08 Nov 09 Des 09 xxx1 xxx2 xxx3
Klik NEXT untuk menuju proses optimalisasi keuntungan NEXT
PREVIOUS
66
Gambar 3.10 Rancangan tampilan input untuk proses simpleks Pada Gambar 3.11, ditampilkan layar UPDATE pada koefisien variabel fungsi
simpleks. Untuk menyimpan nilai koefisien-koefisien dengan mengklik button SAVE.
Max Z = c1x1 + c2x2 + c3x3
a11x1 + a12x2 + a13x3 <= ‐xxx1
a21x1 + a22x2 + a23x3 <= xxx2
a31x1 + a32x2 + a33x3 <= xxx3
Masukkan nilai c1 (target keuntungan per satuan produk X1) = q
Masukkan nilai c2 (target keuntungan per satuan produk X2) = w
Masukkan nilai c3 (target keuntungan per satuan produk X3) = e
Masukkan nilai a11 (harga jual per satuan produk X1) = f
Masukkan nilai a12 (harga jual per satuan produk X2) = g
Masukkan nilai a13 (harga jual per satuan produk X3) = h
Masukkan nilai a21 (budget produksi 1 per satuan produk X1) = z
Masukkan nilai a22 (budget produksi 1 per satuan produk X2) = x
Masukkan nilai a23 (budget produksi 1 per satuan produk X3) = c
Masukkan nilai a31 (budget produksi 2 per satuan produk X1) = v
Masukkan nilai a32 (budget produksi 2 per satuan produk X2) = b
Masukkan nilai a33 (budget produksi 2 per satuan produk X3) = n
Klik NEXT untuk melihat hasil NEXT
UPDATE
67
Setelah button SAVE diklik, maka akan tampil tampilan sebelumnya seperti Gambar
3.10 dengan koefisien-koefisien fungsi simpleks sudah diperbaharui.
Max Z = c1x1 + c2x2 + c3x3
a11x1 + a12x2 + a13x3 <= ‐xxx1
a21x1 + a22x2 + a23x3 <= xxx2
a31x1 + a32x2 + a33x3 <= xxx3
Masukkan nilai c1 (target keuntungan per satuan produk X1) =
Masukkan nilai c2 (target keuntungan per satuan produk X2) =
Masukkan nilai c3 (target keuntungan per satuan produk X3) =
Masukkan nilai a11 (harga jual per satuan produk X1) =
Masukkan nilai a12 (harga jual per satuan produk X2) =
Masukkan nilai a13 (harga jual per satuan produk X3) =
Masukkan nilai a21 (budget produksi 1 per satuan produk X1) =
Masukkan nilai a22 (budget produksi 1 per satuan produk X2) =
Masukkan nilai a23 (budget produksi 1 per satuan produk X3) =
Masukkan nilai a31 (budget produksi 2 per satuan produk X1) =
Masukkan nilai a32 (budget produksi 2 per satuan produk X2) =
Masukkan nilai a33 (budget produksi 2 per satuan produk X3) =
Klik SAVE untuk menyimpan UPDATE
Gambar 3.11 Tampilan UPDATE fungsi Simpleks
Setelah proses iterasi dan telah ditemukan hasil yang optimal, maka tampilan
akan berubah. Seperti pada Gambar 3.12. Bila hasil sudah optimal maka hasil-hasil
perhitungan seperi nilai-nilai variabel z, xa, xb, dan xc akan ditampilkan. Juga
ditampilkan kesimpulan perhitungan proses program dari awal hingga akhir. Pengguna
SAVE
68
diharapkan mengklik button FINISH untuk mengakhiri program dan program secara
otomatis akan ditutup setelah button FINISH diklik.
Gambar 3.12 Rancangan tampilan akhir program dengan hasil akhir
3.8 Pseudocode
Dalam perancangan program optimalisasi prediksi keuntungan dengan Metode
Regresi Linier dan Metode Simpleks, diperlukan fungsi-fungsi yang menjadi pendukung
utama dalam proses berjalannya program. Berikut ini adalah peudocode dari fungsi-
fungsi utama pada program yang dirancang.
Fungsi Metode Linier Regresi: namespace SelatAnyar
public partial class FormLinearRegressionScreen : Form
Jadi dengan target keuntungan per satuan produk X1, X2, dan X3 = q, w, dan e; harga jual per satuan produk X1, X2, dan X3 = f, g, dan h; budget produksi 1 per satuan produk X1, X2, dan X3 = z, x, dan c; dan budget produksi 2 per satuan produk X1, X2, dan X3 = v, b, dan n. Maka : xa = j; xb = k; xc = l; Max z = asd jadi perlu memproduksi j unit produk X1, k unit produk X2, dan l unit produk X3 agar diperoleh keuntungan maksimal Rp. Asd,‐ ket : X1 : Guard Track Bulldozer D85 X2 : Brace Bulldozer D85
FINISH
69
public FormLinearRegressionScreen()
InitializeComponent()
private void buttonPrevious_Click(object sender,
EventArgs e)
this.Close()
private void buttonRegresiNext_Click(object sender,
EventArgs e)
FormInputScreen a = new FormInputScreen()
this.Hide()
a.ShowDialog()
this.Close()
private void Regresi(int limit,decimal [] rev, decimal
[] x1, decimal [] x2,string nowyear, int nowmonth)
decimal [] xiyi = new decimal[3]
decimal [] xi = new decimal[3]
decimal [] xi2 = new decimal[3]
decimal [] yi = new decimal[3]
decimal [] yi2 = new decimal[3]
decimal[] xbar = new decimal[3]
decimal[] ybar = new decimal[3]
decimal[] a = new decimal[3]
decimal[] b = new decimal[3]
decimal[] ans = new decimal[3]
for(int i=0;i<3;i++) xiyi[i] = xi[i] = xi2[i] =
yi[i] = yi2[i] = 0
for (int i = 0; i < limit; i++)
xiyi[0] += (i + 1) * rev[i]
xiyi[1] += (i + 1) * x1[i]
xiyi[2] += (i + 1) * x2[i]
xi[0] += (i+1)
xi[1] += (i+1)
xi[2] += (i+1)
70
xi2[0] += (i+1)*(i+1)
xi2[1] += (i+1)*(i+1)
xi2[2] += (i+1)*(i+1)
yi[0] += rev[i]
yi[1] += x1[i]
yi[2] += x2[i]
yi2[0] += rev[i] * rev[i]
yi2[1] += x1[i] * x1[i]
yi2[2] += x2[i] * x2[i]
for (int i = 0; i < 3; i++)
xbar[i] = Convert.ToDecimal(xi[i] / limit)
ybar[i] = Convert.ToDecimal(yi[i] / limit)
b[i] = Convert.ToDecimal((xiyi[i] -
limit*xbar[i]*ybar[i])/(xi2[i]-limit*xbar[i]*xbar[i]))
a[i] = ybar[i] - b[i] * xbar[i]
ans[i] = Convert.ToDecimal(a[i] + b[i] * (limit
+ 1))
string[] ansStr = new string[3]
for (int i = 0; i < 3; i++)
ansStr[i] = ans[i].ToString("#.####")
Function.xxx[i] = ans[i]
string[] add = Function.getMonth((nowmonth % 12) +
1) + Function.getYear(nowyear, nowmonth), ansStr[0], ansStr[1],
ansStr[2]}
dataGridViewDatabase.Rows.Add(add)
private void FormLinearRegressionScreen_Load(object
sender, EventArgs e)
DatabaseConnection cnt = new DatabaseConnection()
if (cnt.OpenConnection() == true)
string query = "select * from data order by
tahun, bulan asc"
MySqlCommand cmd = new MySqlCommand(query,
cnt.getConnection())
71
MySqlDataReader dataReader = cmd.ExecuteReader()
dataGridViewDatabase.Rows.Clear()
decimal[] rev = new decimal[1000]
decimal[] x1 = new decimal[1000]
decimal[] x2 = new decimal[1000]
string nowyear=""
int nowmonth = 0
int len = 0
while (dataReader.Read())
string tahun = dataReader[0].ToString()
int bulan = (int)dataReader[1]
string revenue = dataReader[2].ToString()
string costx1 = dataReader[3].ToString()
string costx2 = dataReader[4].ToString()
rev[len] = Convert.ToDecimal(dataReader[2])
x1[len] = Convert.ToDecimal(dataReader[3])
x2[len] = Convert.ToDecimal(dataReader[4])
string[] add = Function.getMonth(bulan) +
tahun, revenue, costx1, costx2
dataGridViewDatabase.Rows.Add(add)
len++
nowyear = tahun
nowmonth = bulan
Regresi(len,rev,x1,x2,nowyear,nowmonth)
dataReader.Close()
cnt.CloseConnection()
private void
FormLinearRegressionScreen_FormClosed(object sender,
FormClosedEventArgs e)
Fungsi Metode Simpleks: namespace SelatAnyar
72
class Function
public static decimal [] xxx = new decimal[3];
public static decimal[] c = new decimal[6];
public static decimal[,] a= new decimal[6,6];
public static decimal[] temp = new decimal[6];
public static decimal result;
public static void calctemp( int [] basic )
int i = 0, j = 0;
for (i = 0; i < 6; i++)
temp[i] = 0;
for (j = 0; j < 3; j++)
temp[i] = temp[i] + c[basic[j]] * a[j,i]
temp[i] = temp[i] - c[i]
public static void minimum(decimal[] arr,ref int
arrminpos, int n)
int i = 0
decimal arrmin = 0
arrmin = arr[0]
arrminpos = 0
for (i = 0; i < n; i++)
if (arr[i] < arrmin)
arrmin = arr[i]
arrminpos = i
public static void SimplexMethod()
for (int abc = 3; abc < 6;abc++) c[abc] = 0
a[0, 3] = 1
a[0, 4] = 0
a[0, 5] = 0
a[1, 3] = 0
a[1, 4] = 1
a[1, 5] = 0
a[2, 3] = 0
73
a[2, 4] = 0
a[2, 5] = 1
xxx[0] = -xxx[0]
const decimal INFINITY = 1000000000
int tempminpos = 0
decimal[] miniratio = new decimal[3]
int miniratiominpos = 0
decimal key=0,z=0
int gooutcol=0
int i=0, j=0
decimal[] x = new decimal[6]
int[] basic = new int[3]
int[] nonbasic = new int[3]
int flag = 0
for (i = 0; i < 6; i++) temp[i] = 0
for (i = 0; i < 3; i++)
basic[i] = (i + 3)
nonbasic[i] = i
while (flag == 0)
z = 0
calctemp(basic)
minimum(temp,ref tempminpos, 6)
for (i = 0; i < 3; i++)
x[basic[i]] = xxx[i]
x[nonbasic[i]] = 0
for (i = 0; i < 3; i++)
z = z + c[i] * x[i]
result = z
for (i = 0; i < 3; i++)
if (a[i,tempminpos] == 0)
miniratio[i] = INFINITY
continue
if (a[i,tempminpos] < 0)
miniratio[i] = INFINITY
continue
74
miniratio[i] = xxx[i] / a[i,tempminpos]
minimum(miniratio, ref miniratiominpos, 3)
for (i = 0; i < 3; i++)
if (miniratiominpos == i) gooutcol =
basic[i]
basic[miniratiominpos] = tempminpos
nonbasic[tempminpos] = gooutcol
key = a[miniratiominpos,tempminpos]
xxx[miniratiominpos] = xxx[miniratiominpos] /
key
for (i = 0; i < 6; i++)
a[miniratiominpos,i] = a[miniratiominpos,i]
/ key
for (i = 0; i < 3; i++)
if (miniratiominpos == i) continue
key = a[i,tempminpos]
for (j = 0; j < 6; j++)
a[i,j] = a[i,j] - a[miniratiominpos,j] *
key
xxx[i] = xxx[i] - xxx[miniratiominpos] * key
for (i = 0; i < 6; i++)
flag = 1
if (temp[i] < 0)
flag = 0
break
for (i = 0; i < 3; i++) xxx[i] = x[i]
public static string getMonth(int month)
string[] months = { "Jan ", "Feb ", "Mar ", "Apr ",
"Mei ", "Jun ", "Jul ", "Agu ", "Sep ", "Okt ", "Nov ", "Des " }
return months[month - 1]
public static string getYear(string year, int month)
string nowyear = year
if (month > 12)
75
int temp = Convert.ToInt32(year)
temp += 1
nowyear = Convert.ToString(temp)
return nowyear
public static bool isnumber(char c)
if (c >= '0' && c <= '9') return true;
return false
public static bool getInput(string str)
if (str == "" || str.Length == 0 ) return false
bool number = true
try
decimal.Parse(str)
catch
number = false
return number