Trong toán học, **quy hoạch tuyến tính** (QHTT) (tiếng Anh: *linear programming* - LP) là bài toán tối ưu hóa, trong đó hàm mục tiêu (*objective function*) và các điều kiện ràng buộc đều là tuyến tính.

Trong bài toán này, cho một đa tạp (*polytope*) (chẳng hạn một đa giác hoặc một đa diện), và một hàm tuyến tính (affine) nhận giá trị thực

{\displaystyle f(x\_{1},x\_{2},\dots ,x\_{n})=a\_{1}x\_{1}+a\_{2}x\_{2}+\cdots +a\_{n}x\_{n}+b\,} +c
xác định trên đa tạp đó, mục đích là tìm một điểm trên đa tạp tại đó hàm có giá trị nhỏ nhất (hoặc lớn nhất). Các điểm như vậy có thể không tồn tại, nhưng nếu chúng tồn tại phải tìm được ít nhất một điểm.

Lịch sử
-------

Phương pháp giải hệ phương trình truyến tính đã đã được tìm ra vào năm 1827 bởi *Fourier.* Vì thế nó có tên là phương pháp loại bỏ Fourier-Motzkin.

Năm 1939, một dạng bài toán quy hoạch tuyến tính tương đương với bài toán quy hoạch tuyến tính tổng quát được đưa ra bởi nhà toán học và kinh tế học Leonid Kantorovich, và ông cũng chính là người đề xuất phương pháp giải nó. Trong Thế chiến thứ 2, ông được giao cho nhiệm vụ lập bảng kế hoạch chi tiêu và thu hồi nhằm giảm chi phí cho quân đội và tăng tổn thất cho kẻ thù. Công việc mà Kantorovich làm ban đầu bị lãng quên. Cùng thời với Kantorovich, nhà kinh tế học người Mỹ gốc Hà Lan T.C.Koopmans đã đưa ra các bài toán kinh tế cổ điển dưới dạng bài toán tuyến tính. Kantorovich and Kôpmans sau đó cùng nhận giải Nobel kinh tế năm 1975. Năm 1941, Frank Lauren Hitchcook cũng đưa các bài toán vận tải dưới dạng phương trinh tuyến tính và đưa ra một đáp án rất giống với phương pháp simplex sau này. Hitchcook qua đời năm 1957, và giải Nobel đã không được truy tặng.

Dạng chuẩn tắc (Standard form)
------------------------------

Dạng chuẩn tắc là dạng thông thường và trực quan nhất đẻ mô tả một bài toán quy hoạch tuyến tính.

Một bài toán quy hoạch tuyến tính thường được phát biểu dưới dạng sau:

*Tìm cực tiểu của {\displaystyle cx} trên {\displaystyle \{x\in \mathbb {R} ^{n}|Ax\leq b\}}, trong đó {\displaystyle A\in \mathbb {R} ^{m\times n}}, {\displaystyle b\in \mathbb {R} ^{m}}, {\displaystyle c\in \mathbb {R} ^{n}}.*
Như vậy, một bài toán quy hoạch tuyến tính được cho bởi:

1. Một hàm tuyến tính cần tìm cực tiểu: {\displaystyle cx=c\_{1}x\_{1}+\ldots +c\_{n}x\_{n}}.

Thí dụ: {\displaystyle 5x\_{1}+3x\_{2}-x\_{3}}.
2. Các *điều kiện* (hay *ràng buộc*) dưới dạng các bất đẳng thức tuyến tính.

Thí dụ:
* {\displaystyle x\geq 0} (ứng với {\displaystyle A=-Id}, {\displaystyle b=0}).
* {\displaystyle {\begin{cases}x\_{1}+x\_{2}\leq 1\\x\_{1}\geq 0\\x\_{2}\geq 0\end{cases}}\quad } (ứng với {\displaystyle A={\begin{bmatrix}1&1\\-1&0\\0&-1\end{bmatrix}}}, {\displaystyle b={\begin{bmatrix}1\\0\\0\\\end{bmatrix}}}).

**Ghi chú:** Các tài liệu khác nhau có thể có định nghĩa khác nhau về dạng chuẩn tắc của bài toán. Tuy nhiên, các dạng này là tương đương (xem ).

### Ví dụ

Chẳng hạn một nông dân có *A* sào đất để canh tác, ông ta dự định trồng khoai tây và lúa. Ông ta cũng có một lượng phân bón là *F* và một số tiền vốn để mua giống là *P*. Chi phí tương ứng cho hai loại cây trông trên là (*F*1, *P*1) cho khoai tây và (*F*2, *P*2) cho lúa. Giả sử thu hoạch quy ra tiền cho mỗi sào khoai tây là *S*1, cho mỗi sào lúa là *S*2. Nếu dành để trồng khoai tây *x*1 sào và lúa *x*2 sào, thì bài toán chọn số sào trồng khoai tây và trồng lúa là bài toán QHTT sau đây:

|  |  |
| --- | --- |
| Cực đại hóa hàm {\displaystyle S\_{1}x\_{1}+S\_{2}x\_{2}\,} | (hàm mục tiêu cực đại) |
| với các ràng buộc |
|  | {\displaystyle x\_{1}+x\_{2}\leq A} | (giới hạn đất trồng) |
|  | {\displaystyle F\_{1}x\_{1}+F\_{2}x\_{2}\leq F} | (giới hạn phân bón) |
|  | {\displaystyle P\_{1}x\_{1}+P\_{2}x\_{2}\leq P} | (giới hạn tiền vốn mua giống) |
|  | {\displaystyle x\_{1}\geq 0,\,x\_{2}\geq 0} | (giá trị không âm) |

Còn dưới dạng ma trận:

maximize {\displaystyle {\begin{bmatrix}S\_{1}&S\_{2}\end{bmatrix}}{\begin{bmatrix}x\_{1}\\x\_{2}\end{bmatrix}}}
ràng buộc {\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}A\\F\\P\end{bmatrix}},\,{\begin{bmatrix}x\_{1}\\x\_{2}\end{bmatrix}}\geq 0}

Dạng gia tố (Augmented form)
----------------------------

(Các tài liệu trong nước gọi là đưa về dạng chính tắc)

Bài toán QHTT được biến đổi về dạng gia tố trước khi trước khi giải bằng thuật toán đơn hình (simplex algorithm). Trong dạng này có bổ sung một số "biến bù" không âm để biến các bất đẳng thức thành các đẳng thức. Khi đó bài toán viết dưới dạng:

Cực đại hóa *Z* trong:
{\displaystyle {\begin{bmatrix}1&-\mathbf {c} ^{T}&0\\0&\mathbf {A} &\mathbf {I} \end{bmatrix}}{\begin{bmatrix}Z\\\mathbf {x} \\\mathbf {x} \_{s}\end{bmatrix}}={\begin{bmatrix}0\\\mathbf {b} \end{bmatrix}}}
{\displaystyle \mathbf {x} ,\,\mathbf {x} \_{s}\geq 0}
trong đó *xs* là các biến bù, còn *Z* là biến cần cực đại.

### Ví dụ

Bài toán trong ví dụ trên sau khi biến đổi có dạng:

|  |  |  |
| --- | --- | --- |
| Cực đại hóa | {\displaystyle S\_{1}x\_{1}+S\_{2}x\_{2}\,}=Z | (hàm mục tiêu) |
| với các ràng buộc |
|  | {\displaystyle x\_{1}+x\_{2}+x\_{3}=A\,} | (ràng buộc gia tố) |
|  | {\displaystyle F\_{1}x\_{1}+F\_{2}x\_{2}+x\_{4}=F\,} | (ràng buộc gia tố) |
|  | {\displaystyle P\_{1}x\_{1}+P\_{2}x\_{2}+x\_{5}=P\,} | (ràng buộc gia tố) |
|  | {\displaystyle x\_{1},x\_{2},x\_{3},x\_{4},x\_{5}\geq 0} |  |

trong đó {\displaystyle x\_{3},x\_{4},x\_{5}\,} là các "biến bù" không âm.

Nó có thể viết dưới dạng ma trận:

Cực đại hóa *Z* trong:
{\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\\A\\F\\P\end{bmatrix}},\,{\begin{bmatrix}x\_{1}\\x\_{2}\\x\_{3}\\x\_{4}\\x\_{5}\end{bmatrix}}\geq 0}

Các dạng đặc biệt
-----------------

* Bài toán vận tải

Chú thích
---------

1. ↑  Allaire 2005, chương 11.

Tham khảo
---------

Allaire, Grégoire (2005). *Analyse numérique et optimisation* (bằng tiếng Pháp). Ellipses. ISBN 9782730212557.