Professional Documents
Culture Documents
Bên cạnh nguyên lý cực ñại Pontryagin ,nguyên lý quy hoạch ñộng Bellman là trụ cột thứ
hai của lý thuyết ñiều khiển tối ưu.
Triết lý của quy hoạch ñộng là “biến tĩnh thành ñộng”,biến 1 bài toán n ẩn số giải bằng 1
bước về bài toán 1 ẩn số giải bằng n bước,trong ñó các bài toán con có liên hệ với nhau
qua 1 công thức truy toán.
Khi giải bài toán bằng nguyên lý quy hoạch ñộng Bellman,ta thường xét bài toán ngược
từ ñích vì khi xét bài toán ngược từ cuối,ta có thể xét tính tối ưu của nó mà không cần
quan tâm ñến hậu quả.Tất nhiên khi xét từng bài toán con,ñiều cần quan tâm là tối ưu
tổng thể của bài toán lớn chứ không phải là trên từng ñoạn ñường nhỏ.
Chính vì giải bài toán ngược từ cuối nên ta chưa biết ñược kết cục của nó vì trạng thái
của hệ thống lúc ñó chưa xác ñịnh.Bài toán tối ưu của ta ñược ñặc trưng bởi các tham
số,còn gọi là ñiều kiện ñầu.Chỉ tiêu tối ưu J ( xk ) và tín hiệu ñiều khiển tối ưu u ( xk ) là
hàm của sự kiện xk của bài toán con ñó.
Sau khi truy ngược từ cuối,dựa vào các ñiều kiện biên ta “giải xuôi” bài toán ñể tìm kết
cục của bài toán.
Nguyên lý tối ưu Bellman: Bất cứ ñoạn cuối của 1 quỹ ñạo tối ưu nào cũng phải là 1 quỹ
ñạo tối ưu.
Ta lấy bài tóan tìm ñường ñi ñể ñạt chỉ tiêu chất lượng tối ưu.
2 5
3
9
4 8
4 4
4 7 5
10
1 3 3 8 6
8
12 3
11 6
9
5
4 6 7
Ta tìm ñường ñi từ thành phố 1 ñến thành phố 10 phải ñi qua các thành phố 2,3,4 ...
Ta có Qk ( s ) = min {Qk −1 ( s ) + g k ( s )}
n=1
s j 10 Q1 ( s ) I1 ( s )
8 5+0 5 10
9 3+0 3 10
n=2
s j 8 9 Q2 ( s ) I 2 ( s)
5 9+5 8+3 11 9
6 7+5 12+3 12 8
7 - 5+3 8 9
n=3
s j 5 6 7 Q3 ( s ) I3 (s)
2 3+11 4+8 12 7
3 4+11 8+12 6+8 14 7
4 4+11 6+8 14 7
n=4
s j 2 3 4 Q4 ( s ) I 4 ( s)
1 4+12 3+14 11+14 16 2
Vậy quãng ñường tối ưu phải là: 1 – 2 – 7 – 9 – 10.Chi phí lúc ñó là Q4 = 16 là nhỏ nhất.
Bây giờ ta xét bài toán này với kích thước lớn hơn.
Khởi tạo dữ liệu:
90
80
70
60
50
40
30
20
10
100 200 300 400 500 600 700 800 900 1000
Tương tự như thế ta cho m và n nhỏ hơn ñể so sánh 2 phương pháp dùng nguyên lý QHð
Bellman và phương pháp duyệt thông thường.
tic
for i=m:-1:1
for j=1:n
[cost(i,j),index(i,j)]=min(reshape(data(i,j,:),1,n)+cost(i+1,:));
end
end
y(1)=1;
for k=2:m+1
y(k)=index(k-1,y(k-1));
end
h=line([1:m+1],y);
set(h,'LineWidth',4,'Color','r');
axis([1 m+1 1 n]);grid
toc
time1 = toc
pause
90
80
70
60
50
40
30
20
10
time1 =
0.1267
90
80
70
60
50
40
30
20
10
time2 =
21.4809
Hai phương pháp cho cùng kết quả nhưng rõ ràng phương pháp duyệt chậm hơn rất nhiều
so với phương pháp bellman (gấp 169.5 lần trong trường hợp >> Cmin
này)
Cmin =
>> time2/time1
55
ans =
ans =
55