Anda di halaman 1dari 33

PEMROGRAMAN LINEAR

IMPLEMENTASI MENGGUNAKAN BAHASA MATLAB

TIM PENYUSUN:
Putu Veri Swastika M.Si.
Ni Ketut Tari Tastrawati, S.Si.,M.Si.
Rani Sulvianuri, M.Si.

PROGRAM STUDI MATEMATIKA


FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS UDAYANA
2022

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:

1. Dr. Mariman Darto, SE., M. Si selaku Kepala Pusat Pengembangan


Kader ASN Lembaga Administrasi Negara yang telah menyelenggarakan kegiatan
pelatihan dasar CPNS;
2. Prof. Dr. Ir. I Nyoman Gde Antara, M.Eng. IPU., selaku Rektor Universitas
Udayana;
3. Dr. Firman Hadi Rivai, S.STP., MPA, selaku penguji yang telah bersedia memberikan
bimbingan dan arahan selama kegiatan Pelatihan Dasar CPNS ini berlangsung;
4. Dr. Drs. G. K. Gandhiadi, M.T selaku Wakil Dekan 1 Fakultas Matematika dan Ilmu
Pengetahuan Alama, Universitas Udayana yang juga sekaligus mentor yang telah
bersedia memberikan bimbingan dan arahan selama kegiatan Pelatihan Dasar CPNS ini
berlangsung;
5. Ns. Susi Yuliawati, M. Kep.,Sp.KMB selaku coach yang telah bersedia memberikan
bimbingan dan arahan selama kegiatan Pelatihan Dasar CPNS ini berlangsung;
6. Ni Ketut Tari Tastrawati, S.Si.,M.Si selaku dosen utama mata kuliah Pemrograman Linear
yang telah bersedia memberikan bimbingan dan arahan dalam penyusunan materi modul
ini;
7. Rani Sulvianuri, M.Si selaku mahasiswa Institut Teknologi Bandung yang merupakan
kolega penulis, berperan dalam menerjemahkan kode MATLAB dan
menyempurnakannya.
8. Rekan – rekan seperjuangan Kelompok 1, Angkatan XV Pelatihan Dasar
CPNS Kementerian Pendidikan, Kebudayaan, Riset dan Teknologi tahun
2022 yang telah banyak memberikan dorongan dan dukungan moril selama
pelatihan berlangsung;

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.

Badung, 13 Oktober 2022


Tim Penulis

3
LEMBAR PENGESAHAN PENGGUNAAN

Judul: Pemrograman Linear Implementasi Menggunakan Bahasa MATLAB

Laporan Penelitian ini dapat digunakan sebagai Prototype Modul yang hanya
digunakan dikalangan internal Prodi Matematika Fakultas Matematika dan Ilmu
Pengetahuan Alam Universitas Udayana

Tanggal 19 Oktober 2022

Mengetahui Tim Penyusun,


Dosen Pengampu Utama,

Ni Ketut Tari Tastrawati, S.Si.,M.Si. Putu Veri Swastika, M.Si.


NIP. 197405282002122002 NIP. 199611212022031009

Menyetujui
Koordinator Program Studi Matematika
FMIPA Universitas Udayana

I Gusti Ayu Made Srinadi, S.Si., M.Si.


NIP. 1971112131997022001

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

1. Pengenalan Area Kerja


Pada bagian ini ditampilkan area kerja pada perangkat lunak MATLAB yang masing-masing
diberikan penjelas dan kegunaannya. Gambar 1 menampilkan area kerja MATLAB lengkap
dengan keseluruhan area aktif yang sering digunakan saat kita melakukan koding.

Gambar 1. Tampilan area kerja MATLAB berserta keterangan dan kegunaanya.

Berikutnya undock editor sehingga tampilan editor muncul fullscreen pada layer. Secara
garis besar ada 3 struktur utama dalam coding; header, inisialisasi dan program utama

Gambar 2. Tampilan editor kerja pada MATLAB saat melakukan pemrograman.

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:

A. Penamaan Variabel bersifat Case Sensitive, artinya MATLAB akan membedakan


adanya huruf besar dan kecil dalam penamaan (mis. Ibr akan tidak sama dengan Lbr).
B. Panjang nama variabel tidak dapat melebihi 31 karakter.
C. Penamaan variabel harus selalu diawali dengan huruf, tidak boleh dengan bilangan
simbol dan lain-lain.

3. Cara Penulisan Variabel

MATLAB menggunakan variabel sebagai media bagi pemrogram untuk menempatkan


data input/output. Ada beberapa cara penulisan yang dapat anda gunakan sesuai jenis data
yang ingin diolah, yaitu:

A. Data Numerik Tunggal

B. Data Numerik Berdimensi Banyak / Array / Matriks

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

C. Data String/ Teks

4. Cara mengakses elemen

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:

Variabel (baris ke, kolom ke)

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.

Iterasi Terbatas (for ... end)

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)

Sintak iterasi ini digunakan untuk melakukan


% While
pengulangan proses tanpa diketahui jumlah
while syarat
pengulangannya. Iterasi jenis ini hanya berhenti
%isikan perintah disini
melakukan pengulangan ketika mencapai syarat
end
tertentu. Misalnya menghitung jumlah ember yang
dibutuhkan untuk menampung isi kolam. Cara penulisannya adalah sebagai berikut:

7. Conditional if-else

Kondisional adalah pengontrol yang berguna untuk mengalihkan program ke proses


tertentu. Biasanya digunakan untuk menyelesaikan program yang memiliki banyak proses
tetapi dalam satu kesempatan eksekusi hanya menjalankan satu atau lebih proses pilihan
berdasarkan syarat tertentu.

Kondisional Nilai Relatif ( if ... elseif ... else ...end)

Sintak kondisional ini dapat digunakan untuk syarat yang


berada dalam nilai interval tertentu maupun absolut, baik
numerik maupun string. Sehingga paling umum digunakan
oleh programmer penulisannya adalah sebagai berikut:

10
Kondisional Nilai Absolut (switch… case…otherwise… end)

Sintak kondisional ini hanya dapat digunakan untuk syarat dengan


nilai yang tidak berada dalam interval tertentu, bisa berupa
numeric maupun string. Sintak perintah switch-case adalah
sebagai berikut

Tugas Mandiri dan Tugas Kelompok

• 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.

1. Kondisi Optimalitas dan Kondisi Kelayakan


Variabel masuk dalam maksimasi (minimasi) adalah variabel nondasar dengan
koefisien yang paling negatif (positif) dalam persamaan z tujuan. Koefisien dengan nilai yang
sama dapat dipilih secara sembarang. Nilai optimum dicapai ketika semua koefisien nondasar
dalam persamaan z adalah nonnegatif (positif).

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.

Berikut disajikan langkah-langkah iterasi formal dari metode simpleks primal :

Langkah 0 : Dengan menggunakan bentuk standar (dengan sisi kanan semua nonnegatif)
tentukan pemecahan dasar awal yang layak

Konstruksikan bentuk standar dari masalah LP dengan ketentuan sebagai berikut:

a) ruas kanan dari batasan bernilai positif


b) Semua batasan harus berbentuk persamaan/kesamaan
c) Semua variabel keputusan harus ≥ 0

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.

Langkah tersebut diterjemahkan kedalam flowchart sebagai berikut:

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

max 𝑍 = 2𝑥1 − 3𝑥2 + 6𝑥3


Batasan:
𝑥1 − 3𝑥3 ≥ 4
2𝑥1 − 8𝑥2 + 3𝑥3 ≤ 4
𝑥1 + 𝑥2 ≥ −7
𝑥1 , 𝑥2 , 𝑥3 ≥ 0

Bentuk standard:

max 𝑍 = 2𝑥1 − 3𝑥2 + 6𝑥3


Batasan:
𝑥1 − 3𝑥3 − 𝑠1 = 4
2𝑥1 − 8𝑥2 + 3𝑥3 + 𝑠2 = 4
−𝑥1 − 𝑥2 + 𝑠3 = 7
𝑥1 , 𝑥2 , 𝑥3 , 𝑠1 , 𝑠2 , 𝑠3 ≥ 0
Dimana 𝑠1 surplus, 𝑠2 , 𝑠3 slack dan kendala ketiga telah dikalikan -1

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?

PENYELESAIAN DENGAN METODE SIMPLEKS PRIMAL

ITERASI 0 : Tabel Awal

𝑐𝑗 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

Berikutnya cek apakah iterasi tabel 0 adalah optimal atau tidak?

Karena masalah kita adalah maksimasi maka iterasi berhenti apabila 𝑧𝑗 − 𝑐𝑗 ≥ 0, ∀𝑗

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

Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 xE xI s1 s2 s3 s4 Pemecahan Min Rasio

𝑍 = 𝑧𝑗 − 𝑐𝑗 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 Baris Pivot


0 s3 0 -1 1 0 0 1 0 1 -karena minus

0 s4 0 0 1 0 0 0 1 2 -

Kolom Pivot

Kunci Pivot =2

Selanjutnya ganti s2 dengan xe sesuai dengan kolom pivot.

16
ITERASI 0: Tabel Awal

𝑐𝑗 3 2 0 0 0

Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 xE xI s1 s2 s3 s4 Pemecahan Rasio

𝑍 = 𝑧𝑗 − 𝑐𝑗 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

Target: bentuk matriks Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 xE xI s1 s2 s3 s4 Pemecahan Rasio

identitas di kolom pivot.


𝑍 = 𝑧𝑗 − 𝑐𝑗 1 0 -1/2 0 3/2 0 0 12
Gunakan OBE untuk
kolom lain
s1 0 0 3/2 1 -1/2 0 0 2 4/3

Bagi semua baris Xe Xe 0 1 1/2 0 1/2 0 0 4 8


dengan kunci pivot
s3 0 0 3/2 0 1/2 1 0 5 10/3

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

Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 xE xI s1 s2 s3 s4 Pemecahan Rasio

𝑍 = 𝑧𝑗 − 𝑐𝑗 1 0 - 0 3/2 0 0 12
1/2

s1 0 0 3/2 1 -1/2 0 0 2 4/3

Xe 0 1 1/2 0 1/2 0 0 4 8

s3 0 0 3/2 0 1/2 1 0 5 10/3

s4 0 0 1 0 0 0 1 2 2

ITERASI Berikutnya

Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 xE xI s1 s2 s3 s4 Pemecahan Rasio

𝑍 = 𝑧𝑗 − 𝑐𝑗 1 0 0 1/3 4/3 0 0 12 2/3

xl 0 0 1 2/3 -1/3 0 0 4/3

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

Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 xE xI s1 s2 s3 s4 Pemecahan Rasio

𝑍 = 𝑧𝑗 − 𝑐𝑗 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

Dasar 𝑍=𝑧𝑗 −𝑐𝑗 xE xI s1 s2 s3 s4 Pemecahan Rasio

𝑍 = 𝑧𝑗 − 𝑐𝑗 1 0 -1/2 0 3/2 0 0 12

s1 0 0 3/2 1 -1/2 0 0 2 4/3

Xe 0 1 1/2 0 1/2 0 0 4 8

s3 0 0 3/2 0 1/2 1 0 5 10/3

s4 0 0 1 0 0 0 1 2 2

ITERASI 2

Dasar 𝑍=𝑧𝑗 −𝑐𝑗 xE xI s1 s2 s3 s4 Pemecahan Rasio

𝑍 = 𝑧𝑗 − 𝑐𝑗 1 0 0 1/3 4/3 0 0 12 2/3

xl 0 0 1 2/3 -1/3 0 0 4/3

Xe 0 1 0 -1/3 2/3 0 0 10/3

s3 0 0 0 -1 1 1 0 3

s4 0 0 0 -2/3 1/3 0 1 2/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

min 𝑍 = 𝑥1 − 3𝑥2 + 2𝑥3


Batasan:
3𝑥1 − 𝑥2 + 2𝑥3 ≤ 7
−2𝑥1 + 4𝑥2 ≤ 12
−4𝑥1 + 3𝑥2 + 8𝑥3 ≤ 10
𝑥1 , 𝑥2 , 𝑥3 ≥ 0

Bentuk standard (setelah diubah menjadi maksimasi)

max 𝑍 = −𝑥1 + 3𝑥2 − 2𝑥3


Batasan:
3𝑥1 − 𝑥2 + 2𝑥3 + 𝑠1 = 7
−2𝑥1 + 4𝑥2 + 𝑠2 = 12
−4𝑥1 + 3𝑥2 + 8𝑥3 + 𝑠3 = 10
𝑥1 , 𝑥2 , 𝑥3 , 𝑠1 , 𝑠2 , 𝑠3 ≥ 0

Bila diterjemahkan dalam bentuk tabel

ITERASI 0: Tabel Awal


𝑐𝑗 -1 3 -2 0 0 0 0 Cost
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

Kolom pink tidak ditampilkan di MATLAB


Kendala s b
20 A= [Kendala s b]
1. Inisialisasi Awal
Pada bagian ini dijelaskan pengaturan awal untuk mengkonstruksi tabel iterasi 0 simpleks.
Berikutnya kita konstruksikan tabel iterasi 0 (awal) menggunakan MATLAB
% Parameter inputan
banyak_var=3; % banyak var x1 x2 x3
C =[-1 3 -2]; %koeffisien fungsi optimasi
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);

Bila ditampilkan matriks A akan muncul

Selanjutnya, kita konstruksikan kolom yang berisikan 𝑍 = 𝑧𝑗 − 𝑐𝑗 .

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

Bila ditampilkan matriks Cost akan muncul

ITERASI 0: Tabel Awal


Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 X1 X2 X3 s1 s2 s3 Pemecahan

𝑍 = 𝑧𝑗 − 𝑐𝑗 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 𝑍 = 𝑧𝑗 − 𝑐𝑗 .

Selanjutnya tampilkan 𝑇𝑎𝑏𝑒𝑙 𝐼𝑛𝑡𝑒𝑟𝑎𝑠𝑖 0 pada MATLAB


% untuk menampilkan tabel
zCj = [ZjCj;A];
[banyak_bariszCj,banyak_kolomzCj] = size(zCj);
% Ini adalah iterasi awal
SimpleksTable=array2table(zCj); %mengubah format array menjadi tabel
SimpleksTable.Properties.VariableNames(1:banyak_kolomzCj)={'x_1','x_2','x_3
','s_1','s_2','s_3','Solusi'} %memberi label pada tabel

Dengan output di command window

ITERASI 0: Tabel Awal

𝑐𝑗 -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')

PERINTAH PERHITUNGAN AKAN ADA DISINI

Iterasi Berhenti/ else


fprintf(' SOLUSI SUDAH OPTIMAL \n')
Sudah optimal

22
Berikut dibawah ini adalah contoh hasil iterasi table 0 yang belum optimal karena ada -3 di
lajur baris 𝑧𝑗 − 𝑐𝑗

min 𝑍𝐶 𝑍𝐶 = ZjCj(1: end − 1)

𝑍 = 𝑧𝑗 − 𝑐𝑗
𝑠1
𝑠2
𝑠3

Kolom Pivot ada di indeks 2

3. Variabel Masukan dan Variabel Keluaran


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.

Dalam MATLAB dapat dituliskan sebagai berikut

ZC=ZjCj(1:end-1); % menyimpan nilai zj-cj (kecuali solusi)pada variabel


zc
[min_ZjCj, kolom_kunci]=min(ZC); %mencari nilai minimum Zj-Cj dan indeks
kolom dimana nilai minimum berada

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

fprintf('Variabel Masuk (Entering Variable) adalah %d \n', kolom_kunci) %


menampilkan variable masuk

Dengan output di command window

23
• Aturan mencari variable keluaran:
o Tentukan rasio dari kolom penyelesaian dengan pivot kolom (hanya kolom
pivot yang bernilai positif)

𝐴(: , 𝑒𝑛𝑑)

Kolom Pivot ada di indeks 2 A

Dalam MATLAB dapat dituliskan sebagai berikut


Sol =A(:,end); % Sol berisi semua baris dari kolom terakhir dari A
Kolom =A(:,kolom_kunci); %Kolom berisi kolom pivot
[banyak_barisKolom,banyak_kolomKolom]=size(Kolom);
PERINTAH CEK KEPOSITIFAN SEMUA ELEMEN PIVOT ADA DI SINI
PERINTAH CEK KEPOSITIFAN RASIO ADA DI SINI
rasio(i)=sol(i)./Kolom(i); %menentukan rasio dari solusi

Melakukan cek kepositifan dari rasio hanya pada kolom pivot yang bernilai positif

PERINTAH CEK KEPOSITIFAN RASIO


for i=1:banyak_barisKolom %cek kepositifan utk semua baris Kolom Pivot
if Kolom(i)>0 %rasio dihitung bila elemen Kolom positif
rasio(i)=sol(i)./Kolom(i); %menentukan rasio dari solusi
else
rasio(i)=inf;
end
end

o Pilih rasio minimum dan baris yang berkesesuiana disebut baris pivot

Menentukan rasio minimum dari kolom (hanya yang bernilai positif)


%%%% Mencari nilai dan posisi dari nilai minimum rasio
[min_rasio,baris_kunci]=min(rasio);
Menampilkan rasio minimum dan baris pivot
fprintf('Rasio minimum terletak di baris %d \n',baris_kunci);
fprintf('Variabel Keluar (Leaving Variable) adalah%d\n',BV(baris_kunci));

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

%%%% Mencari nilai dan posisi dari nilai minimum rasio


[min_rasio,baris_kunci]=min(rasio);
fprintf('Rasio minimum terletak di baris %d \n',baris_kunci);
fprintf('Variabel Keluar (Leaving Variable) adalah %d\n',BV(baris_kunci));
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.

Bila diterjemahkan dalam bentuk tabel

elemen_kunci=A(baris_kunci, kolom_kunci);

ITERASI 0: Tabel Awal


𝑐𝑗 -1 3 -2 0 0 0 0

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

BV(baris_kunci) x2 0 -1/2 1 0 0 1/4 0 3


= kolom_kunci;
s3 0

A(baris_kunci,:)= A(baris_kunci,:)./elemen_kunci;

Dalam MATLAB dituliskan sebagai berikut


BV(baris_kunci)= kolom_kunci;
disp('Basic Variables (BV) Baru=');
disp(BV); %menampilkan nilai BV (variabel basis)

%% ELEMEN KUNCI %mereplace BV dengan kolom kunci


elemen_kunci=A(baris_kunci, kolom_kunci); %mendefinisikan elemen kunci
sebagai nilai dari elemen A yang berada pada baris dan kolom kunci

%%% UPDATE TABEL UNTUK ITERASI SELANJUTNYA


A(baris_kunci,:)= A(baris_kunci,:)./elemen_kunci;

26
Prosedur OBE

ITERASI 0: Tabel Awal


𝑐𝑗 -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

ITERASI 1

Dasar 𝑍 = 𝑧𝑗 − 𝑐𝑗 X1 X2 X3 s1 s2 s3 Pemecahan

𝑍 = 𝑍 − (−3)𝑠2 𝑍 = 𝑧𝑗 − 𝑐𝑗 1 -1/2 0 2 0 3/4 0 4

𝑠1 = 𝑠1 − (−1)𝑠2 s1 0 5/2 0 2 1 1/4 0 10


banyak_barisA
baris_kunci x2 0 -1/2 1 0 0 1/4 0 3

𝑠3 = 𝑠3 − (3)𝑠2 s3 0 -5/2 0 8 0 -3/4 1 1

Dalam MATLAB dituliskan sebagai berikut


% Prosedur OBE
for i=1:banyak_barisA
if i~=baris_kunci
A(i,:) = A(i,:)- A(i,kolom_kunci).* A(baris_kunci,:);
end
end
%update nilai Zj-Cj (Ini juga sama2 OBE)
ZjCj=ZjCj-ZjCj(kolom_kunci).*A(baris_kunci,:);

Menampilkan tabel iterasi terbaru sama seperti yang dulu


%%% untuk menampilkan tabel
zCj= [ZjCj;A];

%%% mengubah array zCj menjadi format tabel


SimpleksTable=array2table(zCj); %konversi array ke format tabel

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

PROSEDUR 1-4 TARUH DISINI

RUN=false;
end

28
Secara keseluruhan tabel iterasi pada kasus ini dapat dilihat sebagai berikut

ITERASI 0: Tabel Awal


𝑐𝑗 -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

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

𝑍 = 𝑧𝑗 − 𝑐𝑗 1 0 0 12/5 1/5 4/5 0 11

x1 0 1 0 4/5 2/5 1/10 0 4

x2 0 0 1 2/5 1/5 3/10 0 5

s3 0 0 0 10 1 -1/2 1 11

Karena 𝑍 = 𝑧𝑗 − 𝑐𝑗 ≥ 0, ∀𝑗 . Jadi solusi sekarang adalah Solusi Optimal

𝑥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

%diubah menjadi permasalahan maksimum


% max Z=-x1+3x2-2x3
% kendala :
% 3x1-x2+2x3 <=7
%-2x1+4x2 <=12
%-4x1+3x2+8x3<=10
% x1,x2,x3>=0

% Kode ini diadopsi dari Dr Haris Garg


% versi = 29 September 2022
% program sudah ok

%% 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);

Cost =zeros(1,banyak_kolomA); %buat matriks cost function cj


Cost (1:banyak_var)=C; %n=3 kolom pertama kita isi sebagai koefisien
matriks kendala C

%%%% Kendala BV (variabel basis)


BV=banyak_var+1:1:banyak_kolomA-1; %mendefinisikan indeks s
%%%% Menghitung zj-cj baris
ZjCj=Cost(BV)*A-Cost;

% untuk menampilkan tabel


zCj= [ZjCj;A];
[banyak_bariszCj,banyak_kolomzCj] = size(zCj);
% Ini adalah iterasi awal
SimpleksTable=array2table(zCj); %mengubah format array menjadi tabel
SimpleksTable.Properties.VariableNames(1:banyak_kolomzCj)={'x_1','x_2','x
_3','s_1','s_2','s_3','Solusi'} %memberi label pada tabel

%% 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')

disp('Basic Variable (BV) Lama');


disp(BV); %menampilkan nilai BV (variabel basis)
%% 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

%%%% Mencari nilai dan posisi dari nilai minimum rasio


[min_rasio,baris_kunci]=min(rasio);
fprintf('Rasio minimum terletak di baris %d \n',baris_kunci);
fprintf('Variabel Keluar (Leaving Variable) adalah
%d\n',BV(baris_kunci));
end
%%
BV(baris_kunci)= kolom_kunci;
disp('Basic Variables (BV) Baru=');
disp(BV); %menampilkan nilai BV (variabel basis)

%% ELEMEN KUNCI %mereplace BV dengan kolom kunci


elemen_kunci=A(baris_kunci, kolom_kunci); %mendefinisikan elemen
kunci sebagai nilai dari elemen A yang berada pada baris dan kolom kunci

%%% UPDATE TABEL UNTUK ITERASI SELANJUTNYA


A(baris_kunci,:)= A(baris_kunci,:)./elemen_kunci;
[banyak_barisA,banyak_kolomA] = size(A);

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

%update nilai Zj-Cj (Ini juga sama2 OBE)


ZjCj=ZjCj-ZjCj(kolom_kunci).*A(baris_kunci,:);

% untuk menampilkan tabel


zCj = [ZjCj;A];
[banyak_bariszCj,banyak_kolomzCj] = size(zCj);
% Ini adalah iterasi awal
SimpleksTable=array2table(zCj); %mengubah format array menjadi tabel
SimpleksTable.Properties.VariableNames(1:banyak_kolomzCj)={'x_1','x_2','x
_3','s_1','s_2','s_3','Solusi'} %memberi label pada tabel

%%%% 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
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

Anda mungkin juga menyukai