2.1.BÀI TOÁN QUY HOẠCH
Bài toán quy hoạch là bài toán tối ưu: gồm có một hàm f gọi là hàm mục tiêu hay hàm đánh giá; các hàm g1, g2, …, gn cho giá trị logic gọi là hàm ràng buộc. Yêu cầu của bài toán là tìm một cấu hình x thoả mãn tất cả các ràng buộc g1, g2, …gn: gi(x) = TRUE (∀i: 1 ≤ i ≤ n) và x là tốt nhất, theo nghĩa không tồn tại một cấu hình y nào khác thoả mãn các hàm ràng buộc mà f(y) tốt hơn f(x). Ví dụ: Tìm (x, y) để Hàm mục tiêu : x + y → max Hàm ràng buộc : x2 + y2≤ 1. Xét trong mặt phẳng toạđộ, những cặp (x, y) thoả mãn x2 + y2≤ 1 là tọa độ của những điểm nằm trong hình tròn có tâm O là gốc toạ độ, bán kính 1. Vậy nghiệm của bài toán bắt buộc nằm trong hình tròn đó.
Những đường thẳng có phương trình: x + y = C (C là một hằng số) là đường thẳng vuông góc với đường phân giác góc phần tư thứ nhất. Ta phải tìm số C lớn nhất mà đường thẳng x + y = C vẫn có điểm chúng với đường tròn (O, 1). Đường thẳng đó là một tiếp tuyến của đường tròn:
2 = +y x . Tiếp điểm ) 2 1 , 2 1
( tương ứng với nghiệm tối ưu của bài toán đã chọ
0 x y 2 = +y x 1 1 2 1 = = y x
Các dạng bài toán quy hoạch rất phong phú và đa dạng, ứng dụng nhiều trong thực tế, nhưng cũng cần biết rằng, đa số các bài toán quy hoạch là không giải được, hoặc chưa giải được. Cho đến nay, người ta mới chỉ có thuật toán đơn hình giải bài toán quy hoạch tuyến tính lồi, và một vài thuật toán khác áp dụng cho các lớp bài toán cụ thể.
2.2.PHƯƠNG PHÁP QUY HOẠCH ĐỘNG
Phương pháp quy hoạch động dùng để giải bài toán tối ưu có bản chất đệ quy, tức là việc tìm phương án tối ưu cho bài toán đó có thểđưa về tìm phương án tối ưu của một số hữu hạn các
bài toán con. Đối với nhiều thuật toán đệ quy chúng ta đã tìm hiểu, nguyên lý chia để trị
(divide and conquer) thường đóng vai trò chủđạo trong việc thiết kế thuật toán. Để giải quyết một bài toán lớn, ta chia nó làm nhiều bài toán con cùng dạng với nó để có thể giải quyết độc lập. Trong phương pháp quy hoạch động, nguyên lý này càng được thể hiện rõ: Khi không biết cần phải giải quyết những bài toán con nào, ta sẽđi giải quyết tất cả các bài toán con và
lưu trữ những lời giải hay đáp số của chúng với mục đích sử dụng lại theo một sự phối hợp nào đó để giải quyết những bài toán tổng quát hơn. Đó chính là điểm khác nhau giữa Quy hoạch động và phép phân giải đệ quy và cũng là nội dung phương pháp quy hoạch động: Phép phân giải đệ quy bắt đầu từ bài toán lớn phân rã thành nhiều bài toán con và đi giải từng bài toán con đó. Việc giải từng bài toán con lại đưa về phép phân rã tiếp thành nhiều bài toán nhỏ hơn và lại đi giải tiếp bài toán nhỏ hơn đó bất kể nó đã được giải hay chưạ
Quy hoạch động bắt đầu từ việc giải tất cả các bài toán nhỏ nhất ( bài toán cơ sở) để từđó từng bước giải quyết những bài toán lớn hơn, cho tới khi giải được bài toán lớn nhất (bài toán ban đầu).
Ta xét một ví dụđơn giản:
Ví dụ: Dãy Fibonacci là dãy số nguyên dương được định nghĩa như sau:
F1 = F2 = 1;
∀ i: 3 ≤ i: Fi = Fi-1 + Fi-2
Hãy tính F6
Xét hai cách cài đặt chương trình:
Cách 1 Cách 2
program Fibo1;
function F(i: Integer): Integer; begin