Metode simpleks: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
Konten dalam edit ini adalah alih bahasa dari artikel Wikipedia Bahasa Inggris en:Simplex_algorithm (oldid 1045092279); Lihat sejarahnya untuk atribusi.
Sultan23081993 (bicara | kontrib)
Fitur saranan suntingan: 2 pranala ditambahkan.
 
(10 revisi perantara oleh 3 pengguna tidak ditampilkan)
Baris 1:
{{about|algoritma untuk pemrograman linear|optimisasi heuristik non-linear|Metode Nelder–Mead}}
[[File:Simplex-method-3-dimensions.png|thumb|Polihedron dari algoritma simpleks dalam tiga dimensi.]]
'''Metode simpleks''' (''simplex method'') adalah [[algoritme|algoritma]] yang populer digunakan untuk memecahkanmenyelesaikan masalah dalam [[program linear|pemrograman linear]].<ref name="Murty">{{cite book|last=Murty|first=Katta G.|url=http://www.computer.org/csdl/mags/cs/2000/01/c1022.html|title=Linear programming|publisher=John Wiley & Sons Inc.1, 2000|author-link=Katta G. Murty|archive-url=https://web.archive.org/web/20190214122234/https://www.computer.org/csdl/mags/cs/2000/01/c1022.html|archive-date=2019-02-14}}</ref>

Nama dari algoritma ini berasal dari katakonsep [[simpleks]], perumuman dari konsep segitiga atau tetrahedron pada sebarang dimensi; dan diusulkan oleh [[Theodore Motzkin|T. S. Motzkin]].<ref name="Murty22">{{harvtxt|Murty|1983|loc=Comment 2.2}}</ref> Simpleks sebenarnya tidak digunakan, namun salah satu intepretasi menjelaskan bahwa algoritma ini berkerja pada sinar [[kerucut]] (kerucut sederhana, ''simplicial cones''); yang akansama menjadidengan simpleks denganketika menambah sebuah konstrain tambahan.<ref name="Murty39">{{harvtxt|Murty|1983|loc=Note 3.9}}</ref><ref name="StoneTovey">{{cite journal|last1=Stone|first1=Richard E.|last2=Tovey|first2=Craig A.|year=1991|title=The simplex and projective scaling algorithms as iteratively reweighted least squares methods|journal=SIAM Review|volume=33|issue=2|pages=220–237|doi=10.1137/1033049|jstor=2031142|mr=1124362}}</ref><ref>{{cite journal|last1=Stone|first1=Richard E.|last2=Tovey|first2=Craig A.|year=1991|title=Erratum: The simplex and projective scaling algorithms as iteratively reweighted least squares methods|journal=SIAM Review|volume=33|issue=3|pages=461|doi=10.1137/1033100|jstor=2031443|mr=1124362}}</ref><ref name="Strang">{{cite journal|last=Strang|first=Gilbert|author-link=Gilbert Strang|date=1 June 1987|title=Karmarkar's algorithm and its place in applied mathematics|journal=[[The Mathematical Intelligencer]]|volume=9|issue=2|pages=4–10|doi=10.1007/BF03025891|issn=0343-6993|mr=883185|s2cid=123541868}}</ref> Sinar kerucut yang dimaksud adalah rusuk-rusuk dari bangun geometris yang dikenal dengan [[politop]]. Bentuk dari politop ini didefinisikan lewat kendala-kendala yang perlu dipenuhi oleh fungsi objektif.
 
== Sejarah ==
Pada masa Perang Dunia II [[George Dantzig]] bekerja untukdi AU [[Amerika Serikat]] diuntuk bagianmengurus metode penjadwalan. Selama tahun 1946, rekan kerjanya menantang dia untuk menstandarkan (''mechanize'') proses penjadwalan, untuk mengalihkan perhatiannya dari mengambil pekerjaan-pekerjaan lain. Terinspirasi dari karya [[Wassily Leontief]], Dantzig memformulasi masalah sebagai sistem pertidaksamaan linear. Namun pada saat itu ia tidak mengikutkan objektif sebagai bagian dalam formulasi. Tanpa sebuah objektif, ada banyak solusi yang mungkin; sehingga untuk mencari solusi yang "optimal", aturan-aturan militer perlu digunakan untuk menjelaskan objektif yang diinginkan. Pencerahan yang didapatkan Dantzig adalah banyak dari aturan-aturan militer tersebut dapat disusun menjadi sebuah fungsi objektif linear yang perlu dimaksimumkan.<ref>{{Cite journal|last1url =Dantzig|first1=George Bhttps://apps.dtic.mil/sti/pdfs/ADA112060.pdf|date=Aprilarchive-url 1982|title=Reminiscences about the origins of linear programming|url=https://web.archive.org/web/20150520183722/http://www.dtic.mil/cgi-bin/GetTRDoc?Location=U2&doc=GetTRDoc.pdf&AD=ADA112060|journalurl-status =Operations Researchlive|archive-date Letters= May 20, 2015|volumetitle =1 Reminiscences about the origins of linear programming|issuedate =2 April 1982|pagesjournal =43–48 Operations Research Letters|doi = 10.1016/0167-6377(82)90043-8|volume = 1|issue = 2 |pages=43–48|last1 = Dantzig|first1 = George B.}}</ref> Perkembangan metode simpleks adalah sebuah inovasi dan terjadi hanya dalam kurun waktu sekitar satu tahun.<ref>{{Cite journal|last=Albers and Reid|date=1986|title=An Interview with George B. Dantzig: The Father of Linear Programming|url=http://www.phpsimplex.com/en/Dantzig_interview.htm|journal=College Mathematics Journal|volume=17|issue=4|pages=292–314|doi=10.1080/07468342.1986.11972971|archive-url=https://web.archive.org/web/20230306002727/http://www.phpsimplex.com/en/Dantzig_interview.htm|archive-date=2023-03-06}}</ref>
 
Setelah Dantzig mengikutsertakan fungsi objektif dalam formulasinya pada sekitar tahun 1947, permasalahan menjadi lebih mudah secara matematis. Dantzig menyadari satu dari pertanyaan belum terpecahkan yang tidak sengaja dia selesaikan, karena [[George Dantzig|ia pikir itu adalah pekerjaan rumah]] dari profesornya [[Jerzy Neyman]], dapat digunakan untuk menemukan algoritma bagi program linear. Pertanyaan itu melibatkan proses mencari eksistensi [[Pengali Lagrange|pengali Langrange]] untuk program linear secara umum. Program linear ini dapat terdiri dari banyak variabel, masing-masing terbatas (''bounded'') diantara nol dan satu, dan memenuhi kendala linear yang dinyatakan dalam bentuk [[integral Lebesgue]]. Dantzig kemudian mempublikasikan "pekerjaan rumah"-nya sebagai [[tesis]] untuk mendapatkan gelar doktor. Geometri yang digunakan dalam tesis ini memberikan Dantzig wawasan bahwa metode simpleks dapat sangat efisien.<ref>{{Cite bookencyclopedia|lasturl =Dantzig|first=George|date=May 1987http://apps.dtic.mil/dtic/tr/fulltext/u2/a182708.pdf|archive-url = https://web.archive.org/web/20150529003047/http://www.dtic.mil/dtic/tr/fulltext/u2/a182708.pdf|journalurl-status = live|archive-date = May 29, 2015|title = Origins of the simplex method|last = Dantzig|first = George|date = May 1987|work = A History of Scientific Computing|isbn=978editor-0last=Nash|editor-201-50814-7|pagesfirst=141–151Stephen G.|chapterpublisher=OriginsAssociation offor theComputing simplexMachinery|pages method= 141–151|doi = 10.1145/87252.88081|isbn = 978-0-201-50814-7}}</ref>
 
== Gambaran umum ==
{{further|Program linear}}
[[Berkas:Simplex-description-en.svg|jmpl|240x240px|ASebuah [[systemsistem ofpertidaksamaan linear inequalities]]yang definesmendefinisikan asebuah [[polytopepolitop]] assebagai adaerah feasible regionfeasibel. TheAlgoritma simplexsimpleks algorithmbermula beginsdari atsebuah atitik startingekstrem, [[Vertexdan (geometry)|vertex]]berjalan andsepanjang movesrusuk alongpada thepolitop, edgessampai ofmencapai thetitik polytopedengan untilnilai itfungsi reachesobjektif the vertex of theyang optimal solution.]]
Algoritma simpleks bekerja pada program linear dalam bentuk kanonik (baku):
 
Baris 15 ⟶ 18:
: dengan kendala <math>A\mathbf{x} \leq \mathbf{b}</math> dan <math>\mathbf{x} \ge 0</math>
 
Dalam bentuk ini, vektor <math>\mathbf{c} = (c_1,\, \dots,\, c_n)</math> adalah koefisien dari fungsi objektif, <math>(\cdot)^\mathrm{T}</math> adalah operasi [[transpos]], dan <math> \mathbf{x} = (x_1,\, \dots,\, x_n)</math> adalah variabel-variabel dari masalah. Selain itu, <math>A</math> adalah matriks berukuran <math>p\times n</math> dan <math> \mathbf{b} = (b_1,\, \dots,\, b_p)</math>. Ada cara mudah untuk menyusun sebarang program linear menjadi bentuk bakunya, sehingga penggunaan bentuk ini tidak mengurangi keumuman dari pembahasan. Dalam konteks geometri, daerah feasibel nilai <math>\mathbf{x}</math> yang memenuhi kendala <math display="inline">A\mathbf{x} \le \mathbf{b}</math> danddan <math>\forall i, x_i \ge 0 </math> adalah sebuah [[Politop cembung|politop konveks]], yang mungkin tidak terbatas (''unbounded''). Sebuah titik ekstrem atau rusuk dari politop ini dikenal sebagai solusi feasibel sederhana (''basic feasible solution,'' BFS).
 
Dapat ditunjukkan untuk program linear dalam bentuk baku, jika fungsi objektif mempunyai nilai maksimum di daerah feasibel, maka nilai maksimum ini terletak di (setidaknya satu) titik ekstrem.<ref>{{harvtxt|Murty|1983|loc=Theorem 3.3}}</ref> Hal ini menyederhanakan program linear menjadi sebuah masalah komputasi yang mudah, karena hanya terdapat terhingga banyaknya titik ekstrem; walaupun jumlah titik ekstrem dapat terlalu banyak untuk dapat ditangani.<ref>{{harvtxt|Murty|1983|loc=Section 3.13|p=143}}</ref> Selain itu, juga dapat dibuktikan jika sebuah titik ekstrem tidak memberikan fungsi objektif nilai yang maksimum, maka ada rusuk dari titik tersebut yang "mengarahkan" fungsi objektif ke nilai yang lebih tinggi.<ref name="Murty137">{{harvtxt|Murty|1983|loc=Section 3.8|p=137}}</ref> Jika panjang rusuk terhingga, maka rusuk akan terhubung dengan sebuah titik ekstrem lain yang memiliki nilai fungsi objektif lebih tinggi; namun jika panjang rusuk tak hingga, nilai fungsi objektif akan tidak terbatas dan program linear tidak memiliki solusi. Algoritma simpleks menerapkan wawasan ini, dengan "berjalan" sepanjang rusuk-rusuk dari politop untuk mencapai titik ekstrem dengan nilai fungsi objektif paling besar; atau berhenti ketika mencapai rusuk dengan panjang tak terbatas. Algoritma selalu berakhir (''terminates'') karena ada terhingga banyaknya rusuk pada politop. Selain itu, karena kita menelurusi rusuk-rusuk dalam "arah yang sama" dengan fungsi objektif, kita berharap hanya sedikit rusuk yang perlu dikunjungi.<ref name="Murty137" />
 
Solusi dari program linear dikerjakan dalam dua tahap. Pada Tahap I, sebuah titik ekstrem ditentukan. Tergantung dari program yang dikerjakan, hal ini dapat dilakukan secara trivial, atau dengan menerapkan algoritma simpleks ke suatu modifikasi dari program semula. Tahap ini dapat menghasilkan sebuah solusi feasibel sederhana, atau tidak sama sekali (karena daerah feasibel kosong). Untuk kasus kedua, program linear dikatakan ''tidak feasibel''. Selanjutnya pada Tahap II, algoritma simpleks diterapkan pada solusi feasibel sederhana yang didapat pada Tahap I sebagai titik mulai pengerjaan. Hasil dari Tahap II adalah sebuah solusi feasibel yang optimal, atau sebuah rusuk dengan panjang terbatas (yang menyebabkan nilai fungsi tidak terbatas dari atas).<ref name="DantzigThapa12">{{Cite book|last=Dantzig|first=George Bernard|last2=Thapa|first2=Mukund N.|date=2003|title=Linear programming. 2: Theory and extensions|location=New York Heidelberg|publisher=Springer|isbn=978-0-387-98613-5}}</ref><ref name=":0">{{Cite book|last=D. Nering|first=Evar|last2=W. Tucker|first2=Albert|date=1993|title=Linear Programs and Related Problems|url=https://archive.org/details/linearprogramsre0000neri|publisher=Academic Press|url-status=live}}</ref><ref>{{Cite book|last=Vanderbei|first=Robert J.|date=2008|url=http://www.princeton.edu/~rvdb/LPbook/|title=Linear programming: foundations and extensions|location=New York, NY|publisher=Springer|isbn=978-0-387-74387-5|edition=3. ed|series=International series in operations research & management science|archive-url=https://web.archive.org/web/20060613031408/http://www.princeton.edu/~rvdb/LPbook/|archive-date=2006-06-13|url-status=live}}</ref>
== Bentuk baku ==
Sebuah program linear dapat diubah ke dalam bentuk baku dengan cara sebagai berikut:<ref>{{harvtxt|Murty|1983|loc=Section 2.2}}</ref> Pertama, untuk setiap variabel dengan nilai batas bawah yang berbeda dengan 0, sebuah variabel baru didefinisikan untuk merepresentasikan selisih antara variabel asal dan batas bawahnya. Variabel asal selanjutnya dapat dihilangkan dengan melakukan subtitusi. Sebagai contoh, misalkan ada kendala
<math display=block>x_1 \ge 5</math>
 
Sebuah variabel baru, <math>y_1</math>, didefinisikan sebagai
 
<math display=block> \begin{align} y_1 = x_1 - 5\\x_1 = y_1 + 5 \end{align}</math>
 
Persamaan kedua dapat digunakan untuk menghilangkan semua kemunculan <math>x_1</math> di program linear yang dikerjakan. Dengan cara ini, semua batas bawah dari kendala-kendala dapat diubah agar bernilai nonnegatif.
 
Kedua, untuk setiap kendala dalam bentuk pertidaksamaan yang tersisa, sebuah variabel baru yang disebut variabel lempai (''slack''), didefinisikan untuk mengubah pertidaksamaan tersebut menjadi sebuah persamaan. Variabel ini merepresentasikan perbedaan antara kedua sisi pertidaksamaan, dan diasumsikan bernilai nonnegatif. Sebagai contoh, dua pertidaksamaan berikut
 
<math display=block> \begin{align}
x_2 + 2x_3 &\le 3\\
-x_4 + 3x_5 &\ge 2
\end{align}</math>
 
akan diubah bentuknya menjadi
 
<math display=block> \begin{align}
x_2 + 2x_3 + s_1 &= 3\\
-x_4 + 3x_5 - s_2 &= 2\\
s_1,\, s_2 &\ge 0
\end{align}</math>
 
Jauh lebih mudah melakukan manipulasi aljabar pada pertidaksamaan yang disusun dalam bentuk ini. Untuk pertidaksamaan yang melibatkan operator ≥, beberapa penulis merujuk variabel lempai sebagai ''variabel surplus''.
 
Ketiga, semua variabel yang tidak terbatas nilainya dihapus dari program linear. Hal ini dapat dilakukan dengan dua cara. Cara pertama dilakukan dengan menuliskan variabel tersebut sebagai sebuah persamaan berisi variabel-variabel lain, lalu menghilangkan semua kemunculannya di program linear dengan subtitusi. Cara lain adalah dengan menyatakan variabel tersebut sebagai selisih dua variabel yang terbatas nilainya. Sebagai contoh jika nilai <math>z_1</math> tidak dibatasi, nilainya dapat ditulis sebagai
 
<math display=block>\begin{align}
&z_1 = z_1^+ - z_1^-\\
&z_1^+,\, z_1^- \ge 0
\end{align}</math>
 
Persamaan ini selanjutnya digunakan untuk mengeliminasi <math>z_1</math> dari program linear.
 
Setelah proses-proses tersebut dilakukan, daerah feasibel akan memiliki bentuk
 
<math display=block>\mathbf{A}\mathbf{x} = \mathbf{b},\, \forall \ x_i \ge 0</math>
 
Dalam pembahasan, umumnya berguna untuk mengasumsikan bahwa [[Rank (aljabar linear)|rank]] dari <math>\mathbf{A}</math> sama dengan banyak baris dari matriks tersebut. Hal ini tidak mengurangi keumuman, karena antara sistem <math>\mathbf{A}\mathbf{x} = \mathbf{b}</math> mengandung persamaan yang redundan (sehingga dapat dihapus), atau sistem tersebut tidak konsisten (sehingga tidak memiliki solusi).<ref>{{harvtxt|Murty|1983|p=173}}</ref>
 
== Tablo simpleks ==
Sebuah program linear dalam bentuk baku dapat representasikan sebagai sebuah tablo (''tableau'') berikut
 
<math display=block>
\begin{bmatrix}
1 & -\mathbf{c}^T & 0 \\
0 & \mathbf{A} & \mathbf{b}
\end{bmatrix}
</math>
 
Baris pertama matriks di atas mendefinisikan fungsi objektif, sedangkan sisanya mendefinisikan kendala-kendala dari program. Nol pada kolom pertama merepresentasikan [[vektor nol]] dengan dimensi yang sama dengan vektor <math>\mathbf{b}</math> (beberapa penulis menggunakan konvensi tablo yang berbeda). Jika kolom dari matriks <math>\mathbf{A}</math> diatur agar mengandung [[matriks identitas]] berukuran <math>p</math> (yakni banyaknya baris di <math>\mathbf{A}</math>) maka tablo dikatakan dalam ''bentuk kanonik''.<ref>{{harvtxt|Murty|1983|loc=section 2.3.2}}</ref> Variabel-variabel yang bersesuaian dengan kolom-kolom dari matriks identitas disebut dengan ''variabel sederhana'' (''basic variables''), sedangkan variabel yang tersisa disebut ''variabel bebas'' (''free variables,'' atau ''nonbasic'').
 
Jika nilai dari variabel bebas ditetapkan sama dengan 0, maka nilai dari variabel sederhana dapat dengan mudah ditentukan sebagai entri dari <math>\mathbf{b}</math>. Lebih lanjut, solusi ini adalah sebuah solusi feasibel sederhana. Intepretasi aljabar kejadian ini terlihat dengan memandang koefisien-koefisien dari [[persamaan linear]] yang direpresentasikan setiap baris, dapat bernilai <math>0</math>, <math>1</math>, atau suatu bilangan lainnya. Setiap baris akan memiliki <math>1</math> kolom bernilai <math>1</math>, <math>p-1</math> kolom dengan nilai koefisien <math>0</math>, sedangkan kolom yang tersisa berisi nilai koefisien lainnya (kolom-kolom ini merepresentasikan variabel-variabel bebas). Dengan membuat nilai setiap variabel bebas sama dengan nol pada setiap baris, kita memastikan setiap variabel yang direpresentasikan oleh <math>1</math> pada kolom dari <math>\mathbf{A}</math>, akan sama dengan nilai <math>\mathbf{b}</math> pada baris tersebut. Sebaliknya, jika diberikan sebuah solusi feasibel sederhana, kolom yang berkorespodensi dengan variabel yang bernilai tidak nol, dapat dikembangkan menjadi sebuah matriks tak singular. Jika tablo yang bersangkutan dikalikan dengan invers dari matriks ini, maka tablo tersebut berubah menjadi bentuk kanoniknya.<ref>{{harvtxt|Murty|1983|loc=section 3.12}}</ref>
 
Misalkan
 
<math display=block>
\begin{bmatrix}
1 & -\mathbf{c}^T_B & -\mathbf{c}^T_D & 0 \\
0 & I & \mathbf{D} & \mathbf{b}
\end{bmatrix}
</math>
 
adalah sebuah tablo dalam bentuk kanoniknya. [[Matriks dasar|Operasi baris dasar]] dapat diterapkan pada baris pertama untuk menghilangkan koefisien <math>\mathbf{c}_B^\text{T}</math> dari fungsi objektif. Hasil akhir dari proses ini adalah sebuah tablo bentuk kanonik dalam format
 
<math display=block>
\begin{bmatrix}
1 & 0 & -\bar{\mathbf{c}}^T_D & z_B \\
0 & I & \mathbf{D} & \mathbf{b}
\end{bmatrix}
</math>
 
dengan <math>z_B</math> menyatakan nilai fungsi objektif pada solusi feasibel sederhana yang bersangkutan. Koefisien baru <math>-\bar{\mathbf{c}}^T_D</math> menyatakan kerugian relatif (''relative cost''), yakni representasi dari laju perubahan fungsi objektif relatif terhadap variabel-variabel bebas.<ref name=":0" />
 
== Operasi pivot ==
Operasi ''pivot'' (poros, sumbu) adalah implementasi dari operasi geometris "memindahkan" nilai fungsi objektif dari sebuah solusi feasibel sederhana ke solusi feasibel lainnya. Pertama, sebuah ''elemen pivot'' <math>u</math> yang nilainya tidak sama dengan nol, dipilih dari sebuah kolom variabel bebas. Anggap baris yang mengandung elemen tersebut adalah baris ke-<math>r</math> pada tablo. Berikutnya, baris yang mengandung elemen ini dikali dengan <math>1/u</math> (sehingga nilai dari elemen pivot menjadi sama dengan 1). Kemudian kelipatan dari baris ini ditambahkan ke baris-baris ''lainnya'' sedemikian sehingga elemen-elemen di kolom variabel bebas tersebut bernilai sama dengan 0. Dengan kata lain, kolom variabel bebas yang mengandung elemen pivot (yakni kolom ke-<math>r</math>) menjadi sama dengan kolom ke-<math>r</math> dari sebuah matriks identitas.
 
Operasi ini mengubah kolom variabel bebas menjadi kolom variabel sederhana. Tablo masih dalam bentuk kanonik, namun himpunan variabel bebasnya berubah satu elemen.<ref name="DantzigThapa12" /><ref name=":0" />
 
== Algoritma ==
Misalkan sebuah program linear sudah tersaji dalam bentuk kanonik. Algoritma simpleks bekerja dengan menerapkan operasi pivot secara berulang untuk mendapatkan solusi feasibel sederhana yang lebih baik. Pemilihan elemen pivot pada setiap langkah sebagian besar ditujukan untuk mencari solusi yang lebih baik.
 
=== Pemilihan kolom pivot ===
Jika ada lebih dari satu entri pada baris fungsi objektif (terletak di baris pertama pada tablo) yang bernilai positif, ada kebebasan dalam memilih kolom yang akan menjadi variabel sederhana; beberapa aturan pemilihan<ref name="Murty66">{{harvtxt|Murty|1983|p=66}}</ref> seperti algoritma Devex<ref>Harris, Paula MJ. "Pivot selection methods of the Devex LP code." Mathematical programming 5.1 (1973): 1–28</ref> dikembangkan untuk memilih kolom. Jika semua entri objektif bernilai 0 atau kurang dari itu, maka tidak ada kolom pivot yang dapat pilih, dan solusi yang didapat sudah optimal. Keoptimalan dapat terlihat karena baris fungsi objektif setara dengan persamaan dengan bentuk
 
<math display="block">z(\mathbf{x})=z_B+\text{suku-}\text{suku non-positif dari variabel-variabel bebas}</math>
 
Mengubah aturan pemilihan agar memilih entri bernilai negatif dari baris fungsi objektif, akan membuat algoritma mencari minimum dari fungsi objektif ketimbang maksimum.
 
=== Pemilihan baris pivot ===
Setelah kolom pivot terpilih, pemilihan baris pivot sebagian besar dilakukan agar solusi yang didapat masih feasibel. Pertama, hanya entri bernilai positif pada kolom pivot yang dipertimbangkan, karena entri-entri ini yang memastikan nilai variabel tetap nonnegatif. Namun jika tidak ada entri bernilai positif pada kolom pivot, maka variabel dapat bernilai sembarang nilai nonnegatif; dalam kasus ini fungsi objektif tidak terbatas dari bawah, sehingga tidak memiliki minimum.
 
Selanjutnya, baris pivot yang dipilih perlu menjaga variabel-variabel sederhana lainnya tetap positif. Jika kolom pivot adalah kolom ke-<math>c</math>, maka baris ke-<math>r</math> untuk pivot dipilih sehingga nilai <math>b_r / a_{rc}\,</math>bernilai minimum untuk semua <math>r</math>; dengan <math>a_{rc}>0</math>. Pemilihan ini disebut ''tes rasio terkecil'' (''minimum ratio test'').<ref name="Murty66" /> Jika ada lebih dari satu kolom dengan nilai minimum yang sama, aturan pemilihan variabel (''dropping variable choice rule'')<ref>{{harvtxt|Murty|1983|p=67}}</ref> dapat digunakan untuk menentukan baris.
 
=== Contoh ===
Perhatikan program linear
 
: Minimumkan <math>Z = -2 x - 3 y - 4 z\,</math>
: Dengan kendala
:<math display=block>\begin{align}
3 x + 2 y + z &\le 10\\
2 x + 5 y + 3 z &\le 15\\
x,\,y,\,z &\ge 0
\end{align}</math>
 
Dengan menambah variabel lempai <math>s</math> dan <math>t</math>, program linear akan memiliki tablo bentuk kanonik
 
<math>
\begin{bmatrix}
1 & 2 & 3 & 4 & 0 & 0 & 0 \\
0 & 3 & 2 & 1 & 1 & 0 & 10 \\
0 & 2 & 5 & 3 & 0 & 1 & 15
\end{bmatrix}
</math>
 
dengan kolom ke-5 dan ke-6 menandakan variabel sederhana <math>s</math> dan <math>t</math>. Solusi feasibel sederhana yang berkorespodensi dengan tablo ini adalah
 
<math display=block>x=y=z=0,\,s=10,\,t=15.</math>
 
Selanjutnya, kolom ke-2, ke-3, dan ke-4 dapat digunakan sebagai kolom pivot. Untuk contoh ini akan dipilih kolom ke-4. Nilai dari <math>b_r / a_{rc}\,</math>untuk baris ke-2 dan baris ke-3 secara berurutan adalah 10/1 = 10 dand 15/3 = 5. Karena minimum dari kedua nilai ini adalah 5, baris ke-3 dipilih sebagai baris pivot. Setelah menerapkan operasi pivot pada tablo, akan dihasilkan tablo
 
<math display="block">
\begin{bmatrix}
3 & -2 & -11 & 0 & 0 & -4 & -60 \\
0 & 7 & 1 & 0 & 3 & -1 & 15 \\
0 & 2 & 5 & 3 & 0 & 1 & 15
\end{bmatrix}
</math>
 
Sekarang kolom ke-4 dan ke-5 merepresentasikan variabel sederhana <math>z</math> dan <math>s</math>. Solusi feasibel sederhana dari tablo tersebut adalah<math display=block>x=y=t=0,\,z=15/3,\,s=15/3.</math>
 
Tidak ada entri positif di baris fungsi objektif, sehingga operasi pivot tidak dapat dilakukan. Lebih lanjut, fungsi objektif yang berkorespondensi dengan tablo,
 
<math display=block>Z = \frac{-60+2x+11y+4t}{3} = -20 + \frac{2x+11y+4t}{3}</math>
 
sudah optimal, dengan nilai minimum dari <math>Z</math> adalah &#x2212;20 (hasil subtitusi <math>x=y=t=0</math>).
 
== Membentuk tablo awalan ==
Secara umum program linear tidak tersaji dalam bentuk kanonik, sehingga tablo bentuk kanonik yang ekuivalen perlu disusun terlebih dahulu sebelum algoritma simpleks dapat berjalan. Hal ini dapat dilakukan dengan memperkenalkan variabel-variabel buatan (''artificial''). Kolom-kolom dari matriks identitas ditambahkan sebagai vektor kolom dari variabel-variabel ini. Jika nilai <math>b</math> suatu kendala bernilai negatif, persamaan perlu dikali dengan -1 sebelum menambahkan kolom matriks identitas. Hal ini tidak akan mengubah himpunan solusi feasibel maupun solusi optimal, dan memastikan bahwa variabel-variabel lempai (''slack'') pada awalnya akan membentuk solusi feasibel. Walau tablo yang dibuat akan berbentuk kanonik, tablo ini tidak sama dengan masalah yang sebenarnya dikerjakan. Untuk itu sebuah fungsi objektif baru dibentuk, yang nilainya sama dengan jumlah semua variabel buatan, dan algoritma simpleks diterapkan untuk mencari minimum dari fungsi objektif ini. Program linear yang dimodifikasi ini disebut dengan masalah ''Tahap I''.<ref>{{harvtxt|Murty|1983|p=60}}</ref>
 
Algoritma simpleks yang diterapkan pada masalah Tahap I pasti berakhir dengan sebuah nilai minimum dari fungsi objektif baru. Hal ini dikarenakan fungsi objektif tersebut adalah jumlah dari variabel-variabel bernilai nonnegatif, yang nilainya terbatas dari bawah oleh 0. Jika minimum fungsi ini adalah 0, maka variabel-variabel buatan dapat dieliminasi dari tablo yang dihasilkan, hal ini akan membentuk tablo kanonik yang ekuivalen dengan masalah yang sebenarnya. Algoritma simpleks selanjutnya dapat diterapkan untuk mencari solusi; langkah ini disebut ''Tahap II''. Namun jika minimum dari fungsi objektif baru bernilai positif, maka tidak ada solusi feasibel (dengan semua variabel buatan bernilai nol) untuk masalah Tahap I. Hal ini mengimplikasikan masalah yang sebenarnya memiliki daerah feasibel yang kosong, sehingga masalah tersebut tidak memiliki solusi.<ref name="DantzigThapa12" /><ref name=":0" /><ref>{{Cite book|last=Padberg|first=M.|date=1999|title=Linear Optimization and Extensions|publisher=Springer-Verlag|edition=2|url-status=live}}</ref>
 
=== Contoh ===
Diberikan sebuah program linear:
 
Minimumkan <math>Z = -2 x - 3 y - 4 z\,</math>
 
Dengan kendala:<math display="block">\begin{align}
3 x + 2 y + z &= 10\\
2 x + 5 y + 3 z &= 15\\
x,\, y,\, z &\ge 0
\end{align}</math>
 
Hal ini dapat direpresentasikan dengan sebuah tablo (belum berbentuk kanonik):
 
<math display="block">
\begin{bmatrix}
1 & 2 & 3 & 4 & 0 \\
0 & 3 & 2 & 1 & 10 \\
0 & 2 & 5 & 3 & 15
\end{bmatrix}
</math>
 
Bentuk dua variabel buatan baru <math>u</math> dan <math>v</math>, dan fungsi objektif baru <math>W=u+v</math>. Hal ini akan membentuk tablo baru<math display="block">
\begin{bmatrix}
1 & 0 & 0 & 0 & 0 & -1 & -1 & 0 \\
0 & 1 & 2 & 3 & 4 & 0 & 0 & 0 \\
0 & 0 & 3 & 2 & 1 & 1 & 0 & 10 \\
0 & 0 & 2 & 5 & 3 & 0 & 1 & 15
\end{bmatrix}
</math>Persamaan-persamaan yang mendefinisikan masalah yang sebenarnya tetap dipertahankan untuk Tahap II. Dari konstruksinya, <math>u</math> dan <math>v</math> adalah variabel sederhana karena mereka adalah bagian dari matriks identitas. Namun, fungsi objektif <math>W</math> saat ini mengasumsikan <math>u</math> dan <math>v</math> keduanya bernilai 0. Untuk mengoreksi nilai dari fungsi objektif, dengan <math>u=10</math> dan <math>v=15</math>, Baris ketiga dan keempat pada tablo ditambahkan ke baris pertama, menghasilkan tablo
 
<math display="block">
\begin{bmatrix}
1 & 0 & 5 & 7 & 4 & 0 & 0 & 25 \\
0 & 1 & 2 & 3 & 4 & 0 & 0 & 0 \\
0 & 0 & 3 & 2 & 1 & 1 & 0 & 10 \\
0 & 0 & 2 & 5 & 3 & 0 & 1 & 15
\end{bmatrix}
</math>
 
Pilih kolom ke-5 sebagai kolom pivot; sehingga baris pivot yang dipilih haruslah baris ke-4. Tablo baru yang terbentuk adalah<math display="block">
\begin{bmatrix}
3 & 0 & 7 & 1 & 0 & 0 & -4 & 15 \\
0 & 3 & -2 & -11 & 0 & 0 & -4 & -60 \\
0 & 0 & 7 & 1 & 0 & 3 & -1 & 15 \\
0 & 0 & 2 & 5 & 3 & 0 & 1 & 15
\end{bmatrix}
</math>
 
Lalu pilih kolom-3 sebagai kolom pivot; hal ini mengharuskan baris ke-3 sebagai baris pivot. Langkah ini akan menghasilkan<math display="block">
Dapat ditunjukkan untuk program linear dalam bentuk baku, jika fungsi objektif mempunyai nilai maksimum di daerah feasibel, maka nilai maksimum ini terletak di (setidaknya satu) titik ekstrem.<ref>{{harvtxt|Murty|1983|loc=Theorem 3.3}}</ref> Hal ini menyederhanakan program linear menjadi sebuah masalah komputasi yang berhingga, karena hanya terdapat terhingga banyaknya titik ekstrem; walau banyaknya titik ekstrem dapat terlalu besar untuk dapat ditangani.<ref>{{harvtxt|Murty|1983|loc=Section 3.13|p=143}}</ref> Selain itu, juga dapat dibuktikan jika sebuah titik ekstrem tidak memberikan fungsi objektif nilai yang maksimum, maka ada rusuk dari titik tersebut yang "mengarahkan" fungsi objektif ke nilai yang lebih tinggi.<ref name="Murty137">{{harvtxt|Murty|1983|loc=Section 3.8|p=137}}</ref> Jika panjang rusuk terhingga, maka rusuk akan terhubung dengan sebuah titik ekstrem lain yang memiliki nilai fungsi objektif lebih tinggi; namun jika panjang rusuk tak hingga, nilai fungsi objektif tidak terbatas dan program linear tidak memiliki solusi. Algoritma simpleks menerapkan wawasan ini, dengan "berjalan" sepanjang rusuk-rusuk dari politop untuk mencapai titik ekstrem dengan nilai fungsi objektif paling besar; atau berhenti ketika mencapai rusuk dengan panjang tak terbatas. Algoritma selalu berakhir (''terminates'') karena ada terhingg banyaknya rusuk pada politop. Selain itu, karena kita menelurusi rusuk-rusuk dalam "arah yang sama" dengan fungsi objektif, kita berharap hanya sedikit rusuk yang perlu dikunjungi.<ref name="Murty137" />
\begin{bmatrix}
7 & 0 & 0 & 0 & 0 & -7 & -7 & 0 \\
0 & 7 & 0 & -25 & 0 & 2 & -10 & -130 \\
0 & 0 & 7 & 1 & 0 & 3 & -1 & 15 \\
0 & 0 & 0 & 11 & 7 & -2 & 3 & 25
\end{bmatrix}
</math>
 
Nilai fungsi objektif saat ini bernilai 0 (sudah minimum), dan variabel-variabel buatan dapat dihilangkan agar menghasilkan tablo kanonik yang ekuivalen dengan masalah yang sebenarnya. Tablo tersebut adalah:<math display="block">
Solusi dari program linear dikerjakan dalam dua tahap. Pada Tahap I, sebuah titik ekstrem ditentukan. Tergantung dari program yang dikerjakan, hal ini dapat dilakukan secara trivial, atau dengan menerapkan algoritma simpleks ke suatu modifikasi dari program semula. Tahap ini dapat menghasilkan sebuah solusi feasibel sederhana, atau tidak sama sekali (karena daerah feasibel kosong). Untuk kasus kedua, program linear dikatakan ''tidak feasibel''. Selanjutnya pada Tahap II, algoritma simpleks diterapkan pada solusi feasibel sederhana yang didapat pada Tahap I sebagai titik mulai pengerjaan. Hasil dari Tahap II adalah sebuah solusi feasibel yang optimal, atau sebuah rusuk dengan panjang terbatas (yang menyebabkan fungsi tidak terbatas dari atas).<ref name="DantzigThapa12">[[George B. Dantzig]] and Mukund N. Thapa. 1997. ''Linear programming 1: Introduction''. Springer-Verlag.</ref><ref>{{Cite book|last=D. Nering|first=Evar|last2=W. Tucker|first2=Albert|date=1993|title=Linear Programs and Related Problems|publisher=Academic Press|url-status=live}}</ref><ref name="Vanderbei2">Robert J. Vanderbei, [http://www.princeton.edu/~rvdb/LPbook/ ''Linear Programming: Foundations and Extensions''], 3rd ed., International Series in Operations Research & Management Science, Vol. 114, Springer Verlag, 2008. {{isbn|978-0-387-74387-5}}. <!-- (Edisi kedua yang daring masih tersedia. Situs milik Vanderbei masih menyimpan koleksi materi yang mendalam.) --></ref>
\begin{bmatrix}
7 & 0 & -25 & 0 & -130 \\
0 & 7 & 1 & 0 & 15 \\
0 & 0 & 11 & 7 & 25
\end{bmatrix}
</math>
 
Dalam contoh masalah ini, untungnya, tablo sudah optimal dari nilai minimum dari fungsi objektif (yang sebenarnya) adalah −130/7.
== Perumusan ==
Suatu masalah pemrograman linier dapat dirumuskan sebagai berikut:
:Optimasikan fungsi
::<math>f = c_1x_1 + c_2x_2 + \ldots + c_nx_n = \sum_{j=1}^{n} c_jx_j </math>
:Dengan syarat
::<math>a_{11}x_1 + a_{12}x_2 + \ldots + a_{1n}x_n \leq b_1 </math>
::<math>a_{21}x_1 + a_{22}x_2 + \ldots + a_{2n}x_n \leq b_2 </math>
::<math>\vdots</math>
::<math>a_{m1}x_1 + a_{m2}x_2 + \ldots + a_{mn}x_n \leq b_m </math>
:Syarat-syarat di atas dapat kita tuliskan dengan lebih singkat sebagai:
::<math>\sum_{i=1}^{n} a_{ij}x_j \leq b_j</math> ; <math> i = 1, 2, 3, \ldots, m </math>.
:Selain itu, variabel ''x''<sub>1</sub>, ''x''<sub>2</sub>, ... ''x''<sub>n</sub> harus memenuhi persyaratan:
::<math>x_1, x_2, \ldots, x_n \geq 0 </math>
 
== Referensi ==
{{Reflist}}
{{matematika-stub}}
[[Kategori:Program linear]]