Representasi visual dari sebuah program linear sederhana dengan dua variabel dan enam pertidaksamaan. Himpunan solusi feasibel digambarkan oleh poligon (politop dalam dimensi-2) dengan isi berwarna kuning. Fungsi objektif linear ditandai oleh garis merah dan anak panah: Garis merah menandakan nilai dari fungsi objektif, sedangkan anak panah menandakan arah optimisasi yang diinginkan.
Pada masalah optimisasi dengan tiga variabel, daerah feasibel yang tertutup akan membentuk sebuah polihedron konveks. Program linear bertujuan untuk mencari titik di polihedron yang menghasilkan nilai fungsi objektif tertinggi (atau terendah).
**Program linear** atau **pemrograman linear** adalah metode untuk memperoleh hasil optimal dari suatu model matematika yang disusun dari hubungan linear. Program linear adalah kasus khusus dalam pemrograman matematika (juga dikenal dengan optimisasi matematika).

Secara lebih formal, program linear adalah sebuah teknik optimisasi untuk fungsi objektif linear, dengan kendala (beberapa) persamaan linear dan pertidaksamaan linear. Daerah feasibel dari kendala berupa sebuah politop konveks, yakni sebuah himpunan yang didefinisikan dari perpotongan banyak (namun terhingga) *half spaces*. Sedangkan fungsi objektif berupa fungsi (linear) bernilai real yang terdefinisi pada politop tersebut. Sebuah algoritme program linear akan mencari sebuah titik pada politop, yang menyebabkan fungsi objektif akan menghasilkan nilai terkecil (atau terbesar); jika titik tersebut ada.

Program linear adalah masalah yang dapat dinyatakan dalam bentuk kanonik (baku) sebagai

{\displaystyle {\begin{aligned}&{\text{Cari sebuah vektor}}&&\mathbf {x} \\&{\text{yang memaksimumkan}}&&\mathbf {c} ^{T}\mathbf {x} \\&{\text{dengan kendala}}&&A\mathbf {x} \leq \mathbf {b} \\&{\text{dan}}&&\mathbf {x} \geq \mathbf {0} .\end{aligned}}}

Disini, komponen-komponen dari {\displaystyle \mathbf {x} } adalah variabel yang ingin ditentukan nilainya. Vektor {\displaystyle \mathbf {c} } adalah vektor koefisien fungsi objektif, sedangkan {\displaystyle \mathbf {b} } adalah vektor nilai kunci. Fungsi objektif adalah fungsi yang nilainya ingin dimaksimumkan atau diminimumkan, dalam kasus ini berupa fungsi {\displaystyle \mathbf {x} \mapsto \mathbf {c} ^{T}\mathbf {x} }. Matriks {\displaystyle \mathbf {A} } berisi koefisien-koefisien dari persamaan (dan pertidaksamaan) kendala-kendala. Pertidaksamaan {\displaystyle \mathbf {A} \mathbf {x} \leq \mathbf {b} } dan {\displaystyle \mathbf {x} \geq \mathbf {0} } menyatakan daerah pencarian titik untuk mengoptimisasi fungsi objektif. Dalam konteks ini, dua vektor dapat dibandingkan jika keduanya memiliki dimensi yang sama. Vektor {\displaystyle \mathbf {x} } dikatakan lebih kecil atau sama dengan vektor {\displaystyle \mathbf {y} }, jika semua nilai komponen vektor {\displaystyle \mathbf {x} } lebih kecil atau sama dengan nilai komponen {\displaystyle \mathbf {y} } yang bersesuaian.

Program linear dapat diterapkan dalam berbagai bidang studi. metode ini digunakan secara luas di bidang matematika dan secara khusus di bidang bisnis, ekonomi, dan teknologi. Banyak bidang industri juga menerapkan program linear, seperti transportasi, pengelolaan energi, telekomunikasi, dan manufaktur. Program ini terbukti berguna dalam memecahkan masalah perencanaan, penjadwalan, dan desain.

Sejarah
-------

Leonid Kantorovich
John von Neumann
Masalah menyelesaikan sebuah sistem pertidaksamaan linear dapat dilacak ke Fourier, yang pada tahun 1827 menerbitkan sebuah metode untuk menemukan solusinya. Metode ini selanjutnya diberi nama eliminasi Fourier-Motzkin.

Pada tahun 1939, seorang matematikawan dan ekonom Uni Soviet, Leonid Kantorovich, membuat formulasi program linear dari masalah yang serupa dengan formulasi masalah program saat ini. Ia juga mengusulkan sebuah metode untuk menyelesaikannya. Formulasi ini ia kembangkan pada masa Perang Dunia II, untuk merencanakan pengeluaran dan pendapatan agar mengurangi rugi bagi tentara dan meningkatkan kerugian bagi musuh.[*butuh rujukan*]
 Karya Kantorovich awalnya dihiraukan oleh USSR. Pada saat yang sama dengan Kantorovich, ekonom Amerika-Belanda T. C. Koopmans memformulasikan masa ekonomi klasik dalam bentuk program linear. Kantorovich dan Koopmans nantinya mendapatkan penghargaan Nobel bidang ekonomi tahun 1975. Pada tahun 1941, Frank Lauren Hitchcock juga memformulasikan masalah transportasi dalam bentuk program linear, dan memberikan solusi yang sangat mirip dengan metode simpleks. Hitchcock meninggal pada tahun 1957 dan penghargaan Nobel tidak diberikan secara anumerta.

Sepanjang tahun 1946–1947, George B. Dantzig secara independen mengembangkan formulasi program linear yang umum agar dapat digunakan dalam masalah perencanaan di Angkata Udara Amerika Serikat. Di tahun 1947, juga menemukan metode simpleks yang untuk pertama kalinya menyelesaikan banyak masalah program linear secara efisien. Ketika Dantzig melakukan pertemuan dengan John von Neumann untuk mendiskusikan metode simpleksnya, Neumann langsung memberikan konjektur tentang teori tentang dualitas; dari realisasinya bahwa ini ekuivalen dengan masalah yang ia kerjakan di bidang teori permainan. Dantzig memberikan bukti formal pada sebuah laporan yang tidak dipublikasikan, "*A Theorem on Linear Inequalities*" pada 5 Januari 1948. Karya Dantzig dipublikasikan ke publik pada tahun 1951. Dalam masa setelah perang, banyak industri yang menerapkan metodenya dalam masalah perencanaan harian mereka.

Contoh masalah yang diberikan Dantzig adalah menemukan penugasan 70 orang ke 70 pekerjaan. Daya komputasi untuk mengecek semua permutasi kemungkinan penugasan sangat besar, melebihi banyaknya partikel yang ada di alam semesta yang teramati. Namun, butuh waktu yang singkat untuk menemukan solusi ketika masalah disusun sebagai program linear dan menerapkan algoritme simpleks. Teori yang mendasari program linear secara drastis mengurangi banyaknya kemungkinan solusi yang perlu dicek.

Masalah program linear dibuktikan dapat diselesaikan dalam waktu polinomial oleh Leonid Khachiyan pada tahun 1979. Namun baru pada tahun 1984 terobosan besar di bidang teori dan praktek terjadi, ketika Narendra Karmarkar memperkenalkan metode *interior-point* untuk menyelesaikan masalah program linear.

Bentuk baku
-----------

*Bentuk baku* atau *bentuk standar* dari program linear adalah bentuk yang umum dan paling yang mudah dipahami untuk menjelaskan permasalahan program linear. Bentuk ini terdiri dari tiga bagian:

* Sebuah fungsi tujuan yang ingin dimaksimumkan, sebagai contoh {\displaystyle f(x\_{1},x\_{2},\dots ,x\_{n})=c\_{1}x\_{1}+c\_{2}x\_{2}+\dots +c\_{n}x\_{n}}
* Batasan atau kendala dari permasalahan, dinyatakan dalam bentuk



a

11

x

1

+

a

12

x

2

+
⋯
+

a

1
n

x

n


≤

b

1


a

21

x

1

+

a

22

x

2

+
⋯
+

a

1
n

x

n


≤

b

2



⋮


a

m
1

x

1

+

a

m
2

x

2

+
⋯
+

a

m
n

x

n


≤

b

m



{\displaystyle {\begin{aligned}a\_{11}x\_{1}+a\_{12}x\_{2}+\dots +a\_{1n}x\_{n}&\leq b\_{1}\\a\_{21}x\_{1}+a\_{22}x\_{2}+\dots +a\_{1n}x\_{n}&\leq b\_{2}\\\vdots \quad &\\a\_{m1}x\_{1}+a\_{m2}x\_{2}+\dots +a\_{mn}x\_{n}&\leq b\_{m}\end{aligned}}}

{\displaystyle {\begin{aligned}a_{11}x_{1}+a_{12}x_{2}+\dots +a_{1n}x_{n}&\leq b_{1}\\a_{21}x_{1}+a_{22}x_{2}+\dots +a_{1n}x_{n}&\leq b_{2}\\\vdots \quad &\\a_{m1}x_{1}+a_{m2}x_{2}+\dots +a_{mn}x_{n}&\leq b_{m}\end{aligned}}}

* dan variabel-variabel bernilai nonnegatif {\displaystyle x\_{1},x\_{2},\dots ,x\_{n}\geq 0}

Bentuk ini juga bisa ditulis dalam *bentuk matriks,* atau secara lebih ringkas sebagai{\textstyle {\text{max}}\;\{\mathbf {c} ^{T}\mathbf {x} \;|\;\mathbf {x} \in \mathbb {R} ^{n}\land \mathbf {Ax} \leq \mathbf {b} \land \mathbf {x} \geq 0\}}Formulasi lainnya, seperti masalah minimisasi, masalah dengan pertidaksamaan melibatkan operator {\displaystyle \geq }, juga masalah melibatkan variabel yang dapat bernilai negatif, selalu dapat disusun menjadi bentuk baku.

### Contoh

Misalkan seorang petani memiliki sepetak lahan, anggap {\displaystyle L} km2, dan ingin mendapatkan untung dengan menanam singkong dan jagung. Petani memiliki jumlah pupuk dan pestisida yang terbatas, masing-masing sebanyak {\displaystyle U} dan {\displaystyle E} kilogram. Satu km2 tanaman singkong memerlukan {\displaystyle U\_{1}} kg pupuk dan {\displaystyle E\_{1}} kg pestisida, sedangkan satu km2 tanaman jagung {\displaystyle U\_{2}} kg pupuk dan {\displaystyle E\_{2}} kg pestisida. Dengan sedikit perhitungan, petani tersebut menemukan harga jual singkong per km2 sebesar {\displaystyle J\_{1}} rupiah, sedangkan {\displaystyle J\_{2}}rupiah adalah harga jual jagung per km2. Anggap {\displaystyle x\_{1}} dan {\displaystyle x\_{2}} secara berurutan adalah luas lahan yang ditanami singkong dan jagung. Keuntungan yang maksimum dapat diperoleh petani dengan memilih nilai yang optimal bagi {\displaystyle x\_{1}} dan {\displaystyle x\_{2}}. Menyatakan permasalahan tersebut dalam bentuk baku, kita mendapatkan program linear:

|  |  |
| --- | --- |
| Maksimumkan: {\displaystyle J\_{1}\cdot x\_{1}+J\_{2}\cdot x\_{2}} | (Maksimumkan keuntungan, yakni total penjualan singkong ditambah total penjualan jagung–keuntungan di sini adalah "fungsi objektif") |
| Dengan kendala: | {\displaystyle x\_{1}+x\_{2}\leq L} | (Batasan total lahan yang dapat ditanami) |
|  | {\displaystyle U\_{1}\cdot x\_{1}+U\_{2}\cdot x\_{2}\leq U} | (Batasan banyak pupuk yang dimiliki) |
|  | {\displaystyle E\_{1}\cdot x\_{1}+E\_{2}\cdot x\_{2}\leq E} | (Batasan banyak pestisida yang dimiliki) |
|  | {\displaystyle x\_{1}\geq 0,x\_{2}\geq 0} | (Luas lahan yang ditanam tidak mungkin negatif). |

Masalah tersebut dapat disusun dalam bentuk matriks sebagai:

maksimumkan {\displaystyle {\begin{bmatrix}S\_{1}&S\_{2}\end{bmatrix}}{\begin{bmatrix}x\_{1}\\x\_{2}\end{bmatrix}}}
dengan kendala {\displaystyle {\begin{bmatrix}1&1\\F\_{1}&F\_{2}\\P\_{1}&P\_{2}\end{bmatrix}}{\begin{bmatrix}x\_{1}\\x\_{2}\end{bmatrix}}\leq {\begin{bmatrix}L\\F\\P\end{bmatrix}},\,{\begin{bmatrix}x\_{1}\\x\_{2}\end{bmatrix}}\geq {\begin{bmatrix}0\\0\end{bmatrix}}.}

Bentuk imbuhan
--------------

Program linear juga dapat dinyatakan dalam bentuk imbuhan (*augmented form, slacks form*) agar dapat diselesaikan dengan metode simpleks. Bentuk ini menggunakan variabel-variabel nonnegatif yang disebut lempai (*slack*) untuk mengubah bentuk-bentuk pertidaksamaan dalam kendala menjadi bentuk persamaan. Selanjutnya permasalahan dapat ditulis ulang dalam bentuk matriks sebagai:

Maksimumkan {\displaystyle z}
Dengan kendala{\displaystyle {\begin{bmatrix}1&-\mathbf {c} ^{T}&0\\0&\mathbf {A} &\mathbf {I} \end{bmatrix}}{\begin{bmatrix}z\\\mathbf {x} \\\mathbf {s} \end{bmatrix}}={\begin{bmatrix}0\\\mathbf {b} \end{bmatrix}}}
Disini, {\displaystyle \mathbf {s} } adalah vektor berisi variabel-variabel lempai ({\displaystyle \mathbf {s} \geq 0}), dan {\displaystyle \mathbf {x} } adalah vektor keputusan. Variabel {\displaystyle z} 'menyimpan' nilai dari fungsi objektif yang ingin dioptimalkan.

### Contoh

Menggunakan contoh permasalahan petani di atas, bentuk imbuhan ditulis sebagai

|  |  |
| --- | --- |
| Maksimumkan: {\displaystyle J\_{1}\cdot x\_{1}+J\_{2}\cdot x\_{2}} | (Fungsi objektif) |
| Dengan kendala: | {\displaystyle x\_{1}+x\_{2}+x\_{3}=L} | (Batasan dengan imbuhan) |
|  | {\displaystyle U\_{1}\cdot x\_{1}+U\_{2}\cdot x\_{2}+x\_{4}=U} | (Batasan dengan imbuhan) |
|  | {\displaystyle E\_{1}\cdot x\_{1}+E\_{2}\cdot x\_{2}+x\_{5}=E} | (Batasan dengan imbuhan) |
|  | {\displaystyle x\_{1},x\_{2},x\_{3},x\_{4},x\_{5}\geq 0} |

Dalam bentuk ini, {\displaystyle x\_{3},x\_{4},x\_{5}} merupakan variabel-variabel lempai, yang secara berurutan menyatakan luas lahan yang tidak digunakan, banyak pupuk yang tersisa, dan banyak pestisida yang tersisa (atau tidak digunakan). Dalam bentuk matriks formulasi tersebut dinyatakan sebagai:

maksimumkan {\displaystyle z}:
{\displaystyle {\begin{bmatrix}1&-S\_{1}&-S\_{2}&0&0&0\\0&1&1&1&0&0\\0&F\_{1}&F\_{2}&0&1&0\\0&P\_{1}&P\_{2}&0&0&1\\\end{bmatrix}}{\begin{bmatrix}z\\x\_{1}\\x\_{2}\\x\_{3}\\x\_{4}\\x\_{5}\end{bmatrix}}={\begin{bmatrix}0\\L\\F\\P\end{bmatrix}},\,{\begin{bmatrix}x\_{1}\\x\_{2}\\x\_{3}\\x\_{4}\\x\_{5}\end{bmatrix}}\geq 0.}

Contoh kasus sederhana
----------------------

Terdapat banyak cara untuk menyelesaikan program linear, antara lain metode grafik dan metode simpleks. Karena batasan visualisasi, metode grafik hanya dapat digunakan untuk menyelesaikan program linear dengan dua atau tiga variabel. Metode simpleks dapat digunakan tanpa memiliki batasan jumlah variabel[*butuh rujukan*]
, tetapi lebih rumit daripada metode grafik. Dalam bagian ini, akan dibahas cara penyelesaian masalah program linear dua variabel dengan menggunakan metode grafik. Berikut sebuah masalah memaksimumkan keuntungan:

> Seorang pemilik tanah mengubah lahan seluas 150 m2 yang dia miliki menjadi tempat parkir. Melihat keadaan ekonomi di daerahnya, ia menetapkan harga parkir untuk mobil sebesar Rp. 3000 dan harga parkir untuk motor sebesar Rp. 2000. Dari pengukuran didapatkan bahwa satu motor memerlukan 1 m2 petak tanah, sedangkan satu mobil memerlukan 3 m2. Malangnya, desain dari tempat parkir hanya memungkinkan untuk menampung maksimum 100 kendaraan. Setelah beberapa bulan, pemilik tanah memerlukan data keuntungan maksimum yang mungkin ia diperoleh, sebagai salah satu pertimbangannya untuk memperbaiki desain tempat parkir tersebut. 
> 
> 

Secara umum, terdapat beberapa tahapan dalam menyelesaikan sebuah program linear, yakni: menentukan variabel-variabel keputusan dari masalah, dan dilanjutkan dengan membuat fungsi objektif. Setelah itu setiap kendala/batasan perlu diformulasikan dalam bentuk persamaan atau pertidaksamaan. Tahap berikutnya adalah menentukan/mengecek daerah penyelesaian, karena sedikit banyak hal ini akan berpengaruh pada algoritma pencarian solusi yang perlu digunakan. Masalah program linear dianggap terselesaikan, ketika titik optimal sudah ditemukan (dan sudah dapat diartikan/dimaknai). Untuk permasalahan di atas, kita dapat menyusun program linear berikut:

* Mencari maksimum dari {\displaystyle f(x,y)=3.000x+2.000y} (keuntungan parkir dalam rupiah)
* dengan kendala:
	1. {\displaystyle x+y\leq 100} (batas jumlah kendaraan)
	2. {\displaystyle 3x+y\leq 150} (batas luas kendaraan dalam m2)
	3. {\displaystyle x\geq 0} (jumlah tidak boleh negatif)
	4. {\displaystyle y\geq 0} (jumlah tidak boleh negatif)

dengan {\displaystyle x} dan {\displaystyle y} masing-masing menyatakan banyak mobil dan motor yang terparkir.

Pada metode grafik, kita membentuk persamaan garis dari setiap kendala program linear. Hal ini dilakukan dengan mengubah setiap pertidaksamaan menjadi bentuk persamaan. Sebagai contoh, persamaan garis dari kendala {\displaystyle 3x+y\leq 150} adalah {\displaystyle 3x+y=150}. Selanjutnya, kita mencatat setiap titik yang terbentuk dari semua perpotongan dua persamaan garis yang mungkin. Tabel berikut berisi titik perpotongan dari persamaan garis pada kolom dengan persamaan garis pada baris.

|   | (1) | (2) | (3) | (4) |
| --- | --- | --- | --- | --- |
| (1) | - |  |  |  |
| (2) | (25, 75) | - |  |  |
| (3) | (0, 100) | (0, 150) | - |  |
| (4) | (100, 0) | (50, 0) | (0, 0) | - |
| Sel yang berwarna hijau memenuhi empat persamaan di atas. |

Titik-titik perpotongan yang memenuhi semua kendala (berwarna hijau pada tabel) adalah solusi feasibel (yang mungkin) dari permasalahan program linear. Langkah berikutnya yang perlu dilakukan adalah menghitung fungsi objektif {\displaystyle f(x,y)=3.000x+2.000y} pada keempat titik tersebut.

| Titik | Nilai (Rp) |
| --- | --- |
| (0, 0) | 0 |
| (50, 0) | 150.000 |
| (0, 100) | 200.000 |
| (25, 75) | 225.000 |

Dari tabel di atas, terlihat bahwa keuntungan maksimum yang dapat diperoleh adalah Rp 225.000. Hal ini tercapai ketika tempat parkir terisi dengan 25 mobil dan 75 motor.

Dualitas
--------

Setiap masalah program linear, yang juga dikenal dengan masalah *primal*, dapat diubah menjadi sebuah masalah *dual*. Masalah dual juga merupakan sebuah program linear, dan solusi masalah ini memberikan sebuah batas atas untuk nilai optimal dari masalah primal. Untuk mendapatkan dual dari masalah primal, ada cara sistematis yang perlu dilakukan:

* Setiap variabel pada program linear primal akan menjadi kendala di program linear dual.
* Setiap konstrain pada program linear primal akan menjadi konstrain di program linear dual.
* Arah fungsi objektif akan berbalik—masalah memaksimumkan di primal akan menjadi masalah meminimumkan di dual, dan sebaliknya.

Dalam bentuk matriks, hubungan masalah primal dengan masalah dual dapat ditunjukkan dengan:

* Maksimumkan {\displaystyle \mathbf {c} ^{\text{T}}\mathbf {x} } dengan kendala {\displaystyle \mathbf {A} \mathbf {x} \leq \mathbf {b} } dan {\displaystyle \mathbf {x} \geq \mathbf {0} }; akan memiliki masalah dual *simetrik* Minimimumkan {\displaystyle \mathbf {b} ^{\text{T}}\mathbf {y} } dengan kendala {\displaystyle \mathbf {A} ^{\text{T}}\mathbf {y} \geq \mathbf {c} } dan {\displaystyle \mathbf {y} \geq \mathbf {0} }.
* Maksimumkan {\displaystyle \mathbf {c} ^{\text{T}}\mathbf {x} } dengan kendala {\displaystyle \mathbf {A} \mathbf {x} \leq \mathbf {b} }; akan memiliki masalah dual *asimetrik* Minimumkan {\displaystyle \mathbf {b} ^{\text{T}}\mathbf {y} } dengan kendala {\displaystyle \mathbf {A} ^{\text{T}}\mathbf {y} =\mathbf {c} } dan {\displaystyle \mathbf {y} \geq \mathbf {0} }.

Ada dua ide mendasar pada teori dualitas. Ide pertama adalah fakta bahwa (untuk kasus dual simetrik) dual dari masalah dual suatu program linear, adalah masalah primal asal dari program linear tersebut. Selain itu, setiap solusi feasibel dari program linear akan memberikan batas untuk nilai optimal dari fungsi objektif masalah dualnya. Teorema dualitas lemah menyatakan bahwa nilai fungsi objektif dari masalah dual pada setiap solusi feasibel, akan memberikan batas pada nilai fungsi objektif masalah primal pada setiap solusi feasibelnya. Jenis batas (batas atas atau batas bawah) yang terjadi bergantung pada jenis optimisasi yang dikerjakan (memaksimumkan atau meminimumkan). Teorema dualitas kuat menyatakan jika masalah primal memiliki sebuah solusi optimal {\displaystyle \mathbf {x} ^{\*}}, maka masalah dual juga memiliki sebuah solusi optimal {\displaystyle \mathbf {y} ^{\*}}, dan keduanya terikat oleh hubungan {\displaystyle \mathbf {c} ^{\text{T}}\mathbf {x} ^{\*}=\mathbf {b} ^{\text{T}}\mathbf {y} ^{\*}}.

Bentuk kendala dari program linear juga dapat tidak terbatas (*unbounded*) atau tidak feasibel (*infeasible*). Teorema dualitas lemah menunjukkan bahwa jika masalah primal tidak terbatas maka masalah dual yang terbentuk akan tidak feasibel. Dan sebaliknya, jika masalah dual tidak terbatas maka masalah primalnya akan tidak feasibel. Namun, ada kasus kedua jenis masalah (primal dan dual) adalah masalah yang tidak feasibel.

### Dualitas masalah pengepakan dan penutupan

Masalah pengepakan (*packing*) adalah kelas masalah optimisasi yang mencari cara menyusun (mengepak) objek-objek ke dalam sebuah kontainer. Sedangkan, masalah penutupan (*covering*) membahas apakah suatu kombinasi struktur "menutupi" sebuah objek, atau seberapa besar ukuran struktur yang diperlukan agar dapat melakukan hal tersebut. Masalah program linear terkait pengepakan dan penutupan sering muncul sebagai "relaksasi" dari sebuah masalah kombinatorial.

Masalah program linear penutupan memiliki bentuk:

Minimumkan: {\displaystyle \mathbf {b} ^{\text{T}}\mathbf {y} },
dengan kendala: {\displaystyle \mathbf {A} ^{\text{T}}\mathbf {y} \geq \mathbf {c} }, {\displaystyle \mathbf {y} \geq \mathbf {0} }
Dual dari masalah ini masalah program linear pengepakan, yang memiliki bentuk:

Maksimumkan: {\displaystyle \mathbf {c} ^{\text{T}}\mathbf {x} },
dengan kendala: {\displaystyle \mathbf {A} \mathbf {x} \leq \mathbf {b} }, {\displaystyle \mathbf {x} \geq \mathbf {0} }.
Dalam kedua jenis permasalahan ini, matriks {\displaystyle \mathbf {A} }, vektor {\displaystyle \mathbf {b} }, dan vektor {\displaystyle \mathbf {c} }, bernilai nonnegatif.

### Complementary slackness

Solusi optimal dari dual dapat didapatkan hanya dengan mengetahui solusi optimal dari masalah primal, dengan menggunakan teorema *complementary slackness*. Teorema ini menyatakan:

Misalkan {\displaystyle \mathbf {x} =(x\_{1},x\_{2},\dots ,x\_{n})} adalah solusi feasibel di masalah primal, dan {\displaystyle \mathbf {y} =(y\_{1},y\_{2},\dots ,y\_{m})} adalah solusi feasibel di masalah dual. Misalkan pula {\displaystyle \mathbf {w} =(w\_{1},w\_{2},\dots ,w\_{m})} adalah variabel lempai (*slack*) di masalah primal, dan {\displaystyle \mathbf {z} =(z\_{1},z\_{2},\dots ,z\_{n})} adalah variabel lempai di masalah dual. Vektor {\displaystyle \mathbf {x} } dan {\displaystyle \mathbf {y} } optimal di jenis masalah mereka masing masing, jika dan hanya jika:

* {\displaystyle x\_{j}z\_{j}=0} untuk {\displaystyle j=1,2,\dots ,n}, dan
* {\displaystyle w\_{i}y\_{i}=0} untuk {\displaystyle i=1,2,\dots ,m}.

Jadi, jika variabel lempai ke-*i* dari masalah primal tidak bernilai nol, maka variabel keputusan ke-*i* dari masalah dual akan bernilai nol; dan sebaliknya.

Referensi
---------

1. 1 2  Gerard Sierksma; Yori Zwols (2015). *Linear and Integer Optimization: Theory and Practice* (edisi ke-3rd). CRC Press. hlm. 1. ISBN 978-1498710169.
2. 1 2  Alexander Schrijver (1998). *Theory of Linear and Integer Programming*. John Wiley & Sons. hlm. 221–222. ISBN 978-0-471-98232-6.
3. 1 2  George B. Dantzig (April 1982). "Reminiscences about the origins of linear programming". *Operations Research Letters*. **1** (2): 43–48. doi:10.1016/0167-6377(82)90043-8. [*pranala nonaktif permanen*]
4. 1 2 3  Dantzig, George B.; Thapa, Mukund Narain (1997). *Linear programming*. New York: Springer. hlm. xxvii. ISBN 0387948333. OCLC 35318475.
5. ↑  Leonid Khachiyan (1979). "A Polynomial Algorithm for Linear Programming". *Doklady Akademii Nauk SSSR*. **224** (5): 1093–1096.
6. ↑  Narendra Karmarkar (1984). "A New Polynomial-Time Algorithm for Linear Programming". *Combinatorica*. **4** (4): 373–395. doi:10.1007/BF02579150.  Parameter `|s2cid=` yang tidak diketahui akan diabaikan (bantuan)
7. ↑  Gärtner, Bernd; Matoušek, Jiří (2006). *Understanding and Using Linear Programming*. Berlin: Springer. hlm. 81–104. ISBN 3540306978.  Parameter `|url-status=` yang tidak diketahui akan diabaikan (bantuan)
8. ↑  Vazirani, Vijay V. (2001). *Approximation Algorithms*. Springer-Verlag. hlm. 112. ISBN 9783540653677.  Parameter `|url-status=` yang tidak diketahui akan diabaikan (bantuan)

Bacaan lebih lanjut
-------------------

* Manullang, Sudianto; S. Andri Kristianto; Hutapea, Tri Andri; Sinaga, Lasker Pangarapan; Sinaga, Bornok; S. Mangaratua Marianus; Sinambela, Pardomuan N. J. M. (2017). *Matematika untuk SMA/MA/SMK/MAK Kelas XI*. Jakarta: Kementerian Pendidikan dan Kebudayaan. Diarsipkan dari versi asli tanggal 2020-03-09. Diakses tanggal 2020-03-06.
* Arifien, Febianto. "Pemrograman Linier". *Teknik Riset Operasional*.
* Kurnianingsih, Sri (2007). *Matematika SMA dan MA 3A Untuk Kelas XII Semester 1 Program IPA*. Jakarta: Esis/Erlangga. ISBN 979-734-504-1.  Parameter `|coauthors=` yang tidak diketahui mengabaikan (`|author=` yang disarankan) (bantuan) (Indonesia)
* Kurnianingsih, Sri (2007). *Matematika SMA dan MA 3A Untuk Kelas XII Semester 1 Program IPS*. Jakarta: Esis/Erlangga. ISBN 979-734-567-X.  Parameter `|coauthors=` yang tidak diketahui mengabaikan (`|author=` yang disarankan) (bantuan) (Indonesia)

Pranala luar
------------


Wikimedia Commons memiliki media mengenai ***Program linear***.

* (Inggris) Guidance On Formulating LP Problems
* (Inggris) Mathematical Programming Glossary
* (Inggris) The Linear Programming FAQ
* (Inggris) Benchmarks For Optimisation Software

| Pengawasan otoritas Sunting ini di Wikidata |
| --- |
| Umum | 
* Integrated Authority File (Jerman)

 |
| Perpustakaan nasional | 
* Prancis (data)
* Amerika Serikat
* Jepang
* Republik Ceko

 |
| Lain-lain | 
* Microsoft Academic

 |