TIM PENYUSUN:
Putu Veri Swastika M.Si.
Ni Ketut Tari Tastrawati, S.Si.,M.Si.
Rani Sulvianuri, M.Si.
1
KATA PENGANTAR
Puja dan puji syukur penulis panjatkan ke hadapan Ida Sang Hyang Widi Wasa, Tuhan
Yang Maha Esa, karena atas asungkerta waranugraha Nya, berkat dan rahmat-Nya, penulis
dapat menyelesaikan Laporan Penelitian ini Di Prodi Matematika Fakultas Matematika Dan
Ilmu Pengetahuan Alam, Universitas Udayana Periode Semester Ganjil 2022/2023 dengan
judul “PEMROGRAMAN LINEAR IMPLEMENTASI MENGGUNAKAN BAHASA MATLAB”
Draft ini ditulis untuk memenuhi persyaratan kelulusan Diklat Prajabatan CPNS
Golongan III angkatan XV tahun 2022 dan sebagai prototype modul pedoman perkuliahan
Pemrograman Linear. Dalam penyusunan, penulis mendapatkan banyak dukungan dan
bimbingan dari berbagai pihak, sehingga dapat diselesaikan dengan optimal dan tepat waktu.
Oleh sebab itu, penulis ingin menyampaikan terima kasih, rasa hormat dan penghargaan yang
tulus kepada:
2
9. Seluruh Dosen dan Tenaga Kependidikan di Universitas Udayana yang telah
memberikan dukungan selama penyusunan Rancangan Aktualisasi.
10. Keluarga terkasih, yang telah memberikan dukungan penuh, yang selalu mendoakan,
memberi motivasi dan semangat dalam menyusun Rancangan Aktualisasi ini;
Dengan kerendahan hati, penulis menyadari bahwa laporan ini belum dapat
dikatagorikan sempurna, walaupun demikian semoga rancangan ini dapat memberi
sumbangsih terhadap internalisasi nilai-nilai dasar PNS BerAKHLAK disetiap pribadi PNS di
lingkungan Universitas Udayana.
3
LEMBAR PENGESAHAN PENGGUNAAN
Laporan Penelitian ini dapat digunakan sebagai Prototype Modul yang hanya
digunakan dikalangan internal Prodi Matematika Fakultas Matematika dan Ilmu
Pengetahuan Alam Universitas Udayana
Menyetujui
Koordinator Program Studi Matematika
FMIPA Universitas Udayana
4
DAFTAR ISI
BAB 1 PENGANTAR MATLAB ............................................................................................. 6
1. Pengenalan Area Kerja ............................................................................................ 6
2. Tipe Data .................................................................................................................... 7
3. Cara Penulisan Variabel .......................................................................................... 7
4. Cara mengakses elemen ......................................................................................... 8
5. Operasi Matriks ......................................................................................................... 9
6. Perulangan for ........................................................................................................... 9
7. Conditional if-else.................................................................................................... 10
BAB 2 METODE SIMPLEKS ............................................................................................... 12
1. Kondisi Optimalitas dan Kondisi Kelayakan ....................................................... 12
2. Bentuk Standar LP .................................................................................................. 14
BAB 3 PEMROGRAMAN METODE SIMPLEKS MENGGUNAKAN MATLAB ............ 20
1. Inisialisasi Awal ....................................................................................................... 21
2. Program Utama ....................................................................................................... 22
3. Variabel Masukan dan Variabel Keluaran ........................................................... 23
4. Langkah Iterasi Berikutnya .................................................................................... 26
DAFTAR PUSTAKA .............................................................................................................. 30
5
BAB 1
PENGANTAR MATLAB
Berikutnya undock editor sehingga tampilan editor muncul fullscreen pada layer. Secara
garis besar ada 3 struktur utama dalam coding; header, inisialisasi dan program utama
6
2. Tipe Data
Tipe data yang dikenal dalam pemrograman MATLAB hanya dua yaitu: Numeric dan
String. Tidak seperti bahasa pemrograman yang lain, dalam pemrograman MATLAB tidak
dibutuhkan deklarasi eksplisit yang menyatakan tipe data, karena MATLAB memiliki
kemampuan tersendiri untuk mengenali tipe data yang dimasukkan oleh pemrogram pada
setiap variabelnya, dan dapat secara dinamis mengganti tipe data tersebut pada waktu yang
relatif bersamaan tanpa adanya kesalahan. Namun demikian ada beberapa hal penting yang
harus anda perhatikan dalam penulisan sintak, yaitu:
7
Beberapa hal penting penggunaan perintah MATLAB
• Tanda ; pada akhir command menunjukkan hasil command tidak ditampilkan pada layar.
• Tanda [] digunakan untuk penulisan batas awal dan akhir elemen matrik.
• Tanda ; dalam deklarasi matrik digunakan untuk pemisahan antar baris dalam matrik
(carriage return).
• Tanda , dalam deklarasi matrik berarti sama dengan spasi atau pemisah antar elemen
dalam satu baris matrik.
Coba tuliskan potongan kode berikut pada editor dan apa hasil yang ditampilkan pada
command window
Secara default MATLAB mengenali variabel yang anda gunakan sebagai sebuah
matrik/array. Maka untuk variabel yang memiliki elemen lebih dari satu, pengalamatan
setiap elemen variabel pada MATLAB memakai notasi berikut:
Untuk ilustrasi cara penggunaannya. Buatlah pada Command Window sebuah matrik
berdimensi 3x3 berikut:
8
5. Operasi Matriks
Perhatikan potongan kode berikut, coba ketikkan pada editor lalu running pada
command window, apa hasil yang didapatkan?
6. Perulangan for
Dalam membuat sebuah program yang lebih kompleks, MATLAB mempunyai sintak
untuk mengatur aliran proses program. Pengontrol aliran proses program (control flow) terdiri
dari 2 jenis yaitu Perulangan dan Kondisional. Perulangan adalah adalah jenis pengontrol
yang berguna untuk mengefisienkan penulisan skrip program, khususnya untuk program-
program yang membutuhkan proses berulang-ulang. Perulangan ini sering juga disebut
sebagai iterasi atau looping. Untuk selanjutnya kita hanya menggunakan istilah iterasi.
Sintak iterasi ini digunakan untuk melakukan pengulangan proses yang telah diketahui
jumlahnya. Misalnya untuk menghitung faktorial 5 yakni 5! maka jelas diketahui jumlah
iterasi adalah 5. Cara penulisannya adalah sebagai berikut:
% Perulangan
for variabel = indeksMulai:interval:indeksAkhir
%isikan perintah disini
end
9
Iterasi Terkondisi (while ... end)
7. Conditional if-else
10
Kondisional Nilai Absolut (switch… case…otherwise… end)
• Tugas Kelompok: Buat Program menghitung nilai akhir kuliah beserta konversinya
terhadap indeks A, B, C, D, E!
• Tugas Individu: Buat 2 buah matriks 5x5 dengan elemen-elemen yang kalian
tentukan sendiri. Lakukan operasi + × -, operasi dengan suatu skalar 16, akses
masing-masing elemen
• Tugas Individu: Buat program penghitung luas dan volume, ambil kasus persegi dan
silinder
11
BAB 2
METODE SIMPLEKS
Metode simpleks primal dimulai dari satu pemecahan dasar yang layak (titik ekstrim) dan
berlanjut untuk berulang melalui pemecahan dasar yang layak berikutnya sampai titik
optimum dicapai. Pada metode simpleks primal terdapat dua kondisi utama yang perlu
diperhatikan saat melakukan pemecahan dengan metode ini, yaitu kondisi optimalitas dan
kondisi kelayakan.
Baik untuk masalah maksimasi maupun minimasi, variabel keluar adalah variabel
dasar saat ini yang memiliki titik potong terkecil (rasio minimum dengan penyebut yang positif
secara ketat) dalam arah variabel masuk. Nilai yang sama dapat dipilih secara sembarang.
Langkah 0 : Dengan menggunakan bentuk standar (dengan sisi kanan semua nonnegatif)
tentukan pemecahan dasar awal yang layak
Langkah 1 : Pilih variabel masuk dari di antara variabel nondasar dengan menggunakan
kondisi optimalitas.
Langkah 2 : Pilih variabel keluar dari variabel dasar saat ini dengan menggunakan kondisi
kelayakan.
Langkah 3 : Tentukan nilai variabel dasar yang baru dengan membuat variabel masuk
tersebut sebagai variabel dasar dan variabel keluar sebagai variabel nondasar. Kembali ke
langkah 1.
12
Flowchart Metode Simpleks
13
Pada metode simpleks primal, dipergunakan metode yang disebut Gauss-Jordan untuk
melakukan “penukaran” variabel masuk dan variabel keluar. Sasaran utama dari prosedur
Gauss-Jordan adalah mentransformasikan persamaan-persamaan dengan cara yang
memampukan kita untuk memperoleh pemecahan dasar yang baru dengan memberikan nilai
nol pada variabel nondasar saat ini.
2. Bentuk Standar LP
Pada subbab ini disajikan bentuk standar dari permasalahan LP beserta contoh nya.
Perhatikan masalah LP
Bentuk standard:
Untuk lebih jelasnya mengenai metode simpleks primal dengan metode Gauss-Jordan di
dalam perhitungannya, berikut diberikan contoh dan penyelesaian kasus Reddy Mikks yang
sebelumnya dengan menggunakan metode simpleks primal.
CONTOH:
Reddy Mikks Company memiliki sebuah pabrik kecil yang menghasilkan cat, baik untuk
interior maupun eksterior untuk didistribusikan kepada para grosir. Dua bahan mentah, A dan
B, dipergunakan untuk membuat cat tersebut. Ketersediaan A maksimum adalah 6 ton satu
hari; ketersediaan B adalah 8 ton satu hari. Kebutuhan harian akan bahan mentah per ton cat
interior dan eksterior diringkaskan dalam tabel berikut ini.
14
Ton Bahan Mentah per Ton Cat Ketersediaan maksimum (ton)
Eksterior Interior
Bahan mentah A 1 2 6
Bahan mentah B 2 1 8
Sebuah survey pasar telah menetapkan bahwa permintaan harian akan cat interior tidak akan
lebih dari 1 ton lebih tinggi dibandingkan permintaan akan cat eksterior. Survey tersebut juga
memperlihatkan bahwa permintaan maksimum akan cat interior adalah terbatas pada 2 ton
per hari. Harga grosir per ton adalah $3000 untuk cat eksterior dan $2000 untuk cat interior.
Berapa banyak cat interior dan eksterior yang harys dihasilkan perusahaan tersebut setiap
hari untuk memaksimumkan pendapatan kotor?
𝑐𝑗 3 2 0 0 0
Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 xE xI s1 s2 s3 s4 Pemecahan
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 -3 -2 0 0 0 0 0
0 s1 0 1 2 1 0 0 0 6
0 s2 0 2 1 0 1 0 0 8
0 s3 0 -1 1 0 0 1 0 1
0 s4 0 0 1 0 0 0 1 2
15
-3 berasal dari 𝑠1 ∗ 𝑐1 + 𝑠2 ∗ 𝑐1 + 𝑠3 ∗ 𝑐1 − 𝑐1 = 0 + 0 + 0 + 0 − 3
-2 berasal dari 𝑠1 ∗ 𝑐2 + 𝑠2 ∗ 𝑐2 + 𝑠3 ∗ 𝑐2 − 𝑐2 = 0 + 0 + 0 + 0 − 2
Terlihat bahwa ada -3 dan -5 sehingga solusi belum optimal. Berikutnya lakukan Langkah 2
yakni cari variable masukan dan variable keluaran.
• Aturan mencari variable masukan: Pilih variable yang paling maksimum min 𝑧𝑗 − 𝑐𝑗 ,
yakni |-3| dan kolom yang terkait disebut dengan pivot kolom.
• Aturan mencari variable keluaran:
o Tentukan rasio dari kolom penyelesaian dengan pivot kolom (hanya kolom
pivot yang bernilai positif)
o Pilih rasio minimum dan baris yang berkesesuiana disebut baris pivot
𝑐𝑗 3 2 0 0 0
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 -3 -2 0 0 0 0 0
0 s1 0 1 2 1 0 0 0 6 6/1=6
0 s4 0 0 1 0 0 0 1 2 -
Kolom Pivot
Kunci Pivot =2
16
ITERASI 0: Tabel Awal
𝑐𝑗 3 2 0 0 0
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 -3 −2 0 0 0 0 0
0 s1 0 1 2 1 0 0 0 6 6/1=6
0 s2 0 2 1 0 1 0 0 8 8/2=4
0 s3 0 -1 1 0 0 1 0 1 -karena
minus
0 s4 0 0 1 0 0 0 1 2 -
ITERASI Berikutnya
s4 0 0 1 0 0 0 1 2 2
Berikutnya cek apakah iterasi tabel 1 adalah optimal atau tidak? Karena masalah kita adalah
maksimasi maka iterasi berhenti apabila 𝑧𝑗 − 𝑐𝑗 ≥ 0, ∀𝑗.Terlihat bahwa ada -1/2 sehingga
solusi belum optimal. Berikutnya lakukan Langkah 2 yakni cari variable masukan dan
variable keluaran.
17
ITERASI 1: Tabel
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 0 - 0 3/2 0 0 12
1/2
Xe 0 1 1/2 0 1/2 0 0 4 8
s4 0 0 1 0 0 0 1 2 2
ITERASI Berikutnya
Xe 0 1 0 - 2/3 0 0 10/3
1/3
s3 0 0 0 -1 1 1 0 3
s4 0 0 0 - 1/3 0 1 2/3
2/3
Berikutnya cek apakah iterasi tabel 1 adalah optimal atau tidak? Karena masalah kita adalah
maksimasi maka iterasi berhenti apabila 𝑧𝑗 − 𝑐𝑗 ≥ 0, ∀𝑗.Terlihat bahwa 𝑧𝑗 − 𝑐𝑗 ≥ 0, ∀𝑗,
sehingga solusi optimal. Berikut diberikan semua tabel iterasi
18
ITERASI 0: Tabel Awal
𝑐𝑗 3 2 0 0 0
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 -3 −2 0 0 0 0 0
0 s1 0 1 2 1 0 0 0 6 6/1=6
0 s2 0 2 1 0 1 0 0 8 8/2=4
0 s3 0 -1 1 0 0 1 0 1 -karena
minus
0 s4 0 0 1 0 0 0 1 2 -
ITERASI 1
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 0 -1/2 0 3/2 0 0 12
Xe 0 1 1/2 0 1/2 0 0 4 8
s4 0 0 1 0 0 0 1 2 2
ITERASI 2
s3 0 0 0 -1 1 1 0 3
HASIL PEMECAHAN: Pemecahan ini menghasilkan XE = 3 1/3 dan XI = 4/3 dengan hasil
Zj maksimum atau fungsi tujuannya maksimumnya adalah 12 2/3.
19
BAB 3
PEMROGRAMAN METODE SIMPLEKS
MENGGUNAKAN MATLAB
Pada bab ini disajikan implementasi metode simples menggunakan bahasa pemrograman
MATLAB.
Perhatikan masalah LP
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 1 −3 2 0 0 0 0
0 s1 0 3 -1 2 1 0 0 7
0 s2 0 −2 4 0 0 1 0 12
0 s3 0 −4 3 8 0 0 1 10
Pertama-tama, hitung jumlah variabel, variabel slack dan surplus serta total jumlah variabel.
Lalu tentukan indeks s pada matriks A
Jumlah variabel (𝑥1 , 𝑥2 , 𝑥3 ) adalah 3, sementara jumlah variabel basis adalah (𝑠1 , 𝑠2 , 𝑠3 ) = 3
Cost =zeros(1,banyak_kolomA); %buat matriks cost function cj
Cost (1:banyak_var)=C; %n=3 kolom pertama isi sbg koef matriks kendala C
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 1 −3 2 0 0 0 0
banyak_var banyak_kolomA-1
21
%%%% Kendala BV (variabel basis)
BV=banyak_var+1:1:banyak_kolomA-1; %mendefinisikan indeks s
BV = 4 5 6
Selanjutnya hitung 𝑍 = 𝑧𝑗 − 𝑐𝑗 .
𝑐𝑗 -1 3 -2 0 0 0 0
Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 X1 X2 X3 s1 s2 s3 Pemecahan
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 1 −3 2 0 0 0 0
0 s1 0 3 -1 2 1 0 0 7
0 s2 0 −2 4 0 0 1 0 12
0 s3 0 −4 3 8 0 0 1 10
2. Program Utama
Cek keoptimalan solusi, karena masalah yang ditinjau adalah maksimasi maka maka iterasi
berhenti apabila 𝑧𝑗 − 𝑐𝑗 ≥ 0, ∀𝑗.
if any (ZjCj<0) %untuk memeriksa apakah ada nilai ZjCj
Iterasi Berlanjut yang negatif. Jika
karena masih negative maka bukan solusi optimal
ada nilai negatif fprintf(' Ini Bukan Solusi Optimal \n')
fprintf('\n======== Hasil Iterasi Selanjutnya
========== \n')
22
Berikut dibawah ini adalah contoh hasil iterasi table 0 yang belum optimal karena ada -3 di
lajur baris 𝑧𝑗 − 𝑐𝑗
𝑍 = 𝑧𝑗 − 𝑐𝑗
𝑠1
𝑠2
𝑠3
• Aturan mencari variable masukan: Pilih variable yang paling maksimum min 𝑧𝑗 − 𝑐𝑗 ,
yakni |-3| dan kolom yang terkait disebut dengan pivot kolom.
Menampilkan nilai minimum pada ZC dan posisi kolom pivot sebagai variabel masuk
fprintf(' Elemen Minimum di Baris Zj-Cj adalah %d dan berada di kolom %d
\n', min_ZjCj,kolom_kunci);%menampilkan nilai minimum dan posisi pivot
kol
23
• Aturan mencari variable keluaran:
o Tentukan rasio dari kolom penyelesaian dengan pivot kolom (hanya kolom
pivot yang bernilai positif)
𝐴(: , 𝑒𝑛𝑑)
Melakukan cek kepositifan dari rasio hanya pada kolom pivot yang bernilai positif
o Pilih rasio minimum dan baris yang berkesesuiana disebut baris pivot
24
PERINTAH CEK KEPOSITIFAN SEMUA ELEMEN PIVOT
if all(Kolom<=0)
error('LPP tidak terbatas. Semua elemen <=0 di kolom, %d', kolom_kunci);
else
PERINTAH CEK KEPOSITIFAN RASIO
Sintaks Rasio Minimum
end
Apabila keseluruhan prosedur digabung maka Sintaks variable masukan dan variable
keluaran adalah sebagai berikut
%% Menentukan Variabel Masuk (Entering Variable)
ZC=ZjCj(1:end-1); % menyimpan nilai zj-cj (kecuali nilai solusi)pada variabel zc
[min_ZjCj, kolom_kunci]=min(ZC); %mencari nilai minimum Zj-Cj dan indeks kolom
dimana nilai minimum berada
fprintf(' Elemen Minimum di Baris Zj-Cj adalah %d dan berada di kolom %d \n',
min_ZjCj,kolom_kunci); %menampilkan tulisan
fprintf('Variabel Masuk (Entering Variable) adalah %d \n', kolom_kunci)
%% Menentukan Variabel Keluar (Leaving Variable)
sol=A(:,end); %mendefinisikan variabel Sol yang nilainya diberikan oleh
semua baris dari kolom terakhir dari A
Kolom=A(:,kolom_kunci); %mendefinisikan variabel Kolom yang nilainya
diberikan oleh A pada semua baris di kolom yang memiliki nilai minimum ZjCj
[banyak_barisKolom,banyak_kolomKolom]=size(Kolom);
if all(Kolom<=0)
error('LPP tidak terbatas. Semua elemen <=0 di kolom, %d', kolom_kunci);
else
for i=1:banyak_barisKolom
if Kolom(i)>0 %syarat rasio dihitung bila elemen Kolom positif
rasio(i)=sol(i)./Kolom(i); %menentukan rasio dari solusi
else
rasio(i)=inf;
end
end
25
4. Langkah Iterasi Berikutnya
Pada subbab ini akan ditentukan langkah iterasi berikutnya dengan mengikuti langkah 3.
Langkah 3 : Tentukan nilai variabel dasar yang baru dengan membuat variabel masuk
tersebut sebagai variabel dasar dan variabel keluar sebagai variabel nondasar.
elemen_kunci=A(baris_kunci, kolom_kunci);
Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 X1 X2 X3 s1 s2 s3 Pemecahan
Rasio
Kolom pink
tidak 𝑍 = 𝑧𝑗 − 𝑐𝑗 1 1 −3 2 0 0 0 0
ditampilkan di 0
MATLAB 0 s1 0 3 -1 2 1 0 0 7
-
0 s2 0 −2 4 0 0 1 0 12
3
0 s3 0 −4 3 8 0 0 1 10
10/3
ITERASI 1
Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 X1 X2 X3 s1 s2 s3 Pemecahan
𝑍 = 𝑧𝑗 − 𝑐𝑗 1
s1 0
A(baris_kunci,:)= A(baris_kunci,:)./elemen_kunci;
26
Prosedur OBE
Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 X1 X2 X3 s1 s2 s3 Pemecahan
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 1 −3 2 0 0 0 0
0 s1 0 3 -1 2 1 0 0 7
0 s2 0 −2 4 0 0 1 0 12
0 s3 0 −4 3 8 0 0 1 10
ITERASI 1
Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 X1 X2 X3 s1 s2 s3 Pemecahan
SimpleksTable.Properties.VariableNames(1:size(zCj,2))={'x_1','x_2','x_3',
's_1','s_2','s_3','Solusi'} %memberi label pada tabel
27
Menampilkan Solusi OPTIMAL
%%%% Menghitung dan menampilkan solusi OPTIMAL
BFS=zeros(1,banyak_kolomA);
BFS(BV)=A(:,end);
BFS(end)=sum(BFS.*Cost); %mendefinisikan elemen terakhir dari BFS
sebagai jumlahan dari semua BFS dikalikan fungsi objektif
Current_BFS=array2table(BFS); %konversi array ke format tabel
Current_BFS.Properties.VariableNames(1:size(Current_BFS,2))={'x_1','x_2',
'x_3','s_1','s_2','s_3','Solusi'} %memberi label pada tabel
Karena langkah tersebut dilakukan berulang-ulang hingga terbentuk solusi optimal maka kita
perlu menggunakan perulangan while- end
RUN=true;
while RUN
RUN=false;
end
28
Secara keseluruhan tabel iterasi pada kasus ini dapat dilihat sebagai berikut
Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 X1 X2 X3 s1 s2 s3 Pemecahan
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 1 −3 2 0 0 0 0
0 s1 0 3 -1 2 1 0 0 7
0 s2 0 −2 4 0 0 1 0 12
0 s3 0 −4 3 8 0 0 1 10
ITERASI 1
Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 X1 X2 X3 s1 s2 s3 Pemecahan
𝑍 = 𝑧𝑗 − 𝑐𝑗 1 -1/2 0 2 0 3/4 0 4
s1 0 5/2 0 2 1 1/4 0 10
x2 0 -1/2 1 0 0 1/4 0 3
s3 0 -5/2 0 8 0 -3/4 1 1
ITERASI 3
Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 X1 X2 X3 s1 s2 s3 Pemecahan
s3 0 0 0 10 1 -1/2 1 11
𝑥1 = 4; 𝑥2 = 5; 𝑥3 = 0
𝑀𝑎𝑥 𝑍 = 11 𝑠𝑒ℎ𝑖𝑛𝑔𝑔𝑎 min 𝑍 = −11
29
Program Utuh pada Matlab adalah sebagai berikut
%% ini Header
% Menghitung solusi masalah pemrograman linear
% dengan Metode Simplex
% min Z=x1-3x2+2x3
% kendala :
% 3x1-x2+2x3 <=7
%-2x1+4x2 <=12
%-4x1+3x2+8x3<=10
% x1,x2,x3>=0
%% Inisialisasi
clear
clc
close
format short
% Parameter inputan
banyak_var=3; % banyak var x1 x2 x3
C =[-1 3 -2]; %koeffisien matriks kendala maksimum
kendala=[3 -1 2; -2 4 0; -4 3 8;]; %koeffisien masing-masing kendala
[banyak_barisKendala,banyak_kolomKendala] = size(kendala);
b =[7;12;10]; %ruas kanan kendala
s =eye(banyak_barisKendala); %buat matriks identitas dengan ukuran
baris dari kendala
A =[kendala s b]; %bentuk tabel simplex
[banyak_barisA,banyak_kolomA] = size(A);
%% Syntaks Utama
30
RUN=true;
while RUN
%%% Cek optimal solusi : Cari nilai minimum dari tabel tersebut
if any (ZjCj<0) %untuk memeriksa apakah ada nilai ZjCj yang negatif. Jika
negative maka bukan solusi optimal
fprintf(' BFS Ini Bukan Solusi Optimal \n')
fprintf('\n============= Hasil Iterasi Selanjutnya =============
\n')
if all(Kolom<=0)
error('LPP tidak terbatas. Semua elemen <=0 di kolom, %d',
kolom_kunci);
else
for i=1:banyak_barisKolom
if Kolom(i)>0 %syarat rasio dihitung bila elemen Kolom
positif
rasio(i)=sol(i)./Kolom(i); %menentukan rasio dari solusi
else
rasio(i)=inf;
end
end
31
% Prosedur OBE
for i=1:banyak_barisA
if i~=baris_kunci
A(i,:) = A(i,:)- A(i,kolom_kunci).* A(baris_kunci,:);
end
end
Current_BFS.Properties.VariableNames(1:size(Current_BFS,2))={'x_1','x_2',
'x_3','s_1','s_2','s_3','Solusi'} %memberi label pada tabel
else
RUN=false;
fprintf(' ======== ************** ======== \n')
fprintf(' BFS TERBARU SUDAH OPTIMAL \n')
fprintf(' ======== ************** ======== \n')
end
end
32
DAFTAR PUSTAKA
Barnett, Raymond A. and Michael R. Ziegler. 1995. Applied. Calculus with Linear
Programming for Business, Economics, Life Sciences and Social Sciences. Prentice
Hall, Inc. New Jersey
Gross, S. Linear Programming Method and Application. McGraw Hill
Hillier, Frederick S. and Gerald J. Lieberman. 1995. Introductions to Operations
Research. 6thEd. McGraw-Hill, Inc Simmons. 1979. Linear Programming for
Operations Research. Holden Day
Universitas Udayana. 2016. Sejarah Universitas Udayana (Serial Online) [cited 2022
September 13]. Available from: https://www.unud.ac.id/in/tentang-unud17-Sejarah-
Universitas-Udayana.html
33