You are on page 1of 7

Nguyên lý quy hoạch động Bellman

1. Nguyên lý chung của quy hoạch động Bellman

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.

2.Một ví dụ áp dụng nguyên lý Bellman:

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
1

1 3 3 8 6
0

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

Lưu Như Hòa-ĐKTĐ-KSTN-K50


Tìm đường đi sao cho tổng chi phí là thấp nhất.(chi phí là trọng số của 1 cạnh)
Gọi Qn ( s ) là chi phí nhỏ nhất vận chuyển từ thành phố s đến thành phố 10 (khi còn n giai
đoạn). I n ( s ) là thành phố mà từ thành phố s phải đi qua để có chi phí nhỏ nhất (khi còn n
giai đoạn)

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) I 3 ( 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:

function data=gendata(m,n) m=1000; % so hang


data=round(100*(rand(m,n,n)+0.1)); n=100; % so cot
data(1,:,:)=repmat(data(1,1,:),1,n); data = gendata(m,n);
for j=1:n index = zeros(m,n);
data(m,j,:)=repmat(data(m,j,1),1 cost = zeros(m+1,n);
,n);
end
Tìm đường đi tối ưu

Lưu Như Hòa-ĐKTĐ-KSTN-K50


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
Vẽ đoạn đường tối ưu:

Ta có kết quả đoạn đường tối ưu theo Bellman như sau:


y(1)=1;
for k=2:m+1
y(k)=index(k-1,y(k-1));
end
plot(y,'r')
axis([1 m+1 1 n]);grid

Quy dao toi uu bellman
100

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.

Lưu Như Hòa-ĐKTĐ-KSTN-K50


Để đo thời gian thực hiện lệnh ta dùng cặp lệnh: tic-toc:

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

Phuong phap Bellman
100

90

80

70

60

50

40

30

20

10

1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6

Kết quả là:


Elapsed time is 0.126656 seconds.

time1 =

0.1267
Lưu Như Hòa-ĐKTĐ-KSTN-K50
Lưu Như Hòa-ĐKTĐ-KSTN-K50
tic
T=ones(1,6);
Cmin=inf;
for p=1:n
for q=1:n
for r=1:n
for s=1:n
C=data(1,1,p)+data(2,p,q)+data(3,q,r)+data(4,r,s)+data(5,s,1);
if C<Cmin
Cmin=C; T=[1,p,q,r,s,1];
end
end
end
end
end
hold on
h1=line([1:m+1],T);
set(h1,'LineWidth',2,'Color','white');
hold off
toc
time2 = toc

Phuong phap duyet thong thuong
100

90

80

70

60

50

40

30

20

10

1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6

Lưu Như Hòa-ĐKTĐ-KSTN-K50


Kết quả là:
Elapsed time is 21.480805 seconds.

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 =
>> cost(1,1)
169.5532
ans =

55

Lưu Như Hòa-ĐKTĐ-KSTN-K50

You might also like