Tải bản đầy đủ (.doc) (17 trang)

Giao trinh TRÍ TUỆ NHÂN TẠO chương 3

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (141.94 KB, 17 trang )

Chương 3
PHÂN RÃ BÀI TỐN - TÌM KIẾM LỜI GIẢI
TRÊN ĐỒ THỊ VÀ/ HOẶC
1. Đặt vấn đề.
Trong chương 2, chúng ta đã nghiên cứu việc biểu diễn bài tốn thơng qua
các trạng thái và các tốn tử. Khi đó việc tìm lời giải của bài tốn được quy về
việc tìm đường đi trong không gian trạng thái. Trong chương này chúng ta sẽ
nghiên cứu một phương pháp luận khác để giải quyết vấn đề, dựa trên việc quy
vấn đề về các vấn đề con.
Ý tưởng chủ yếu là xuất phát từ bài toán ban đầu, tách ra các bài toán con,
q trình này tiếp tục đối với các bài tốn con cho đến khi gặp các bài toán sơ
cấp (bài tốn có lời giải ngay).
2
Ví dụ 1. Xét bài tốn tính tích phân ∫ x(ln x + x )dx .

Thơng thường để tính tích phân bất định, chúng ta thường sử dụng các
quy tắc tính tích phân: tích phân của tổng, quy tắc tích phân từng phần hay các
phép biến đổi v.v… để đưa tích phân cần tính về tích phân của các hàm số sơ
cấp mà chúng ta đã biết cách tính. Đối với tích phân trên, áp dụng quy tắc tích
phân của tổng ta đưa về hai tích phân ∫xlnxdx và tích phân ∫x3dx. Áp dụng quy
tắc tích phân từng phần ta đưa tích phân ∫xlnx về tích phân ∫xdx. Q trình trên
có thể biểu diễn bởi đồ thị trong Hình 1.
∫x(lnx+x2)dx
∫x3dx

∫xlnxdx

∫xdx

Hình 1.
90




Trong bài tốn tích phân, các tích phân cơ bản là các trạng thái kết thúc.
Ví dụ 2. Bài tốn tìm đường đi trên bản đồ giao thơng.
Bài tốn này đã được phát biểu như bài tốn tìm đương đi trong khơng
gian trạng thái, trong đó mỗi trạng thái ứng với một thành phố, mỗi toán tử ứng
với một con đường, nối thành phố này với thành phố khác. Bây giờ ta đưa ra
một cách bểu diễn khác dựa trên việc quy vấn đề về các vấn đề con.. Xét bản đồ
giao thơng giữa các thành phố trong Hình 2.
A

C

D

F

E
I

H

G
B

K

Hình 2.
Giả sử ta cần tìm đường đi từ thành phố A đến thành phố B. Có một con
sơng chảy qua hai thành phố E và G và có cầu qua sơng ở mỗi thành phố đó.

Như vậy mọi đường đi từ A đến B đều phải đi qua E hoặc G. Khi đó bài tốn
tìm đường đi từ A đến B được quy về một trong hai bài toán:
1) Bài tốn tìm đường đi từ A đến B qua E
2) Bài tốn tìm đường đi từ A đến B qua G
Mỗi một bài tốn trên lại có thể phân nhỏ như sau:
1) Bài tốn tìm đường đi từ A đến B qua E được quy về:
1.1. Tìm đường đi từ A đến E và
1.2. Tìm đường đi từ E đến B
91


2) Bài tốn tịm đường đi từ A đến B qua G được quy về:
2.1. Tìm đường đi từ A đến G và
2.2. Tìm đường đi từ G đến B
Tổng quát, từ bài toán P ta đưa về một trong các trường hợp:
- Đưa P về các bài toán tương đương: P1, P2,..., Pk
- Đưa P về các bài toán con: P1, P2,..., Pk
Phương pháp phân chia bài toán ban đầu như trên đã gặp trong lập trình truyền
thống với cách gọi “chia để trị” , “Modul hoá”.
2. Đồ thị VÀ/HOẶC:
Không gian trạng thái mô tả việc quy vấn đề về các vấn đề con có thể biểu
diễn dưới dạng đồ thị định hướng đặc biệt gọi là đồ thị và/hoặc. Đồ thị này được
xây dựng như sau:
Mỗi bài toán ứng với một đỉnh của đồ thị. Nếu có một toán tử quy bài
toán về các bài toán tương đương thì sẽ có các cung đi từ bài tốn xuất phát đến
các bài tốn tương đương đó. Nếu một tốn tử quy bài tốn về các bài tốn con
thì cũng có các cung nối từ bài tốn xuất phát đến các bài tốn con, ngồi ra giữa
các cung này cũng có đường nới với nhau.. Chẳng hạn, giả sử bài toán A được
đưa về hai bài táon tương đương A1 và A2. Bài toán A1 lại được quy về hai bài
tốn con B1 và B2, ta có biểu diễn như hình 3.

A

A1

B1

A2

B2

Hình 3
92


Một cách hình thức ta có thể định nghĩa đồ thị và/hoặc như sau:
Đồ thị G = (V, E) được gọi là đồ thị VÀ/HOẶC nếu ∀n ∈ V , T(n) hoặc
các bài toán con của n (n gọi là các đỉnh VÀ) hoặc là tập các bài toán tương
đương với n (n gọi là đỉnh HOẶC).
Cách biểu diễn như sau:
n
n1

n2 ...... nk

n được gọi là đỉnh HOẶC (n⇔ n1 ⇔...⇔ nk )
n

n1

n2 ...... nk


n được gọi là đỉnh VÀ (n⇔ n1∩...∩ nk )
Khi đó để giải bài tốn n ta phải tìm đồ thị con của G là một cây có gốc là
đỉnh xuất phát n sao cho mọi đỉnh trên đồ thị con này đưa về được các bài toán
sơ cấp (đỉnh kết thúc).
Nhận xét: Gọi

VA: tập các đỉnh VÀ
VO: tập các đỉnh HOẶC

• Nếu VA= ∅ ⇒ tìm lời giải trên đồ thị biểu diễn bằng khơng gian trạng thái
Khi đó:
- Bài tốn n được gọi là giải được nếu:
+ hoặc n là đỉnh kết thúc
+ hoặc T(n)={n1, n2,..., nk} và nếu n là đỉnh HOẶC ⇒ ∃i ∈ (1...k ) sao cho ni
giải được, ngược lại ni giải được ∀i = 1...k .
- Bài toán n được gọi là không giải được nếu:
93


+ hoặc n là đỉnh lá và n không phải là đỉnh kết thúc.
+ hoặc T(n)={n1, n2,..., nk}và nếu n là đỉnh HOẶC ⇒ ∃i ∈ (1...k ) sao cho nj
không giải được, ngược lại ni không giải được ∀i = 1...k .
• Để tìm lời giải của bài tốn khi được phân rã về đồ thị VÀ/HOẶC khơng
phải tìm đường đi mà phải đi tìm đồ thị con gọi là đồ thị con lời giải (hay cây
lời giải)
Cây lời giải là đồ thị con G’ của G thoả:
- Đỉnh gốc (xuất phát) n0 ∈ V '
- ∀n ∈ V ' , n giải được.
• Ta có sự tương quan:

Phân rã bài toán
Bài toán
Chuyển bài toán thành các bài toán con
Bài toán sơ cấp
Các bài toán con phụ
Các bài toán con độc lập
Giải bài tốn

Đồ thị VÀ/HOẶC
Đỉnh
Cung
Đỉnh cuối
Đỉnh VÀ
Đỉnh HOẶC
Tìm đồ thị con lời giải bài toán

3. Các phương pháp tìm kiếm lời giải trên đồ thị và/hoặc.
Sau khi lựa chọn mơ tả bài tốn và các tốn tử quy bài tốn về bài tốn
con, ta có thể xây dựng đồ thị Và/hoặc để giải quyết bài toán ban đầu hoặc
chứng tỏ tính khơng giải được của nó. Cũng như đồ thị trong khơng gian trạng
thái, đồ thị và/hoặc có thể cho dưới dạng tường minh hoặc không tường minh
trên cơ sở tốn tử xây dựng.
Các phương pháp tìm kiếm trên đồ thị và/hoặc khác nhau chủ yếu ở
phương pháp lựa chọn và sắp xếp đỉnh trước khi tháo chúng. Tương tự như
trong khơng gian trạng thái, ta cung có các phương pháp sau:
- Tìm kiếm theo chiều rộng.
94


- Tìm kiếm theo chiều sâu.

- Tìm kiếm cây lời giải có giá nhỏ nhất.
Các q trình này khác hẳn với các q trình lựa chọn trong khơng gian
trạng thái. Sự khác biệt chủ yếu là do việc kiểm tra tính kết thúc của q trình
tìm kiếm và các phương pháp sắp xếp và lựa chọn đỉnh để xét phức tạp hơn
nhiều.. Thay cho việc tìm kiếm đỉnh thoả mãn điều kện đích, chúng ta phải tiến
hành tìm kiếm đồ thị lời giải. Do đó, ở những thời điểm nhất định, ta phải kiểm
tra xem đỉnh đầu có giải được hay khơng, nếu đỉnh đầu giải được thì kết thúc
cơng việc, trong trường hợp ngược lại thì tiếp tục xét các nút. Nếu đỉnh đang xét
không phải là đỉnh kết thúc và nó là đỉnh lá, tức là đỉnh khơng giải được. Lúc
này phải kiểm tra đỉnh đàu có phải khơng giải được hay khơng, nếu đúng thì
dừng, ngược lại, tiếp tục tìm kiếm.
Trước khi tìm kiếm lời giải trong đồ thị VÀ/HOẶC, chúng ta xây dựng
các hàm kiểm tra một đỉnh n nào đó tại thời điểm đang xét có giải được hay
khơng giải được khơng?
Function giaiduoc(n):boolean;
Begin
If <n so cap> then
giaiduoc:=true
else
if T(n)<>null then
if T(n)⊂VA then
giaiduoc = and ( giaiduoc (m))
m∈T ( n )

else
giaiduoc = or ( giaiduoc (m))
m∈T ( n )

else
giaiduoc:=false;

95


End;
Function khonggd(n):boolean;
Begin
If T(n)<>null then
if T(n)⊂VA then
khonggd = or (khonggd ( m))
m∈T ( n )

else
khonggd = and (khonggd (m))
m∈T ( n )

else
if <T(n) khong so cap> then
khonggd:=true
else
khonggd:=false;
End;
3.1. Phương pháp tìm kiếm chiều rộng:
Procedure TKR;
Begin
Push(n0, MO);
While MO<>null do
begin
n:=pop(MO);
push(DONG, n);
if T(n)<>null then

for m ∈ T (n) do
begin
push(m, MO);
96


if T(m)=null then
if giaiduoc(m) then
if giaiduoc(n0) then
exit
else
for k∈MO do
if giaiduoc(k) then
MO:=MO-[k]
Else
If khonggd(m) then
If khonggd(n0) then
Exit
Else
For k∈MO do
if khonggd(k) then
MO:=MO-[k]
end;
end;
write(‘Khong ket luan’);
End;
• Nhận xét:
Nếu tồn tại cây lời giải thì thủ tục tìm kiếm rộng sẽ dừng và cho kết quả là
cây lời giải có độ cao nhỏ nhất.
Ví dụ.


Xét đồ thị Hình 3.
A

B
E*

C

F

G

D
H*

I
97


J
M*

K

L*

N
O*


Hình 3

Các đỉnh kết thúc là các đỉnh đánh dấu *. Q trình tìm kiếm lời giải của đị thị
trên bằng phương pháp tìm kiếm rộng có thể trình bày ở bảng sau
n

T(n)

MO
A
BCD
CDF
DFG
FGI
GIJ
IJ
Dừng

A
B, C, D
B
E*, F
C
G
D
H*, I
F
J
G
K0

I
L*
Cây lời giải ở Hình 4.

DONG
A
AB
ABC
ABCD
ABCDF
ABCDFG

A
D
H*

I

L*

Hình 4
3.2. Tìm kiếm theo chiều sâu:
Hồn tồn tương tự tìm kiếm theo chiều rộng, chỉ khác thứ tự lấy các
đỉnh trong danh sách MO ra xét. Ở đây MO được truy xuất theo nguyên tắc
LIFO.
Ví dụ. Xét đồ thị ở Hình 5.
A
98



B
D
H*

I*

C
E

J*

F*

K*

G
L*

M*

Hình 5.
Quá trình tìm theo chiều sâu tiến hành như sau:
n

T(n)

MO

DONG


A
A

B, C

BC

C

F* , G

BG

G

L*, M* : giải được ⇒ A giải được

Cây lời giải ở Hình 6.
A
C
F*

G

L*

M*
Hình 6.

99



3.3. Tìm kiếm cây lời giải cực tiểu:
Cây G=(V, E) biểu diễn sự phân rã của bài toán gốc n0.
Ứng với mỗi phép chuyển bài toán n sang bài toán v tốn chi phí c(u,v).
R+

c: E
(u,v)

c(u,v)

Vấn đề đặt ra tìm cây lời giải có tổng chi phí bé nhất.
Đối với không gian trạng thái, ta đã sử dụng hàm đánh giá để sắp thứ tự các nút
trong MO trước khi xử lý và hàm h(n) là giá của đường đi tối ưu từ đỉnh
n→DICH. Trong cây VÀ/HOẶC đó chính là khái niệm giá tối ưu của cây lời
giải với gốc là đỉnh n đã cho.
Đối với đỉnh n∈V, giá của n được tính phụ thuộc vào quy ước chọn giá chung
của đồ thị. Có 2 loại giá: giá cực đại (max) và giá tổng cộng (∑).
Định nghĩa giá tối ưu của cây lời giải có gốc n như sau:
-

Nếu n là đỉnh kết thúc thì h(n) = 0

-

Nếu n khơng phải là đỉnh kết thúc và n là đỉnh hoặc có tập T(n)
= {n1,. . .,nk} khác rỗng thì h(n) = min(c(n,ni)+h(ni)).

-


Nếu n không phải là đỉnh kết thúc và n là đỉnh và có tập T(n) =
{n1,. . .,nk} khác rỗng thì :
k

+ Đối với giá tổng cộng

h(n) = ∑ (c( n, n i ) + h(n i ))

+ Đối với giá cực đại

h(n) = ΜΑΧ (c (n, n i ) + h(n i ))

i =1

- h(n) không xác định đối với những đỉnh không giải được.

100


Tương tự như trong không gian trạng thái ta xác đinh ước lượng của h là h 0 tại
các đỉnh không phải là đỉnh không giải được.. Cây lời giải được xây dựng dần
dần trong quá trình mở rộng cây lựa chọn, tại mỗi thời điểm các nút lá của nó
thuộc một trong ba dạng sau:
- Các đỉnh kết thúc.
- Các đỉnh lá không phải là đỉnh kết thúc.
- Các đỉnh chưa được xử lý.
Trong cây tìm kiếm, ở mỗi bước có thể chứa một tập các cây con có gốc n 0 sao
cho chúng có thể trở thành phần trên của cây lời giải đầy đủ (cũng giống như
các đường đi từ đỉnh n0 đến các đỉnh trong danh sách MO trong giải thuật tìm

kiếm trên đồ thị biểu diễn bài tốn trong khơng gian trạng thái ).
Ta gọi các cây này là cây lời giải tiềm tàng gốc n 0. Như vậy bài tốn tìm kiếm
cây lời giải cực tiểu có thể đưa về hai bài tốn con:
Bài toán 1. Xác định ước lượng h0(n)
1) n là đỉnh lá
- Nếu n là đỉnh kết túc thì h0(n) = 0
- Nếu n khơng phải là đỉnh kết thúc thì h0(n) khơng xác đinh (có thể gán
giá trị ∞ )
- Nếu n chưa được xử lý thì h0(n) nhận một giá trị ước lưọng dựa trên
thơng tin về bài tốn (thưịng tham khảo ý kiến chun gia)
2) n khơng phải là đỉnh lá, T(n) = {n1,…,nk}
- Nếu n là đỉnh Hoặc thì h0(n) = min(c(n,ni)+h(ni))
- Nếu n là đỉnh Và thì
k

- Đối với giá tổng cộng

h 0 (n) = ∑ (c (n, ni ) + h 0 (n i ))
i =1

101


- Đối với giá cực đại

h0(n) = Max(c(n,ni)+h0(ni))

Bài toán 2. Xây dựng cây lời giải tiềm tàng G’ mô tả q trình chuyển bài tốn
n0 về bài tốn n. Gọi G’ = (V’, E’) là đồ thị con của G với tập đỉnh V” xác định
như sau:

- n0 ∈ V’
- Với mỗi n ∈ V’ có các đỉnh con n1,…, nk. Nếu n là đỉnh hoặc thì
chọn đỉnh con ni vào V’ sao cho c(n,ni) + h0(ni) nhỏ nhất và
khonggd(ni) = false. Nếu n là đỉnh và thì chọn tất cả các đỉnh n i
vào V’ nếu khonggd(ni) = false với mọi i.
Thuật toán.
Input:
Cây và hoặc G = (V,E) với gốc n0.
Giá trị ước lương ban đầu h0.
Tập đỉnh kết thúc.
c: E  R+ và laọi chi phí (tổng cơng hoặc cực đại)
Output:
Cây lời giải tối ưu.
Method:
push(MO,n0);
while MO <> null do
begin
Xây dựng cây tiềm tàng G’;
n:= pop(MO ∩Lá(G’);
Push(DONG,n);
102


if n là đỉnh kết thúc then
begin
if giaiduoc(n0) then
exit; { Cây lời giải là G’}
for k ∈MO do
if giaiduoc(k) then
MO := MO - {k};

end
else
if T(n) <> null then
for m ∈ T(n) do
begin
push(MO,m);
Tính lại h0(m)
end
else
if khonggd(n) then
begin
if khonggd(n0) then
exit;
for k ∈ MO do
if khonggd(k) then
MO:= MO - {k};
103


for m ∈ DONG do
Tính lại h0(m)
end;
writeln(‘khong co loi giai’);
end;
4. Cây tìm kiếm và các đấu thủ.
Trong nhiều trị chơi trên máy tính có thể sinh ra các cây ứng với các
nước đi của đấu thủ. Đặc thù của loại trò chơi này là chúng thể hiện sụ luân
phiên giữa hai đấu thủ. Việc chọn các nước đi cho mỗi đấu thủ tương ứng với
việc tìm kiếm cây. Để quyết định một trong những lựa chọn có thể được, người
ta phải nhớ nhiều tình huống của bài tốn. Tuy nhiên không thể lưu trữ quá

nhiều thông tin và cũng không xử lý tất cả trạng thái của bài toán được. Do vậy
người ta có thể dùng một chiến thuật phù hợp, chỉ quyết định trên tập tình huống
hạn chế.
4.1. Thủ tục minimax.
Xét trò chơi với hai đấu thủ Max và Min, Max tìm cách làm cực đại giá trị
hàm ước lượng thông qua việc xác định gá trị hàm ước lượng ở mỗi nước đi có
thể và chọn nước đi tương ứng với giá trị lớn nhất, tiếp theo đó đối thủ Min tìm
cách làm cực tiểu giá trị ước lượng này.
Diễn đạt theo ngôn ngữ đồ thị Và/Hoặc, Mỗi đỉnh tương ứng với nước đi
của Max, giá trị của đỉnh này sẽ lấy giá trị cực đại của các giá trị của các đỉnh
con và đỉnh này quy ước gọi là đỉnh Hoặc. Một đỉnh tương ứng với nước đi của
Min sẽ lấy giá trị cực tiểu trong số các giá trị đối với các đỉnh con của nó và
đỉnh này quy ước gọi là đỉnh loại Và.
Ví dụ. Trị chơi caro trên bảng ơ vng. Đấu thủ Max đặt các dấu X, đấu thủ
Min đặt dấu O. Ta xét ước lượng c(p) đối với mỗi thế cờ p như sau:
104


c(p) = (số dòng, số cột, số đường chéo còn mở đới với Max) –
(số dòng, số cột, số đường chéo còn mở đối với min)
Giả sử ta hạn chế kích thước 3x3 và ở mỗi nước đi, các đấu thủ tính trước
hai nước. Nếu đấu thủ Max đi trước độc giả có thể kiểm tra, nước đi đầu tiên của
Max sẽ là:
X

4.2. Thủ tục Alpha – Beta
Các giá trị ước lượng phát sinh tương ứng với các đỉnh Và, Hoặc được gọi là các
α-giá trị và β-giá trị tương ứng. Thủ tục alpha-beta bắt đầu từ nút gốc với giá trị
alpha là -∞ và beta là +∞ . Thủ tục alpha-beta gọi đệ quy với dãy số giữa alpha
và beta. Để thực hiện tìm kiếm minimax bằng thủ tục alpha – beta, có các bước sau:

1) Nếu mức của cây là gốc, lấy giá trị alpha là -∞ và gia trị beta là +∞.
2) Nếu đã đến bước kết thúc tìm kiếm, tính giá trị hàm ước lượng của vị trí hiện
tại cho đấu thủ tương ứng. Cho ra kết quả.
3) Nếu mức ứng với đấu thủ min:
i)

Cho đến khi các nút con được kiểm tra bằng thủ tục alpha – beta hoặc
cho đến khi alpha >= beta, thực hiện các bước sau:
+ Dùng thủ tục alpha – beta với các giá trị alpha – beta hiện có trên các
nút con. Ghi lại giá trị do thủ tục đưa ra.
+ So sánh giá trị thu được với beta, nếu giá trị thu được nhỏ hơn beta
thì cho beta nhận giá trị này.

ii)

Cho ra giá trị beta.

4) Ngược lại, mức này ứng với đấu thủ beta, thực hiện:

105


i)

Cho đến khi các nút con được kiểm tra bằng thủ tục alpha – beta hoặc
cho đến khi alpha >= beta, thực hiện các bước sau:
+ Dùng thủ tục alpha – beta với các giá trị alpha – beta hiện có trên các
nút con. Ghi lại giá trị do thủ tục đưa ra.
+ So sánh giá trị thu được với alpha, nếu giá trị thu được lớn hơn alpha
thì cho alpha nhận giá trị này.


ii)

Cho ra giá trị alpha.

106



×