Lineaarprogrammeerimine

Lineaarprogrammeerimine (ka lineaarne planeerimine) on matemaatikas optimeerimise meetod, millega leitakse sihifunktsiooni muutujate väärtused, mille puhul funktsiooni väärtus on minimaalne või maksimaalne. Sealjuures võivad muutujatele kehtida võrratussüsteemina esitatavad kitsendused. Nii sihifunktsioon kui ka kitsenduste võrratused peavad olema lineaarsed. Lineaarprogrammeerimisega lahendatavaid probleeme saab esitada standardkujul, mis koosneb kolmest osast: Sihifunktsioon, mida maksimeerida, nt f ( x 1 , x 2 ) = c 1 x 1 + c 2 x 2 {\displaystyle f(x_{1},x_{2})=c_{1}x_{1}+c_{2}x_{2}} Kitsendused muutujatele, esitatuna võrratussüsteemina, nt a 11 x 1 + a 12 x 2 ≤ b 1 a 21 x 1 + a 22 x 2 ≤ b 2 a 31 x 1 + a 32 x 2 ≤ b 3 {\displaystyle {\begin{matrix}a_{11}x_{1}+a_{12}x_{2}&\leq b_{1}\\a_{21}x_{1}+a_{22}x_{2}&\leq b_{2}\\a_{31}x_{1}+a_{32}x_{2}&\leq b_{3}\end{matrix}}} Muutujate mitte-negatiivsuse tingimus, nt x 1 ≥ 0 x 2 ≥ 0 {\displaystyle {\begin{matrix}x_{1}\geq 0\\x_{2}\geq 0\end{matrix}}} x ∗ {\displaystyle x_{*}} on sihifunktsiooni argumendid ehk muutujad, mille väärtusi otsitakse. a ∗ {\displaystyle a_{*}} , b ∗ {\displaystyle b_{*}} ja c ∗ {\displaystyle c_{*}} on väärtused, mis tulenevad probleemipüstitusest. Sõltuvalt lahendamise meetodist võib olla otstarbekas kasutada teistsugust standardkuju. Näiteks simpleksmeetodi puhul tuleb kitsendused viia võrdusmärgiga kujule, nt a 11 x 1 + a 12 x 2 + a 13 x 3 = b 1 a 21 x 1 + a 22 x 2 + a 23 x 3 = b 2 {\displaystyle {\begin{matrix}a_{11}x_{1}+a_{12}x_{2}+a_{13}x_{3}=b_{1}\\a_{21}x_{1}+a_{22}x_{2}+a_{23}x_{3}=b_{2}\end{matrix}}} Kondiitril on varutud 12 kg kohupiima ja 3 kg suhkrut, millest tuleb valmistada x 1 {\displaystyle x_{1}} kg kooki ja x 2 {\displaystyle x_{2}} kg torti nii, et saadav kasum oleks maksimaalne. Ülejäänud koostisaineid on piiramatus koguses. Üks kg kooki müüakse 11 € eest ja selle valmistamiseks kulub 500 g kohupiima ning 100 g suhkrut. Üks kg torti müüakse 16 € eest ja selle valmistamiseks kulub 400 g kohupiima ja 200 g suhkrut. Antud ülesande saab esitada standardkujul: Minimeerimisprobleemi saab teisendada maksimeerimisprobleemiks, muutes sihifunktsiooni märki, nt f ( x 1 , x 2 ) = c 1 x 1 + c 2 x 2 {\displaystyle f(x_{1},x_{2})=c_{1}x_{1}+c_{2}x_{2}} → f ( x 1 , x 2 ) = − c 1 x 1 − c 2 x 2 {\displaystyle f(x_{1},x_{2})=-c_{1}x_{1}-c_{2}x_{2}} ≤ {\displaystyle \leq } -märgiga kitsenduse saab teisendada võrduseks, lisades mitte-negatiivse tundmatu muutuja, nt a 11 x 1 + a 12 x 2 ≤ b 1 a 21 x 1 + a 22 x 2 ≤ b 2 {\displaystyle {\begin{matrix}a_{11}x_{1}+a_{12}x_{2}&\leq b_{1}\\a_{21}x_{1}+a_{22}x_{2}&\leq b_{2}\\\end{matrix}}} → a 11 x 1 + a 12 x 2 + x 3 = b 1 a 21 x 1 + a 22 x 2 + x 4 = b 2 {\displaystyle {\begin{matrix}a_{11}x_{1}+a_{12}x_{2}+x_{3}=b_{1}\\a_{21}x_{1}+a_{22}x_{2}+x_{4}=b_{2}\\\end{matrix}}} x 3 ≥ 0 x 4 ≥ 0 {\displaystyle {\begin{matrix}x_{3}\geq 0\\x_{4}\geq 0\end{matrix}}} Lisatud muutuja väljendab võrratuse vasaku poole ja selle suurima lubatud väärtuse vahet. See võib tähendada näiteks ressurssi, mida optimaalse lahenduse puhul ei kasutata. Lineaarprogrammeerimise probleeme saab lahendada näiteks simpleksmeetodi või sisepunkti meetodi abil.