Quy hoạch tuyến tính

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
: f(x_1, x_2, \dots, x_n)=a_1x_1+a_2x_2+\cdots +a_nx_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 *[[Joseph Fourier|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 <math>c x</math> trên <math>\{x \in \mathbb R^n | Ax \le b\}</math>, trong đó <math>A \in \mathbb R^{m \times n}</math>, <math>b \in \mathbb R^m</math>, <math>c \in \mathbb R^n</math>.

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: <math>c x = c_1 x_1 + \ldots + c_n x_n</math>.
::Thí dụ: <math>5 x_1 + 3 x_2 - x_3</math>.

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ụ:
:::* <math>x \ge 0</math> (ứng với <math>A = - Id</math>, <math>b = 0</math>).
:::* <math>\begin{cases} x_1 + x_2 \le 1 \\
x_1 \ge 0 \\
x_2 \ge 0 
\end{cases}\quad</math> <big>(</big>ứng với <math>A = \begin{bmatrix} 1 & 1\\
-1 & 0\\
0 & -1\end{bmatrix}</math>, <math>b = \begin{bmatrix} 1 \\ 0 \\ 0\\\end{bmatrix}</math><big>)</big>.

*'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*<sub>1</sub>, *P*<sub>1</sub>) cho khoai tây và (*F*<sub>2</sub>, *P*<sub>2</sub>) cho lúa. Giả sử thu hoạch quy ra tiền cho mỗi sào khoai tây là *S*<sub>1</sub>, cho mỗi sào lúa là *S*<sub>2</sub>. Nếu dành để trồng khoai tây *x*<sub>1</sub> sào và lúa *x*<sub>2</sub> 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òn dưới dạng ma trận:
: maximize <math>\begin{bmatrix} S_1 & S_2 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} </math>
: ràng buộc <math>\begin{bmatrix} 1 & 1 \\ F_1 & F_2 \\ P_1 & P_2 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \le \begin{bmatrix} A \\ F \\ P \end{bmatrix}, \, \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \ge 0 </math>

== 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:
: <math>
  \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}
</math>
: <math> \mathbf{x}, \, \mathbf{x}_s \ge 0 </math>
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:


trong đó <math>x_3,x_4,x_5\,</math> 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:
: 
  \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} \ge 0


## Các dạng đặc biệt
*Bài toán vận tải

## Chú thích

## Tham khảo

* 

## Liên kết ngoài