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

Probleemi esitamine standardkujul
---------------------------------

Lineaarprogrammeerimisega lahendatavaid probleeme saab esitada standardkujul, mis koosneb kolmest osast:

* **Sihifunktsioon**, mida **maksimeerida**, nt

{\displaystyle f(x\_{1},x\_{2})=c\_{1}x\_{1}+c\_{2}x\_{2}}
* **Kitsendused muutujatele**, esitatuna võrratussüsteemina, nt

{\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

{\displaystyle {\begin{matrix}x\_{1}\geq 0\\x\_{2}\geq 0\end{matrix}}}
{\displaystyle x\_{\*}} on sihifunktsiooni argumendid ehk muutujad, mille väärtusi otsitakse. {\displaystyle a\_{\*}}, {\displaystyle b\_{\*}} ja {\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

{\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}}}
### Näide

Kondiitril on varutud 12 kg kohupiima ja 3 kg suhkrut, millest tuleb valmistada {\displaystyle x\_{1}} kg kooki ja {\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:

|  |  |
| --- | --- |
| Maksimeerida: {\displaystyle 11\cdot x\_{1}+16\cdot x\_{2}} | (müügist saadav kasum) |
| Sealjuures: | {\displaystyle 0{,}5\cdot x\_{1}+0{,}4\cdot x\_{2}\leq 12} | (kohupiim) |
|  | {\displaystyle 0{,}1\cdot x\_{1}+0{,}2\cdot x\_{2}\leq 3} | (suhkur) |
|  | {\displaystyle x\_{1}\geq 0,x\_{2}\geq 0} | (negatiivset kogust ei saa valmistada). |

Teisendamine standardkujule
---------------------------

* Minimeerimisprobleemi saab teisendada maksimeerimisprobleemiks, muutes sihifunktsiooni märki, nt

```
 {\displaystyle 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

```
 {\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}}}
 →
 {\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}}}
 {\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.

Lahendamine
-----------

Lineaarprogrammeerimise probleeme saab lahendada näiteks simpleksmeetodi või sisepunkti meetodi abil.