LOGO
Pemrograman Bilangan Bulat
(Integer Programming)
Amelia Kurniawati ST., MT.
2
Outline
Konsep
Bilangan
Bulat
Metode
pemecahan
bilangan bulat
• Pengantar
pemrograman bilangan bulat
• Contoh model
pemrograman
• Metode branch
GOAL
Memahami permasalahan dan solusi
variabel integer
Memahami metode Branch and Bound
LOGO
Konsep Bilangan Bulat
LOGO
①
Pengantar Pemrograman
6
Pemrograman Bilangan Bulat
Pemrograman bilangan bulat (integer
programming) mensyaratkan bahwa
beberapa variabel keputusan harus mempunyai nilai yang bulat (bukan pecahan)
Disini, pembahasan hanya ditujukan
untuk masalah pemrograman linier
bilangan bulat (integer linear
Jenis Pemrograman Linier
Bilangan Bulat
Pemrograman linier bilangan bulat
murni (pure integer linear
programming, PILP)
Pemrograman linier bilangan bulat
campuran (mixed integer linear
programming, MILP)
Pemrograman linier bilangan bulat
biner (binary integer linear
8
Pembatas Either-Or
18
LP format:
0,1
i
y
Fungsi dengan N Nilai yang Mungkin
x x xn
d d dNf 1, 2,, 1 atau 2 atau atau
N
i
i i
n d y
x x
x f
1 2
1, ,,
Perumusan ILP:
1
1
N
i
i
y
i N yi 0,1 , 1,2,,10
Contoh Kasus:
18 atau 12
atau 6
2
3x1 x2
3 2
1 2
1 2 6 12 18
3x x y y y
Perumusan ILP:
1
3 2
1 y y y
0,1 , 1,2,3 i
yi
Representasi Biner untuk Variabel Bilangan Bulat
u
x
0
dimana
2
2
1
NN
u
Representasi biner:
N
i
i i
y
x
0
2
i
N
y
i
0
,
1
,
1
,
2
,
,
Batas-batas untuk variabel x:
12
Contoh Kasus:
5
1
x
Representasi biner:
5
4
2
1 20
y
y
y
0
,
1
,
0
,
1
,
2
i
y
i30
3
2
x
1
x
2
2
4
3
2
4
8
30
2
y
0
y
1
y
2
w
0
w
1
w
2
3
u untuk x1 = 5 22 5 23
u untuk x2 = 10 23 10 24
0
,
1
,
0
,
1
,
2
,
3
i
w
iLOGO
②
Beberapa Contoh Model
14
Beberapa Contoh Model-model
Pemrograman Bilangan Bulat
Fixed charge problem Knapsack problem
Set covering problem
Set Partitioning Problem
Traveling salesman problem
Fixed Charge Problem
(1)
Misalkan terdapat n jenis produk pj = harga satuan produk j
Kj = biaya tetap untuk memproduksi produk j (independen terhadap jumlah produksi) cj = biaya variabel untuk memproduksi
produk j (proporsional terhadap jumlah produksi)
bi = kapasitas sumber i (i = 1, …m)
16
Fixed Charge Problem
(2)
Permasalahan :
Menentukan produk mana yang perlu diproduksi dan jumlah produksinya masing-masing agar diperoleh profit (selisih penjualan dengan biaya tetap dan variabel) total yang maksimum dengan memperhatikan kondisi:
ketersediaan kapasitas
jika suatu produk diputuskan untuk tidak diproduk maka jumlah produksinya nol.
Variabel keputusan :
xj = jumlah produk j yang diproduksi
yj = keputusan untuk memproduksi atau tidak produk j;
yj = 1 jika produk j diproduksi
Fixed Charge Problem
(3)
dengan pembatas-pembatas:
18
Knapsack Problem
(1)
Misalkan terdapat n item.
wj = berat item j vj = nilai item j
W = kapasitas muatan (berat) dari kantong Permasalahan :
Menentukan jumlah item yang perlu dimasukkan ke dalam kantong agar diperoleh nilai total yang
maksimum dengan memperhatikan kondisi kapasitas muatan (berat) dari kantong
Variabel keputusan :
Knapsack Problem
(2)
n
j
j j
x
v
Z
1
Maksimasi
dengan pembatas-pembatas:
W
x
w
n
j
j j
1
bulat
bilangan
dan
0
j
20
Set Covering Problem
(1)
Jalan C
Jalan D Jalan B Jalan A
Jalan E
Jalan F
Ja
la
n
G Jala
n
K
Ja
la
n
J
Ja
la
n
I
Ja
la
n
H
1 2
6 7
4
8 5 3
Set Covering Problem
(2)
Misalkan terdapat n lokasi pendirian pos dan m jalan.
cj = biaya mendirikan pos di lokasi j aij = konstanta biner (0-1)
aij = 1 jika jalan i dilayani oleh pos yang berlokasi di j aij = 0 jika sebaliknya
Pertanyaan:
Menentukan lokasi pendirian pos dimana tiap jalan dapat
dilayani minimal oleh satu pos sehingga diperoleh biaya total pendirian yang minimum
Variabel keputusan
xj = variabel biner (0-1) yang menentukan keputusan untuk mendirikan pos di lokasi j (xj = 1 jika pos
22
Set covering problem
(3)
n
j
j j
x
c
Z
1
Minimasi
dengan pembatas-pembatas:
m
i
x
a
n
j
j
ij
1
,
1
,...,
1
j
n
Set Partitioning Problem
n
j
j j
x
c
Z
1
Minimasi
dengan pembatas-pembatas:
m
i
x
a
n
j
j
ij
1
,
1
,...,
1
j
n
x
j
0
,
1
,
1
,...,
Tiap jalan
tepat dilayani
24
Traveling Salesman Problem
(1)
1
2
3
4 5
5
6
3 4
3 8
2 6
1 7
Traveling Salesman Problem
(2)
Misalkan terdapat n titik.
cij = jarak antara titik i ke titik j (cij = untuk i = j) Permasalahan
Menentukan rute salesman yang berangkat dari suatu titik dan mengunjungi setiap titik yang lain paling
banyak sekali, serta kembali ke titik asal agar diperoleh jarak total yang minimum
Variabel keputusan
Xij = keputusan untuk melintasi atau tidak busur (i, j) xij = 1 jika busur (i, j) dilintasi
26
Traveling Salesman Problem
(3)
dengan pembatas-pembatas:
n
Traveling Salesman Problem
(4)
1
2
3
4 5
Subtour
28
Traveling Salesman Problem
(5)
1
2
3
4 5
Tour
Job Scheduling Problem
(1)
Misalkan
terdapat n job dengan operasi-tunggal
terdapat satu mesin tunggal
pj = waktu pengerjaan job j wj = bobot kepentingan job j
Permasalahan:
30
Job Scheduling Problem
(2)
Variabel keputusan:
Bj = saat awal pengerjaan job j Cj = saat akhir pengerjaan job j
yij = keputusan apakah job i mendahului job i yij = 1 jika job i mendahului job j
yij = 0 jika sebaliknya
0
3 1 4 5 2
p3 p1 p4 p5 p2
Job Scheduling Problem
(3)
dengan pembatas-pembatas:
n
Disjunctive constraint
LOGO
32
Metode Pemecahan
Metode pemecahan kasus pemrograman bilangan bulat:
Cutting method
Cutting Plane
Search method
LOGO
Metode Cutting Plane
Algoritma
Cutting Plane
Dikembangkan oleh R.E. Gomory
Algoritma
Fractional algorithm untuk masalah
pemrograman bilangan bulat murni (PILP)
Mixed algorithm untuk masalah pemrograman
36
Ilustrasi Suatu Masalah
ILP
Maximasi Z = 7x1 + 9x2
dengan pembatas-pembatas: –x1 + 3x2 6
7x1 + x2 35
Daerah layak
x2
38 Solusi Optimal Kontinyu
(dengan mengabaikan kondisi integralitas) x2
x1
63
3 , 4 )
,
( 12
2 1 2
1
Z
Ide Dasar dari
Cutting Plane
Mengubah convex set dari daerah
ruang pemecahan (solution space)
sehingga titik ekstrem menjadi bilangan bulat
Perubahan dibuat tanpa men-slicing
off daerah layak dari masalah awal.
Perubahan dilakukan dengan
penambahan beberapa secondary
40
Penambahan pembatas sekunder
x2
x1 secondary constraint
55
3 , 4 )
, ( 1 2
Z
Fractional Algorithm
(1)
Digunakan untuk memecahkan masalah pemrograman linier bilangan bulat murni
(PILP).
Mensyaratkan bahwa semua koefisien
teknologi dan konstanta ruas kanan adalah bilangan bulat.
Pada awalnya, masalah PILP dipecahkan sebagai LP reguler, yaitu dengan
mengabaikan kondisi integralitas.
2 13 3
1
2
1 x
42
Fractional Algorithm
(2)
Basis x1 xi xm w1 wj wn Solusi
x1 1 0 0 11
1j 1n 1
xi 0 1 0 i1
ij in n
xm 0 0 1 m1
mj mn m
0 0 0 0
j
c c1 cj cn
Fractional Algorithm
(3)
Variabel xi (i = 1, …, m) menunjukkan variabel basis
Variabel wj (j = 1, …, n) menunjukkan variabel non basis
Misalkan persamaan ke-i dimana variabel xi diasumsikan bernilai bilangan bulat
bulat bilangan
bukan
, i
1
n
j
j j i i
i w
x
44
Fractional Algorithm
(4)
Misal:
i
i
f
i
ij ji j
i
f
dimana
N = [a] adalah bilangan bulat terbesar sehingga N a
Fractional Algorithm
(5)
Dari baris sumber diperoleh:
n
j
j j i i
i n
j
i ij
i f w x w
f
1 1
Agar semua xi dan wj adalah bilangan bulat,
maka ruas kanan dari persamaan harus bilangan bulat
46
Fractional Algorithm
(6)
Untuk fij 0 dan wj 0 untuk semua i dan j maka
0
1
n
j
j ij
w
f
Akibatnya
i n
j
j ij
i
f
w
f
f
Fractional Algorithm
(7)
1
1
n
j
j ij
i
f
w
f
Karena fi < 1 maka
Karena ruas kiri harus bilangan bulat, maka syarat perlu untuk memenuhi integralitas adalah:
0
1
n
j
j ij
i
f
w
48
Fractional Algorithm
(8)
Pertidaksamaan terakhir dapat dijadikan sebagai pembatas dalam bentuk:
i n
j
j ij
i
f
w
f
S
1
Fractional Algorithm
(9)
Basis x1 xi xm w1 wj wn Si Solusi
x1 1 0 0 11
1j 1n 0 1
xi 0 1 0 i1
ij in 0 n
xm 0 0 1 m1
mj mn 0 m
Si 0 0 0 -fi1 -f
ij -fim 1 -fi
0 0 0 0 0
j
c c1 cj cn
50
Fractional Algorithm
(10)
Dengan penambahan fractional cut,
tabel terakhir menjadi tidak layak walaupun optimal sehingga metode
dual simplex diterapkan untuk meniadakan ketidaklayakan.
Algoritma berhenti jika solusi optimal
Fractional Algorithm
(11)
i n
j
j
ij
w
f
f
1
k n
j
j
kj
w
f
f
1
Cut (1) dikatakan lebih kuat dari cut (2) jika
fi fk dan fij fkj untuk semua j dengan strict inequality
52
Fractional Algorithm
(12)
Aturan :
i if
max
n
j
ij i i
f
f
Ilustrasi Penerapan
Fractional Algorithm
(1)
Maximasi Z = 7x1 + 9x2
dengan pembatas-pembatas: –x1 + 3x2 6
7x1 + x2 35
54
Ilustrasi Penerapan
Fractional Algorithm
(2)
Basis x1 x2 x3 x4 Solusi
x2 0 1 7/22 1/22 3 1/
2
x1 1 0 -1/22 3/22 4 1/ 2
Ilustrasi Penerapan
Fractional Algorithm
(3)
2
Fractional cut:
56
Ilustrasi Penerapan
Fractional Algorithm
(4)
Basis x1 x2 x3 x4 S1 Solusi
x2 0 1 7/22 1/22 0 7/2
x1 1 0 -1/22 3/22 0 9/2
S1 0 0 -7/22 -1/22 1 -1/2 cj – zj 0 0 -28/11 -15/11 0
Ilustrasi Penerapan
Fractional Algorithm
(5)
Basis x1 x2 x3 x4 S1 Solusi
x2 0 1 0 0 1 3
x1 1 0 0 1/7 -1/7 4 4/
7
x3 0 0 1 1/7 -22/7 1 4/ 7
cj – zj 0 0 0 -1 -8 Z = 59
58
Ilustrasi Penerapan
Fractional Algorithm
(6)
7
Fractional cut:
Ilustrasi Penerapan
Fractional Algorithm
(7)
Basis x1 x2 x3 x4 S1 S2 Solusi
x2 0 1 0 0 1 0 3
x1 1 0 0 1/7 -1/7 0 4 4/
7
x3 0 0 1 1/7 -22/7 0 1 4/ 7
S2 0 0 0 -1/7 -6/7 1 -4/7
cj – zj 0 0 0 -1 -8 0
60
Ilustrasi Penerapan
Fractional Algorithm
(8)
Basis x1 x2 x3 x4 S1 S2 Solusi
x2 0 1 0 0 1 0 3
x1 1 0 0 0 -1 1 4
x3 0 0 1 0 -4 1 1
x4 0 0 0 1 6 -7 4
cj – zj 0 0 0 -2 -7 0 Z = 55
2
Ilustrasi
Fractional Cut
secara grafis (1)
62
Ilustrasi
Fractional Cut
secara grafis (2)
x2x1
3
2
7
Ilustrasi
Fractional Cut
secara grafis (3)
64
Ilustrasi
Fractional Cut
secara grafis (4)
x2
x1
3
2
x
7
2 1 x
Mixed Algorithm
(1)
Digunakan untuk memecahkan
masalah pemrograman linier bilangan
bulat campuran (MILP)
Pada awalnya, masalah MILP
dipecahkan sebagai LP reguler, yaitu
66
Mixed Algorithm
(3)
Maximasi Z = 7x1 + 9x2
dengan pembatas-pembatas: –x1 + 3x2 6
7x1 + x2 35
x1 ≥ 0 dan bilangan bulat
Mixed Algorithm
(3)
Misal xk adalah variabel bilangan bulat dari masalah MILP.
Persamaan-xk dalam solusi kontinyu optimal:
68
Mixed Algorithm
(4)
Untuk xk adalah bilangan bulat, maka
atau
1
k k kk
x
x
harus dipenuhi
k n
j
k j
k
w
f
1
Dari baris sumber, kondisi ini ekivalen dengan
1
1
k n
j
k j
k
w
f
(1)
Mixed Algorithm
(5)
Misal
J+ = himpunan subscripts j untuk
kj 0
J- = himpunan subscripts j untuk
kj < 0
Dari (1) dan (2) diperoleh
k n
J j
k j
k
w
f
k n
J j
k j k k
k
w
f
f
f
1
(1)
70
Mixed Algorithm
(6)
Karena (1) dan (2), tidak dapat terjadi secara simultan, maka (3) dan (4) dapat digabungkan menjadi satu
pembatas dalam bentuk
Ilustrasi Penerapan
Mixed Algorithm
(1)
Maximasi Z = 7x1 + 9x2
dengan pembatas-pembatas: –x1 + 3x2 6
7x1 + x2 35
x1 ≥ 0 dan bilangan bulat
72
Ilustrasi Penerapan
Mixed Algorithm
(2)
Basis x1 x2 x3 x4 Solusi
x2 0 1 7/22 1/22 7/2
x1 1 0 -1/22 3/22 9/2
Ilustrasi Penerapan
Mixed Algorithm
(3)
74
Basis x1 x2 x3 x4 S1 Solusi
x2 0 1 7/22 1/22 0 7/2
x1 1 0 -1/22 3/22 0 9/2
S1 0 0 -1/22 -3/22 1 -1/2 cj – zj 0 0 -28/11 -15/11 0
Basis x1 x2 x3 x4 S1 Solusi
x2 0 1 10/33 0 -1/3 10/3
x1 1 0 -1/11 0 1 4
x4 0 0 1/3 1 -22/3 11/3 cj – zj 0 0 -23/11 -10 0 Z= 58 Tabel yang diperoleh dengan dual simplex:
LOGO
Metode
Branch and Bound
Algoritma
Branch-and-Bound
(1)
Metode yang paling banyak digunakan
dalam praktek untuk memecahkan
masalah pemrograman bilangan bulat baik murni maupun campuran.
Digunakan sebagian besar software
komersial
Pada dasarnya merupakan prosedur
enumerasi yang efisien untuk
78
Algoritma
Branch-and-Bound
(2)
Algoritma BB untuk ILP
(PILP & MILP)
Algoritma BB untuk ILP (1)
Misalkan diberikan suatu masalah pemrograman bilangan bulat sebagai berikut:
Maksimasi Z = cx dengan pembatas
Ax = b x 0
xj bilangan bulat untuk j I
80
Algoritma BB untuk ILP (2)
Langkah pertama adalah memecahkan masalah ILP sebagai LP dengan mengabaikan pembatas bilangan bulat (bounding)
Misalkan masalah LP dinyatakan sebagai LP-1 yang mempunyai nilai optimal dari fungsi
tujuan Z1.
PL-1
Maksimasi Z = cx
dengan pembatas
Ax = b
x 0
Algoritma BB untuk ILP (3)
Asumsikan bahwa solusi optimal dari LP-1 mengandung beberapa variabel bilangan bulat yang mempunyai nilai pecahan.
Oleh karena itu, solusi optimal bilangan bulat untuk ILP belum diperoleh dan Z1
menjadi batas atas (upper bound) dari nilai maksimum Z untuk ILP.
Langkah berikutnya adalah mempartisi daerah layak dari LP-1 dengan
82
Algoritma BB untuk ILP (4)
Misalkan variabel xj dipilih untuk
dicabangkan dengan nilai pecahan j dalam
LP-1.
Misalkan dibuat dua masalah pemrograman linier baru, LP-2 dan LP-3 dengan
Algoritma BB untuk ILP (5)
Maksimasi Z = cx
dengan pembatas
Ax = b
xj []
x 0
Maksimasi Z = cx
dengan pembatas
Ax = b
xj []+1
x 0
84
Algoritma BB untuk ILP (6)
LP-1
LP-2 LP-2
Solusi pecahan
Z1
Solusi pecahan
Z2
] [ j
j
x
xj [j ]1Solusi pecahan
Algoritma BB untuk ILP (7)
Memecahkan (bounding) LP-2 dan LP-3
Asumsikan solusi LP-2 dan LP-3 masih pecahan
Langkah berikutnya adalah memilih node
86
Algoritma BB untuk ILP (8)
Setelah masalah LP dipilih untuk
dicabangkan lebih lanjut, langkahnya selanjutnya adalah
memilih variabel bilangan bulat dengan nilai pecahan yang akan dicabangkan untuk membentuk dua masalah LP baru (proses branching)
memecahkan masalah LP yang baru (proses bounding)
Jika solusi bilangan bulat diperoleh dari
suatu masalah LP maka nilai Z-nya menjadi batas bawah (lower bound) dari nilai
Algoritma BB untuk ILP (9)
Proses branching dan bounding
berlanjut hingga semua node dalam
kondisi fathomed.
Fathoming suatu node (masalah LP):
Solusi optimal LP merupakan bilangan bulat
Masalah LP adalah tak layak
Nilai optimal Z dari masalah LP tidak lebih baik
88
Algoritma BB untuk ILP (10)
LP-1
LP-2 LP-3
Solusi pecahan
Z0 = Z1
Solusi pecahan
Z2
] [ j
j
x xj [j]1
Solusi pecahan
Z5
LP-3 LP-4
Tidak layak Solusi bulat
Z4
] [ i
i
Algoritma BB untuk ILP (11)
LP-1
LP-2
LP-3 LP-4
LP-5
LP-6 LP-7
Solusi pecahan
Z0 = Z1
Solusi pecahan
Z2
Tidak layak Solusi bulat
Z4
Solusi pecahan
Z6 < Z4
] [ j
j
x xj [j]1
] [ i
i
x xi [i]1 xk [k] xk [k ]1 Solusi pecahan
Z5
Solusi pecahan
90
Algoritma BB untuk ILP (12)
Esensi dari algoritma BB
Ilustrasi Penerapan Algoritma BB (1)
Maximasi Z = 2x1 + 3x2
dengan pembatas-pembatas:
5x1 + 7x2 35
4x1 + 9x2 36
92
LP-1
178
176 2
17 12 1
14
2 ,
3
Z
LP-1
LP-2 LP-3
94
LP-1
LP-2 LP-3
178
LP-1
LP-2 LP-3
178
96
LP-1
LP-2 LP-3
178
LP-1
LP-2 LP-3
178
LP-4 LP-5 4
Fathomed karena perbedaan nilai Z dengan lower bound < 1 dan semua koefisien fungsi tujuan adalah bulat
Solusi bilangan bulat optimal
x1 = 4, x2 = 2
98
LP-1
178
176 2
17 12 1
14
2 ,
3
Z
x x
LP-1
LP-2 LP-3
100
LP-1
LP-2 LP-3
178
Tidak layak
LP-1
LP-2 LP-3
178
Tidak layak
102
LP-1
LP-2 LP-3
178
Tidak layak
3
LP-6 LP-7
LP-1
LP-2 LP-3
178
Tidak layak
3
LP-6 LP-7
104
LP-1
LP-2 LP-3
178
Tidak layak
3
LP-6 LP-7
LP-1
LP-2 LP-3
178
Tidak layak
3
LP-6 LP-7
13
106
LP-1
LP-2 LP-3
178
Tidak layak
3
LP-6 LP-7
13
LP-1
LP-2 LP-3
178
Tidak layak
3
LP-6 LP-7
13
LP-8 LP-9 4
108
Aturan Pencabangan (1)
Aturan-aturan pencabangan variabel
adalah sebagai berikut:
Pilih variabel bilangan bulat yang mempunyai
nilai pecahan terbesar dalam solusi LP.
Pilih variabel bilangan bulat yang mempunyai
prioritas paling tinggi.
Menunjukkan keputusan yang terpenting dalam
model
Mempunyai koefisien profit/biaya paling besar Mempunyai nilai yang kritis yang didasarkan
pengalaman pengguna
Aturan pemilihan bebas, misal, pilih variabel
Aturan Pencabangan (2)
Aturan penentuan masalah LP yang
hendak dicabangkan:
Nilai optimal dari fungsi tujuan
LIFO (Last-In First-Out), yaitu masalah LP
110
Algoritma BB untuk BILP
Maximasi Z = 9x1 + 5x2 + 6x3 + 4x4
dengan pembatas-pembatas:
6x1 + 3x2 + 5x3 + 2x4 10 x3 + x4 1
-x1 + x3 + 0 -x2 + x4 0
LP-1
) ; , , ,
112
LP-1
LP-2 LP-3
) ; , , ,
(x1 x2 x3 x4 Z
65 ,1,0,1;16 12
0
1
x
1
1
x
0,1,0,1;9
51
54 5
4 ,0, ;16
LP-1
LP-2 LP-3
) ; , , ,
(x1 x2 x3 x4 Z
65 ,1,0,1;16 12
0
1
x
1
1
x
0,1,0,1;9
51
54 5
4 ,0, ;16
114
LP-1
LP-2 LP-3
) ; , , ,
(x1 x2 x3 x4 Z
65 ,1,0,1;16 12
0
1
x
1
1
x
0,1,0,1;9
51
54 5
4 ,0, ;16
, 1
LP-4 LP-5 0
2
x x2 1
1,0, 54 ,0;13 54
LP-1
LP-2 LP-3
) ; , , ,
(x1 x2 x3 x4 Z
65 ,1,0,1;16 12
0
1
x
1
1
x
0,1,0,1;9
51
54 5
4 ,0, ;16
, 1
LP-4 LP-5 0
2
x x2 1
1,0, 54 ,0;13 54
1,1,0, 21 ;16
LP-6 LP-7 0
3
x x3 1
1,1,0, 12 ;16
116
LP-1
LP-2 LP-3
)
LP-4 LP-5 0
2
x x2 1
1,0, 54 ,0;13 54
1,1,0, 21 ;16
LP-6 LP-7 0
3
x x3 1
1,1,0, 12 ;16
Tidak layak
LP-8 LP-9
1,1,0,0;14
0
4
x x4 1
117
LP-1
LP-2 LP-3
)
LP-4 LP-5 0
2
x x2 1
1,0, 54 ,0;13 54
1,1,0, 21 ;16
LP-6 LP-7 0
3
x x3 1
1,1,0, 12 ;16
Tidak layak
LP-8 LP-9
1,1,0,0;14
0
4
x x4 1
118
LP-1
LP-2 LP-3
)
LP-4 LP-5 0
2
x x2 1
1,0, 54 ,0;13 54
1,1,0, 21 ;16
LP-6 LP-7 0
3
x x3 1
1,1,0, 12 ;16
Tidak layak
LP-8 LP-9
1,1,0,0;14
0
4
x x4 1
LOGO
Thank you!
ADD YOUR COMPANY SLOGAN