Tải bản đầy đủ (.pdf) (23 trang)

Search Techniques – Những kỹ thuật tìm kiếm

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 (305.16 KB, 23 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
KHOA CÔNG NGHỆ THÔNG TIN
@&?
Bµi tiÓu luËn
M¤N HäC: hÖ chuyªn gia
§Ò 6:
Search Techniques – Những kỹ thuật tìm kiếm
Giáo viên hướng dẫn : Nguyễn Thị Hải Năng
Sinh viên thực hiện : Bùi Văn Chung
Đỗ Xuân Cường
Phùng Thế Bốn
Phạm Ngọc Lập
Nguyễn Văn Huấn
Lớp : TK6LC1
Hưng Yên, tháng 12 năm 2009
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
Lời nói đầu
Hệ chuyên gia là một hệ thống tin học có thể mô phỏng (emulates) năng lực
quyết đoán (decision) và hành động (making abilily) của một chuyên gia (con người).
Hệ chuyên gia là một trong những lĩnh vực ứng dụng của trí tuệ nhân tạo (Artificial
Intelligence). Dạng phổ biến nhất của hệ chuyên gia là một chương trình gồm một tập
luật phân tích thông tin (thường được cung cấp bởi người sử dụng hệ thống) về một
lớp vấn đề cụ thể, cũng như đưa ra các phân tích về các vấn đề đó, và tùy theo thiết kế
chương trình mà đưa lời khuyên về trình tự các hành động cần thực hiện để giải quyết
vấn đề. Đây là một hệ thống sử dụng các khả năng lập luận để đạt tới các kết luận.
Đề tài của chúng em là Đề 6: Search Techniques - Những kỹ thuật tìm kiếm
Dưới đây chúng em có phần Tiếng Anh và phần dịch sang tiếng Việt.
Tuy nhiên do thời gian có hạn nên chúng em dịch theo ý hiểu và còn có nhiều
chỗ có thể chưa hợp lí. Chúng em rất mong được cô giáo xem và nhận xét để bài tiểu
luận của chúng em được hoàn thiện hơn nữa.


Chúng em xin chân thành cảm ơn!


Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
20. Những kỹ thuật tìm kiếm.
Trong chương này, chúng tôi tóm tắt những kỹ thuật tìm kiếm AI cổ điển. Phần
đầu tiên nói về Frameworks trạng thái dịch chuyển cho việc giải quyết những vấn đề
về đồ thị state-space của hạng. Phần thứ hai nói về thuật toán loại bỏ alpha-beta cho
cây tìm kiếm.
20.1 Đồ thị tìm kiếm state-space
Đồ thị state-space được sử dụng để biểu diễn những vấn đề. Mỗi nút của đồ
thị là mỗi trạng thái của vấn đề. Và cạnh giữa các nút nếu nó là một quy tắc chuyển
trạng thái, ngoài ra còn được gọi là một phiên, sự chuyển trạng thái vào nút tiếp theo.
Để hiểu được nghĩa của vấn đề ta sẽ tìm đường đi từ trạng thái ban đầu tới trạng
thái cần tìm bằng việc thêm vào một chuỗi FrameWork của phiên. Phần 20.1 là một
FrameWork cho việc giải quyết vấn đề nghiên cứu đồ thị state-space, sử dụng nghiên
cứu như được trình bày ở phần 14.2.
Không có sự dịch chuyển đại diện cho trạng thái sự dịch chuyển được thể hiện
bởi một vị từ nhị phân move(State,Move). Vị từ update(state,move,state1) thêm move
vào state được statel. Nó thường dễ dàng kết hợp thủ tục dịch chuyển và thủ tục cập
nhật. Chúng ta cần đặt riêng biệt hai thủ tục để hiểu rõ hơn và duy trì tính linh động có
thể có ở quá trình thực hiện.
Quá trình di chuyển sẽ được kiểm tra bởi vị từ legal(State), vị từ đó kiểm tra
nếu như State thỏa mãn ràng buộc của vấn đề. Chương trình giữa History của những
trạng thái sử dụng solve_dfs(State,History,Moves) ← Move là chuỗi di chuyển trạng
thái cuối từ State, History chứa trạng thái trước.
solve_dfs(State,History,[ ]) ← final_state(State).

solve_dfs(State,History,[Move|Moves]) ← move(State,Move),
update(State,Move,Moves),
legal(State1),
not member(State1,History),
slove_dfs(State1,[State1|
History],Moves).
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
Quá trình kiểm tra FrameWork
test_dfs(Problem, Moves) ← initial_state(Problem, State),
solve_dfs(State, [State], Moves).
Để ngăn cản đường vòng. Kiểm tra đường vòng sẽ không xảy ra nếu như phát
hiện thấy. Nếu trạng thái mới xuất hiện trong trạng thái History. Chuỗi dịch chuyển
dẫn từ tạng thái ban đầu đến trạng thái kết thúc được xây dựng ở luận cứ thứ 3 của
slove_dfs/3.
Để giải quyết vân đề sử dụng FrameWork, chương trình phải quyết định trạng
thái trình bày như thế nào, và thủ tục move, update, legal. Sự trình bày hợp lý sẽ thu
được hiệu quả cao của FrameWork này.
Chúng ta sẽ sử dụng FrameWork để giải quyết vấn đề về chó sói, dê, cải
bắp. Một người nông dân với một con chó sói, một con dê, và cải bắp ở bên trái dòng
sông. Người nông dân có một cái thuyền có thể chở một trong ba thứ, và anh ta phải
vận chuyển cả ba sang bên phải dòng sông. Vấn đề là anh ta không thể di chuyển chó
và dê cung chuyến (chó sói sẽ ăn thịt dê), hoặc dê và cải bắp ( dê thích ăn cải). Anh ta
phải chở tất cả một lúc thì nặng và không được làm mất sự cân bằng nếu để lại một vật
gì đó. Trạng thái được đưa ra bởi một triple, wgc(B, L, R), ở đây B là vị trí của thuyền
(trái hoặc phải), L là danh sách vật ở bân trái dòng sông và R là danh sách những vật ở
bên phải dòng sông. Trạng thái xuất phát và kết thúc là wgc(left,[wolf, goat,
cabbage],[ ]) và wgc(right,[ ], [wolf, goat, cabbage]), lần lượt theo thứ tự. Trong

thực tế, nó không cần thiết phải chú ý tới vật của cả hai bên trái và phải sông. Vật bên
trái sông có thể được suy ra từ những vật ở bên phải dòng sông, và có thể thay thế.
Nhưng cả hai phải được chuyển hết. Nó thuận tiện cho việc kiểm tra đường vòng, chó
sói sẽ được đưa đi trước dê, cả hai sẽ được đưa đi trước cải bắp nếu như chúng được
đưa đi trên cùng một bờ sông.
Đưa vật tới bờ có thể được chỉ ra bởi cargo. Trường hợp khi không có gì đưa đi bởi
cargo alone. Hoạt động của member được phép mô tả chi tiết trong tất cả sự dịch
chuyển trong 3 mệnh đề được đưa ra ở chương 20.2: di chuyển cái gì đó từ bên tái bờ
sông, chuyển cái gì đó từ bên phải dòng sông, hoặc sự chèo thuyền của người nông
dân.
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
Với mỗi sự dịch chuyển này, việc cập nhật thủ tục phải rõ ràng, cụ thể, sự thay
đổi vị trí của thuyền( bởi update_boat2) và cập nhật bờ sông ( bởi update_banks). Sử
dụng vị từ Select cho phép miêu tả cụ thể tiến trình cập nhật. Thủ tục insert cần thiết
cho người sử dụng, là điều kiện thuận lợi để kiểm tra nếu một trạng thái đã sử dụng
trước đó. Nó chứa đựng tất cả những trường hợp có thể thêm vào ngăn chứa.
Cuối cùng, phương thúc thử nghiệm cho tính hợp pháp, giảm ngăn chứa. Chó
sói và dê không được trên cùng bờ sông ngoài người nông dân, hoặc không thể để dê
và cải bắp trên cùng bờ sông. Phần 20.2, cũng tương tự chương 20.1, giải quyết vấn đề
Wolf, goat, và cabbage.
Chúng tôi sử dung FrameWork cho việc giải quyết vấn đề tìm kiếm cổ điển
khác ví dụ như bài toán vui_ vấn đề những bình nước. Có hai bình có thể chứa 8 và 5
lít nước không có vạch dấu nào, và vấn đề là để đo chính xác 4 lít từ một bể có chứa
20 lít (hoặc một số khác lớn hơn).
Những thao tác đổ đầy tràn một cái từ thùng to, làm trống rỗng một cái bình
vào trong thùng to, và sự thay đổi từ bình này bình đến bình khác cho đến mọi cái bình
trống rỗng hoàn toàn, hay cái bình khác đầy. Vấn đề được miêu tả trong Hình 20.1.

Vấn đề có thể được khái quát hóa tới N những cái bình của khả năng C1, …,
CN. Vấn đề sẽ đo một thể tích V, khác với mọi C1 nhưng ít hơn là lớn nhất. Có một
giải pháp nếu V là một nhiều của ước số chung lớn nhất của C1. Ví dụ đặc biệt chúng
ta có thể giải quyết được bởi vì 4 là một nhiều của ước số chung lớn nhất của 8 và 5.
Phát biểu cho wolf, goat và cabbage là một cấu trúc wgc(Boat, Left, Right), Left
là danh sách của những thứ ở trên bờ trái của sông, và Right là danh sách của những
thứ ở trên bờ phải.
initial_state(wgc,wgc(left,[wolf, goat, cabbage],[ ])).
final_state(wgc(righ , [ ], [wolf, goat, cabbage] )).
move(wgc(left, L, R), Cargo) ← member(Cargo, L).
move(wgc(right, L, R), Cargo) ← member(Cargo, R).
move(wgc(B, L, R), alone).
update(wgc(B, L, R), Cargo, wgc(B1, L1, R1)).
update_boat(B, B1), update_banks( Cargo,B, L, R, L1, R1).
update_boat(left, right).
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
update_boat( right, left).
update_banks(alone, B, L, R, L, R).
update_banks(Cargo,left, L, R, L1, R1) ← select(Cargo, L, L1), insert(Cargo,R, R1).
update_banks(Cargo,right, L, R, L1, R1) ← select(Cargo, R, R1), insert(Cargo,L, L1).
insert(X,[ Y | Y
S
], [X, Y | Y
S
]) ← precedes(X, Y).
insert(X,[ Y | Y
S

], [ Y | Z
S
]) ← precedes(Y, X), insert(X, Y
S
, Z
S
).
insert(X, [ ], [X]).
precedes(wolf, X).
precedes( X, cabbage).
legal(wgc(left, L, R)) ← not illegal(R).
legal(wgc(right, L, R)) ← not illegal(L).
illegal(Bank) ← member(wolf, Bank), member(goat, Bank).
illegal(Bank) ← member(goat, Bank), member(cabbage, Bank).
select(X, X
S
, Y
S
) ← See Program 3.19
Chương trình 20.2. Giải quyết vấn đề wolf, goat, and cabbage.
8 litres 5 litres 4 litres
Hình 20.1. Vấn đề những bình nước
Vấn đề đặc biệt chúng tôi giải quyết được hai bình của khả năng chuyên quyền,
nhưng cách tiếp cận ngay lập tức khái quát hóa tới bất kỳ số lượng bình. Chương trình
này giả định hai sự kiện trong cơ sở dữ liệu, capacity(I, CI), cho I cân bằng với 1 và
2. Trạng thái là một cấu trúc jugs(V1, V2), ở đâu V1 và V2 đại diện cho những thể tích
của nước hiện thời trong hai cái bình. Trạng thái ban đầu jugs(0,0) và trạng thái cuối
cùng mong muốn hay jugs(0, X) or jugs(X, 0), trong đó X là thể tích mong muốn. Thật
ra, trạng thái cuối cùng duy nhất sẽ được chỉ rõ là thể tích mong muốn trong cái bình
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn

Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
lớn hơn.
Dữ liệu để giải quyết vấn đề trên với chương trình 20.1 được cho trong chương
trình 20.3. Có các bước: việc hoàn thành, làm trống rỗng mỗi cái bình, chuyển lượng
nước từ cái bình này sang bình khác. Một thực tế mẫu đó là để hoàn thành cho cái
bình đầu tiên move(iugs(V1, V2), fill(1)). Trạng thái được đưa để rõ ràng cho phép
dữ liệu để cùng tồn tại với vấn đề khác giải quyết dữ liệu như vậy như trong Chương
trình 20.2. Những động tác làm trống rỗng một cái bình. Thủ tục cập nhật có liên hệ
với bốn bước đơn giản, trong khi thao tác chuyển dịch có hai trường hợp. Nếu thể tích
tổng trong những cái bình là ít hơn thể tích cái bình đầy. Đây được đạt được bởi vị từ
adjust/4. Chú ý rằng thử cho đúng bình thường bởi vì tất cả các trạng thái có thể với
tới được đều đúng.
Đa số những vấn đề thú vị có một sự tìm kiếm quá lớn. Không gian sẽ được tìm
kiếm toàn diện bởi một chương trình thích 20.1. Một sự cải tiến:
initial_state(jugs, jugs(0,0)).
final_state(jugs(4, V)).
final_state(jugs(V, 4)).
move(jugs(V1, V2), fill(1)).
move(jugs(V1, V2), fill(2)).
move(jugs(V1, V2), empty(1)) ← V1 > 0.
move(jugs(V1, V2), empty(2)) ← V2 > 0.
move(jugs(V1, V2), transfer(2, 1)).
move(jugs(V1, V2), transfer(1, 2)).
update(jugs(V1, V2), fill(1), jugs(C1, C2)) ← capacity(1, C1).
update(jugs(V1, V2), fill(2), jugs(C1, C2)) ← capacity(2, C2).
update(jugs(V1, V2), empty(1), jugs(0, V2)).
update(jugs(V1, V2), empty(2), jugs(V1, 0)).
update(jugs(V1, V2), transfer(2, 1), jugs(W1, W2)) ←

capacity(2, C2), Liquid is V1 + V2,
excess is Liquid – C2,
adjust(Liquid, Excess, W2, W1).
adjust(Liquid, Excess, Liquid, 0) ← excess ≤ 0.
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
adjust(Liquid, Excess, V, Excess) ←excess >0, V is Liquid – Excess.
legal(jugs(V1, V2)).
capacity(1,8).
capacity(2,5).
Chương trình 20.3 Giải quyết vấn đề thùng nước
Để đưa kiến thức thêm vào moves (Cho phép). Giải pháp tới vấn đề bình có thể
được tìm thấy bằng việc hoàn thành một trong những cái bình bất cứ khi nào khả dĩ.
và cách khác chuyển nội dung (của) cái bình đầy đối với hiện thân bình làm trống
rỗng. Như vậy thay vì sáu sự chuyển động chỉ có ba nhu cầu là specifiel, và tìm kiếm
sẽ trực tiếp hơn, bởi vì chỉ có một chuyển động sẽ là E hợp với bất kỳ trạng thái đã cho
nào. Điều này có thể không đưa ra một giải pháp tối ưu nếu jug sai để không ngừng
được lấp đầy được chọn. Việc phát triển điểm futher này, ba sự chuyển động có thể
được liền lại vào trong một sự chuyển động mức bậc cao fill_and_transfer. Cách (mưu
kế) này hoàn thành cho một bình và chuyển đổi đều nội dung (của) nó tới cái bình
khác, làm cạn Cái bình khác như cần thiết. Mã để truyền Từ Lớn hơn đối với cái bình
smaller
Move(jugs(V1, V2 ), fill_and_transfer(1)).
Update(jugs(V1,V2),fill_and_transfer(1), jugs (0,V))
Capacity (1,C1 )
Capacity (2 C2) ,
C1> C2 ,
V is (C1+V2) mod C2 .

Sử dụng chương trình này, chúng tôi làm cần chỉ có ba đầy và những thao tác
chuyển đổi để giải quyết vấn đề trong hình 20.1
Thêm những những phương tiện kiến thức miền như vậy thay đổi mô tả bài
toán emtirely và cấu thành lập trình, mặc dù tại một mức khác.
Khả năng khác (cho) sự cải tiến (của) sự thực hiện tìm kiếm, được điều tra bởi
nghiên cứu sớm ở Al, là sự chỉ đạo phát hiện. Một tổng quan framework, dựa vào một
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
sự lựa chọn rõ ràng hơn của trạng thái tiếp theo để tìm kiếm trong những trạng thái đồ
thị không gian, được sử dụng. Sự lựa chọn phụ thuộc vào những điểm số được gán đối
với positions. Điểm, được tính toán Bởi Một evaluation function, là một biện pháp
(của) lòng tốt (của) vị trí. Sự tìm chiều sâu có thể được coi là một trường hợp đặc biệt
(của) sự tìm kiếm sử dụng một chức năng đánh giá mà có giá trị là khoảng cách (của)
trạng thái curren, trong khi sự tìm chiều rộng sử dụng một chức năng đánh giá mà là
sự đảo (của) khoảng cách đó.
Chúng tôi cho thấy rằng hai tìm kiếm kỹ thuật mà sử dụng một chức năng đánh
giá rõ ràng leo và sự tìm kiếm đầu tiên tốt nhất. Trong sự chảy, vị từ value(State, Giá
trị) Là một chức năng Đánh giá. Sự leo Ngọn đồi là một sự khái quát của sự tìm chiều
sâu nơi suc- cessor vị trí với những điểm cao nhất được lựa chọn hơn là cực tả Một lựa
chọn bởi prolog. Khung giải quyết vấn đề (của) chương trình 20.1 (thì) dễ dàng được
làm thích nghi.Sự chuyển động leo ngọn đồi phát sinh mọi trạng thái mà có thể được
với lấy từ trạng thái curren trong một sự chuyển động đơn, và ra lệnh họ trong việc
giảm bớt mệnh lệnh đối với những giá trị được tính toán bởi chức năng đánh giá. Vị từ
evaluate_and_order(Moves, State, MVs) xác định quan hệ điều đó MVs, một danh
sách có trật tự (của) những bộ dữ liệu giá trị chuyển động tương xứng với danh sách
(của) những sự chuyển động Moves một Trạng thái Trạng thái. Chương trình toàn bộ
được cho như Lập trình 20.4.
Để trình diễn hành vi (của) chương trình chúng tôi sử dụng cái cây ví dụ (của)

chương trình 14.8 tăng lên với một giá trị (cho) mỗi sự chuyển động. (Cái) này được
đưa cho như Chương trình 20.5, kết hợp với Chương trình 20.5 và những định nghĩa
thích hợp của sự cập nhật và hợp pháp tìm kiếm cái cây trong mệnh lệnh một, D, J.
Chương trình (thì) dễ dàng được kiểm tra trên con chó sói, con dê, và vấn đề cải bắp
sử dụng trong khi sự đánh giá vận hành số lượng những kẻ chiếm đóng trên ngân hàng
đúng.
Lập trình 20.4 chứa đựng một tính toán lặp lại. Trạng thái được đạt đến bởi sự
Chuyển động được tính toán để đạt đến một giá trị (cho) sự Chuyển động và sau đó
được tính toán lại bởi sự cập nhật. Sự tính toán lại có thể được tránh bằng việc thêm
một lý lẽ thêm vào sự chuyển động và giữ trạng thái cùng với sự chuyển động và giá
trị như những sự chuyển động được ra lệnh này. Khả năng khác Nếu sẽ có nhiều sự
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
tính toán của cùng sự chuyển động đang sử dụng một chức năng viết tắt. Cái gì (thì)
hiệu quả nhất phương pháp phụ thuộc vào vấn đề đặc biệt. (Cho) những vấn đề nơi thủ
tục cập nhật đơn giản, Giới thiệu ý định Tốt nhất.
Sự leo Ngọn đồi là một kỹ thuật tốt khi có chỉ có một Ngọn đồi và chức năng
đánh giá là một chỉ định tốt (của) sự tiến bộ. Thực chất, nó đưa một địa phương quan
sát đồ thị không gian trạng thái, làm quyết định trên ở đâu (kẻ) tiếp theo đi sự tìm
kiếm trên cơ sở của trạng thái hiện thời một mình. Một giải pháp tìm kiếm phương
pháp, gọi best-first search, cầm lấy một cái nhìn toàn cầu tại không gian trạng thái đầy
đủ. Trạng thái tốt nhất từ tất cả Đó Hiện thời $Un được tìm kiếm được lựa chọns.
Lập trình 20.6 (cho) sự tìm kiếm đầu tiên tốt nhất là một sự khái quát (của) sự
tìm chiều rộng đã cho trong Mục(khu vực) 16.2. Một biên giới bị giữ khi (cho) sự tìm
chiều rộng, mà được cập nhật như sự tìm kiếm tiến triển. Tại mỗi atage, sự chuyển
động sẵn có tốt thứ tiếp theo được làm. Chúng tôi làm cho mã càng tương tự càng tốt
để Lập trình là 20.4 (cho) ngọn đồi cllimbing cho phép sự so sánh
Solve_hill_climb(State,History,Moves)

Moves là chuỗi (của) những sự chuyển động để đạt đến trạng thái cuối cùng quảng cáo
esired từ dòng State, where History là một danh sách (của) trạng thái được đến thăm
trước đó.
Solve_hill_climb(State,History,[])
Final_state(State).
Solve_hill_climb(State,History,[Move|Moves])
Hill_climb(State,Move),
Update(State,Move,State1),
Legal(State1),
Not member(State1,History),
Solve_hill_climb(State1,[State1|History],Moves).
Hill_climb(State,Move)
Findall(M,move(State,M),Move),
Evaluate_and_order(Moves,State,[],MVs),
Member((Move,Value),MVs).
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
Evaluate_and_order(Moves,State,SoFar,OrderedMVs)
Tất cả Moves từ dòng State được ước lượng và ra lệnh như OrderedMVs. SoFar
Evaluate_and_order(Move| Move], state, MVs1, OrderedMVs).
Update(State,Move,State1),
Value(State1,Value),
Insert((Move,Value),MVs,MVs1)
Evaluate_and_order(Moves, State, MVs,MVs1).
Insert(MV,[],[MV]).
Insert((M,V),[M1,V1)|MVs],[(M,V),(M1,V1)|MVs])
V>=V1.
Insert((M,V),[M1,v1)|MVs},[(M1,V1)|MVs1])

V<V1, insert((M,V),MVs,MVs1).
Testing the framework
Test_hill_climb(problem,Moves)
Initial_state(Problem,State),
Slove_hill_climb(State,[State],Moves)
Programe 20.4 Khung leo Ngọn đồi (cho) sự giải quyết vấn đề
Initial_state(free,a). value(a,0). Final_state(j).
Move(a,b). value(b,1). Move(c,g). value(g,6).
Move(a,c). value(c,5). Move(d,j). value(j,9).
Move(a,d). value(d,7). Move(e,k). value(k,1).
Move(a,e). value(e,2). Move(f,h). value(h,3).
Move(c,f). value(f,4). Move(f,i). value(i,2).
Chương trình 20.5. Kiểm tra dữ liệu
Tại mỗi giai đoạn (của) sự tìm kiếm, có một sự đông cứng của những sự
chuyển động để xem xét hơn là một bài hát Một. Những tên vị từ Số nhiều, chẳng hạn
updates and legals, indicate. Như vậy legals( states, states1)lọc một sự đông cứng của
những trạng thái người kế nghiệp, sự kiểm tra được cho phép bởi những sự ràng buộc
(của) vấn đề bất cứ thứ nào mà. Một sự bất lợi (của) sự tìm chiều rộng ( Và từ đây sự
tìm kiếm đầu tiên tốt nhất (và sự tìm kiếm từ đây đầu tiên tốt nhất) là đường (dẫn) đó
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
để bắt (ngấm) không phải như tiện lợi được tính toán. Mỗi kho nấm mốc trạng thái rõ
ràng với nó Đường (dẫn) dùng để đạt đến nó. (Cái) này được phản chiếu trong mã.
Lập trình 20.6 kiểm tra trên dữ liệu (của) chương trình 20.5 tìm kiếm cái cây trong
cùng mệnh lệnh như (cho) sự leo ngọn đồi. Lập trình 20.6 làm những mỗi bước (của)
quá trình rõ ràng. ở practive, có thể thật hiệu quả hơn để kết hợp một số những bước.
Khi nào sự lọc Khi phát sinh những trạng thái, chẳng hạn, chúng tôi có thể kiểm tra
một trạng thái đó (Thì) mới và cũng hợp pháp cùng lúc. Những sự lưu trữ này phát

sinh những cấu trúc dữ liệu trung gian. Lập trình 20.7 minh họa ý tưởng bằng việc kết
hợp mọi sự kiểm tra vào trong một thủ tục, , update_frontier.
Những bài tập (cho) Mục(khu vực) 20.1
Làm lại chương trình những bình nước bị dựa vào hai sự đầy- và- những thao
tác chuyển đổi
(ii) Viết một chương trình để giải quyết những người truyền giáo và vấn đề
cannibals:
Ba người truyền giáo và Ba cannibals đang đứng trên ngân hàng trái (của) một
sông. Có một thuyền nhỏ để chở phà họ ngang qua với đủ phòng được chỉ có một hay
hai người. Họ ước muốn tới ngang qua sông. Nếu bao giờ có nhiều những người
truyền giáo hơn cannisbals trên một ngân hàng đặc biệt (của) sông, những người
truyền giáo sẽ chuyển đổi cannibals. Tìm một loạt của việc chở phà tới sự vận chuyển
an toàn mọi người truyền giáo và cannibals ngang qua sông không có việc phơi bày
bất kỳ cannibals cho sự chuyển đổi
Solve_best(frontier,History,Moves)
Moves là một chuỗi (của) những sự chuyển động để đạt đến một trạng thái cuối cùng
mong muốn từ trạng thái ban đầu, ở đâu Frontier chứa đựng những trạng thái hiện thời
dưới sự xem xét, và History chứa đựng những trạng thái được đến thăm trước đó
Solve_best([State(State,Path,Value)|Frontier],History,Moves)
Final_state(State), reverse(Path,Moves).
Solve_best([State(State,Path,Value)|Frontier],History,FinalPath)
Findall(M,move(State,M),Moves),
Updates(Moves,Path,State,States),
Legals(States,States1),
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
News(states1,History,States2),
Evaluates(States2,values)

Inserts(Values,Frontier,Frontier1),
Solve_best(Frontier1,[State|History],FinalPath).
Update(Moves,Path,State,States)
States là danh sách (của) những trạng thái khả dĩ có thể tiếp cận từ dòng theo
danh sách của khả dĩ Moves, where Path là một đường (dẫn) từ nút ban đầu tới State
Updates([M|Ms],Path,S,[(S1.[M|Path])|Ss])
Update(S,M,S1), updates(Ms,Path,S,Ss)
Updates([],Path,State,[]).
Legal(States,States1)
States1 là tập con (của) danh sách của States điều đó hợp pháp
Legal([(S,P)|States],[(S,P)|States1])
Legal(S), legals(States,States1).
legals([(S,P)|States],States1)
not legal(S), legals(States,States1).
Legal([],[]).
News(States,History,States1)
States1 is the list of States in States but not in History.
New([(S,P)|States],History,States1)
Member(S,History), news(States,History,States1).
News([(S,P)|States],History,[(S,P)|States1])
Not member(S,History), news(States,History,States1).
News([],History,[]).
Evaluates(States,Values)
Values is the list of tuples of States augmented by their value.
Evaluates([(S,P)|States],[state(S,P,V)|Values])
Value(S,V), evaluates(States,Values).
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm

Evaluates([],[]).
Lập trình 20.6 Khung đầu tiên Tốt nhất (cho) sự giải quyết vấn đề
Inserts(States,Frontier, Frontier1)
Frontier1 là kết quả của việc chèn những trạng thái vào trong Biên giới hiện thời
Inserts([Value|values], Frontier, Frontier1)
Insert(Values, Frontier, Frontier0),
Inserts(Values, Frontier0, Frontier1).
Inserts([],Frontier, Frontier).
Insert(State,[],[State]).
Insert(State,[State1|States],[State, State1| States])
Lesseq_value(State, State1).
Insert(State,[State1| States],[ State| States])
Equals(State, State1).
Insert(State,[State1| States],[ State1|States1])
Greater_value(State,State1), Insert(State,States,States1).
Equals(State(S,P,V),State(S,P1,V)).
Lesseq_value(State(S1,P1,V1),State(S2,P2,V2)) S1<>S2, V1<=V2.
Greater_value(State(S1,P1,V1),State(S2,P2,V2)) V1>V2.
Program 20.6 (continued)
Solve_best(Frontier,History,Moves)
Moves là một chuỗi (của) những sự chuyển động để đạt đến một trạng thái cuối
cùng mong muốn từ trạng thái ban đầu. Frontier chứa đựng những trạng thái hiện
thời dưới sự xem xét. History chứa đựng những trạng thái được đến thăm trước
đó
Solve_best([State(State,Path,Value)|Frontier],History,Moves)
Final_state(State), reverse(Path,[],Moves).
Solve_best([State(State.Path,Value)|Frontier],History,FinalPath)
Findall(M,move(State,M),Moves),
Update_frontier(Moves,State,Path,History,Frontier,Frontier1),
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn

Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
Solve_best(Frontier1,[State|History],FinalPath).
Update_Frontier([M|Ms],State,Path,History,F,F1)
Update(State,M,State1),
Legal(State1),
Value(State1,Value),
Not member(State1,History),
Insert((State1,[M,Path],Value),F,F0),
Update_frontier(Ms,State,Path,History,F0,F1).
Update_frontier([],S,P,H,F,F).
Insert(State,Frontier,Frontier1)
See Program 20.6
Lập trình 20.7 Ngắn gọn Firtst khung- tốt nhất (cho) sự giải quyết vấn đề
20.2. Trò chơi cây tìm kiếm (Searching Game Trees).
Điều gì xảy ra khi chúng ta cùng chơi một trò chơi? Bắt đầu từ những trò chơi
có ý nghĩa là sắp đặt những quân cờ vua, chia úp các con bài, hoặc thiết lập các trận
đấu. Một khi trò chơi được quyết định bởi người chơi đầu tiên, các người chơi khác
thay phiên nhau thực hiện lượt nước đi của mình. Sau mỗi nước đi, vị trí trong trò chơi
được cập nhật lại cho phù hợp.
Chúng tôi phát triển các đặc tả mơ hồ trong đoạn trên thành một luật chơi đơn
giản để chơi trò chơi. Các câu lệnh mức cao nhất (top-level statement) là
play(Game) ←
initialize ( Game, Position, Player),
display_game( Position, Player),
play (Position, Player, Result).
Vị từ initialize(Game, Position, Player) (Khởi tạo(Trò chơi,Vị trí,Người chơi))
khởi tạo trò chơi, vị trí của trò chơi, và người chơi, người chơi lúc bắt đầu.
Trò chơi là một chuỗi các lượt đi (turn), trong đó lần lượt từng người chơi một

chọn cách di chuyển, nước đi được thực thi, và người chơi tiếp theo được đi tiếp. Cách
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
hiểu rõ ràng nhất của thể hiện này là như một thủ tục đệ quy, play, với ba đối số: một
vị trí trò chơi, một di chuyển của người chơi, và kết quả cuối cùng. Đó là sự lựa chọn
thuận lợi để tách các move (di chuyển) bằng choose_move/3 từ sự thực thi của nó bằng
move/3. Số còn lại
play(Game) ←
play game with name Game.
play(Game) ←
initialize(Game, Position, Player),
display_game( Position,Player),
play (Position, Player, Result).
play (Position, Player, Result) ←
game_over (Position, Player, Result), !, announce(Result).
play (Position, Player, Result) ←
choose_move (Position, Player, Move),
move (Move, Position, Position1),
display_game( Position1,Player),
next_play (Player, Player1),
!, play (Position1, Player1, Result).
Chương trình 20.8. Khuôn dạng để chơi trò chơi.
Những vị từ trong mệnh đề play/3 hiển thị trạng thái của trò chơi và xác định các
người chơi tiếp theo.
play (Position, Player, Result) ←
choose_move (Position, Player, Move),
move (Move, Position, Position1),
display_game( Position1,Player),

next_play (Player, Player1),
!, play (Position1, Player1, Result).
Chương trình 20.8 cung cấp một khuôn mẫu hợp lý cho trò chơi - chơi với
chương trình. Sử dụng nó để viết một chương trình cho một trò chơi đặc biệt thì cần
tập trung sự chú ý vào: những cấu trúc dữ liệu cần được sử dụng để đại diện cho các
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
vị trí trong trò chơi, và các chiến lược cho các trò chơi nên được biểu diễn. Chúng tôi
chứng minh quá trình này trong Chương 21 bằng cách viết chương trình để chơi trò
Nim và Kalah.
Vấn đề là giải quyết các khuôn mẫu của mục 20.1 để dễ dàng thích nghi được khi
chơi trò chơi. Trò chơi cho các trạng thái cụ thể, vấn đề là phải tìm một con đường di
chuyển đến vị trí thích hợp để chiến thắng.
Một cây trò chơi tương tự như một trạng thái - không gian đồ thị. Nó là cây thu
được bằng cách xác định các trạng thái nhỏ với các nút và các cạnh ứng với các nước
đi của người chơi. Tuy nhiên, chúng tôi không xác định các nút trên cây thu được theo
trình tự khác nhau của di chuyển, ngay cả khi người chơi lặp lại trạng thái tương tự.
Trong một cây trò chơi, mỗi lớp được gọi là một ply (lớp).
evaluate_and_choose(Moves, Position, Record, BestMove) ←
chooses the BestMove from the set of Moves from the
current Position. Record records the current best move.
evaluate_and_choose([Move|Moves], Position, Record, BestMove) ←
move (Move, Position, Position1),
value (Position1,Value),
update (Move, Value, Record, Record1),
evaluate_and_choose([ ], Position, (Move, Value), Move) ←
update (Move, Value, (Move1, Value1), (Move1, Value1)) ←
value ≤ value1.

update (Move, Value, (Move1, Value1), (Move, Value)) ← value > value1.
Chương trình 20.9. Sự lựa chọn nước đi tốt nhất.
Phần lớn các cây trò chơi là quá rộng để tìm kiếm được tường tận. Phần này bàn
về phưong pháp đã được phát triển để đối phó với các không gian tìm kiếm lớn cho
trò chơi 2 người. Cụ thể, chúng tôi tập trung vào các thuật toán minimax với các đối
alpha-beta. Chiến lược này được sử dụng làm cơ sở cho chương trình Kalah mà chúng
tôi sẽ giới thiệu trong Chương 21.
Chúng tôi mô tả các cách tiếp cận cơ bản của cây trò chơi tìm kiếm bằng
cách sử dụng chức năng hoạt động đánh giá. Một lần nữa, trong phần này
value(Position,Value) là một chức năng đánh giá, tính toán các giá trị gia tăng của các
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
vị trí, hiện trạng của trò chơi. Đây là một thuật toán đơn giản cho việc lựa chọn các
nước đi tiếp theo.
Tìm tất cả các trạng thái có thể có trong một di chuyển của trò chơi. Tính toán
các giá trị của trạng thái bằng cách sử dụng chức năng đánh giá. Chọn nước đi dẫn đến
vị trí có điểm số cao nhất.
Thuật toán này được mã hóa như Chương trình 20.9. Nó giả định rằng vị từ move
(Move,Position,Position1) áp dụng cho một Move (nước đi) từ Position (vị trí) đến
Position1 (vị trí 1). Giao diện, khuôn dạng của trò chơi trong chương trình 20.8 được
cung cấp bởi mệnh đề.
choose_move (Position, computer, Move) ←
findall(M,move ( Position, M), Moves),
evaluate_and_choose(Moves, Position, (nill, - 1000), Move).
Vị từ move(Position, Move) là đúng nếu Move là một nước đi có thể thực hiện
được từ vị trí hiện tại.
Các mối quan hệ cơ bản là evaluate_ and_choose (Moves, Vị trí, Record,
BestMove) mà chọn các BestMove di chuyển tốt nhất trong Moves có thể từ một vị trí

nhất định. Đối với mỗi di chuyển possieble, vị trí tương ứng được xác định, giá trị của
nó được tính toán, và di chuyển với giá trị cao nhất được chọn. Bản ghi là một kỷ lục
của di chuyển hiện tốt nhất cho đến nay. Trong Chương trình 20.9, đó là reoresented
như là một tuple (Di chuyển, giá trị gia tăng). Cấu trúc của Record đã được abstracted
một phần trong thủ tục cập nhật / 4. Bao nhiêu dữ liệu trừu tượng sử dụng là một vấn
đề của một phong cách và thương mại - off giữa dễ đọc, conciseness, và hiệu suất.
Đánh giá trước một nước đi, như các phương pháp tiếp cận của Chương trình
20.9, sẽ phải có đầy đủ chức năng đánh giá nếu muốn có nước đi hoàn hảo, có nghĩa
là, nếu số điểm phản ánh của vị trí đó đủ để dẫn tới chiến thắng. Trò chơi trở nên thú
vị khi chức năng đánh giá hoàn hảo là không được biết đến. Chọn một nước đi trên cơ
sở xem xét trước nước đi đó nói chung không phải là một chiến lược tốt. Tốt hơn là
xem xét một vài nước đi trước và chọn nước đi tốt nhất để thực hiện.
Thuật toán minimax là phương pháp tiêu chuẩn để xác định giá trị của một vị trí
dựa vào việc tìm kiếm trên cây trò chơi một số lớp trước.
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
Các thuật toán cam đoan rằng, khi đối mặt với nhiều sự lựa chọn, các đối thủ sẽ
chọn sự lựa chọn tốt nhất cho mình, nghĩa là, sự lựa chọn tồi tệ nhất đối với tôi. Mục
tiêu của tôi lúc đó là làm cho nước đi của mình dến các vị trí đạt giá trị tối đa sau khi
đối thủ đã có những nước đi tốt nhất của mình, tức là có giá trị tối thiểu cho đối thủ.
Do đó thuật toán có tên là minimax (tối thiểu). Lý luận này tiến hành một số lớp trước,
tùy thuộc vào dữ liệu có thể được phân bổ để tìm kiếm. Tại lớp cuối chức năng đánh
giá được sử dụng.
Giả sử có một chức năng đánh giá hợp lý, thuật toán sẽ sản suất ra kết quả tốt
hơn lớp đang được tìm kiếm. Nó sẽ sản xuất các nước đi tốt nhất nếu cây toàn bộ là
tìm kiếm.
Hình 20.2 miêu tả một cây trò chơi đơn giản của sâu 2 lớp (depth 2 ply). Người
chơi có hai nước đi ở vị trí hiện tại, và đối thủ có hai nước đi trả lời. Các giá trị của

các nút lá là các giá trị cho người chơi. Các đối thủ muốn giảm số điểm, do đó, sẽ chọn
các giá trị tối thiểu, làm cho các vị trí có giá trị + 1 và -1 ở một mức cao hơn trong cây.
Người chơi muốn tối đa giá trị và sẽ chọn nút có giá trị + 1.
Hình 20.2. Một cây trò chơi đơn giản.
Chương trình 20.10 mã hóa thuật toán minimax. Các mối quan hệ cơ bản là
minimax(D,Position,MaxMin,Move,Value), điều này là đúng nếu Move là nước đi có
giá trị gia cao nhất từ vị trí Position thu được bằng cách tìm kiếm D lớp trong cây trò
chơi. MaxMin là một cờ (flag) chỉ ra rằng nếu chúng là tối đa hoặc tối thiểu. Nó có giá
trị 1 nếu là tối đa và -1 nếu là tối thiểu, các giá trị cụ thể được lựa chọn để dễ thao tác
bằng các phép tính đơn giản. Tổng quát của Chương trình 20.9 được sử dụng để lựa
chọn các thiết lập của nước đi. Hai đối số thêm phải thêm vào evaluate_and_choose
là số lượng các lớp D và các cờ MaxMin. Đối số cuối cùng là một bản ghi bao gồm cả
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
+1
+1
+1
-1
-1
+2
3
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
nước đi và giá trị nước đi. Các bản ghi ban đầu là (nil, -1000), trong đó nil đại diện cho
một di chuyển tùy ý và -1000 là một số điểm dự định có được, nó ít hơn bất kỳ điểm
số có thể có được nhờ các chức năng đánh giá.
Các quan sát về tính hiệu quả đó đã được thực hiện để kết hợp các nước đi tổng
quát và cập nhật các thủ tục trong bối cảnh tìm kiếm trạng thái - không gian đồ thị
tương tự như khi tìm kiếm cây trò chơi. Cho dù đó là tốt hơn để tính toán các thiết lập
của các vị trí thay vì tập các chuyển động (với sự thay đổi tương ứng trong thuật toán)

sẽ phụ thuộc vào các ứng dụng cụ thể.
Thuật toán minimax có thể được cải thiện bằng cách theo dõi các kết quả tìm
kiếm và bằng cách sử dụng một kỹ thuật được gọi là rút gọn alpha-beta (alpha-beta
pruning). Ý tưởng là ước tính để cho mỗi nút giữ các giá trị tối thiểu, giá trị alpha,
cùng với ước tính giá trị tối đa, beta. Nếu đánh giá một nút vượt quá giá trị beta thì
không tìm kiếm chi tiết về nhánh đó nữa. Các trường hợp tốt hơn một nửa các vị trí
trong cây trò chơi không cần phải đánh giá.
evaluate_and_choose(Moves, Position, Depth,Flag, Record, BestMove) ←
Choose the BestMove from the set of Moves from the current
Position using the minimax algorithm searching Depth ply ahead.
Flag indicates if we are currently minimizing or maximizing.
Record records the current best move.
evaluate_and_choose ([Move|Moves], Position, D, MaxMin, Record,Best) ←
move ( Move, Position, Position1),
minimax (D, Position1, MaxMin, MoveX, Value),
update (Move, Value, Record, Record1),
evaluate_and_choose (Moves, Position, D, MaxMin, Record1,Best).
evaluate_and_choose ([ ], Position, D, MaxMin, Record, Record).
minimax (0, Position, MaxMin, Move, Value) ←
value (Position, V).
Value is V*MaxMin.
minimax (0, Position, MaxMin, Move, Value) ←
D > 0,
Findall ( M, move (Position, M), Moves),
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
D1 is D – 1,
MinMax is -MaxMin,

evaluate_and_choose (Moves, Position, D1, MinMax, (nil, -1000), (Move,
Value)).
update(Move, Value, Record, Record1) ← Xem chương trình 20.9.
Chương trình 20.10. Chọn nước đi tốt nhất bằng thuật toán minimax.
Chương trình 20.10 là một phiên bản sửa đổi của Chương trình
20.10 kết hợp với phương pháp rút gọn alpha-beta. Quan hệ mới là
alpha_beta(Depth,Position,Alpha,Beta, Move,Value), nó mở rộng minimax
bằng cách thay thế cờ minimax bằng alpha và beta. Các mối quan hệ như với
evaluate_and_choose.
Không giống như trong chương trình 20.10, phiên bản evaluate_and_choose
trong Chương trình 20.11 không cần phải tìm kiếm tất cả các khả năng. Điều này đạt
được nhờ vị từ cutoff, nó quyết định mỗi điểm dừng tìm kiếm các nhánh hiện tại hoặc
tiếp tục tìm kiếm, cập nhật giá trị của alpha và tìm nước đi thích hợp tốt nhất.
Ví dụ, các nút cuối trong cây trò chơi trong hình 20.2 không cần phải được tìm
kiếm. Khi một nước đi có giá trị -1 tìm thấy, mà nó được đảm bảo là thấp hơn giá trị
+1, thì không có các nút khác có thể đóng góp vào điểm số cuối cùng.
Chương trình có thể được khái quát bằng cách thay thế trường hợp cơ sở của
alpha_beta bởi một kiểm tra cho dù vị trí là không xác định. Điều này là cần thiết trong
các chương trình cờ vua, ví dụ, để xử lý các phần chưa hoàn thành.
evaluate_and_choose (Moves, Position, Depth, Alpha, Record,BestMove) ←
Chooses the BestMove from the set of Moves from the current
Position using the minimax alogorithm with alpha – beta cutoff searching
Depth ply ahead. Alpha and Beta are the parameters of the algorithm.
Record records the current best move.
evaluate_and_choose([Move|Moves],Position,D,Alpha,Beta,Move1,BestMove)

move ( Move, Position, Position1),
alpha_beta (D, Position1, Alpha, Beta, MoveX, Value),
Value is – Value,
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn

Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
cutoff ( Move, Value1, D, Alpha, Beta, Move, (Move, Alpha)).
alpha_beta (0, Position, Alpha, Beta, Move, Value) ←
value (Position, Value).
alpha_beta (D, Position, Alpha, Beta, Move, Value) ←
findall (M, move (Position, M), Moves),
Alpha is –Beta,
Beta is –Alpha,
D1 is D – 1,
alpha_beta (Moves, Position,D1, Alpha1, Beta1, nill, (Move, Value)).
cutoff ( Move, Value, D, Alpha, Beta, Moves, Position, Move1, (Move, Value)) ←
Value ≥ Beta.
cutoff ( Move, Value, D, Alpha, Beta, Moves, Position, Move1, BestMove) ←
Alpha < Value, Value < Beta,
evaluate_and_choose (Moves, Position, D, Value, Beta, Move,BestMove).
cutoff ( Move, Value, D, Alpha, Beta, Moves, Position, Move1, BestMove) ←
Value ≤ Alpha,
evaluate_and_choose (Moves, Position, D, Alpha, Beta, Move1,BestMove).
20.3. Thông tin nền.
Kỹ thuật tìm kiếm cho cả lập kế hoạch và chơi trò chơi được thảo luận trong sách
giáo khoa AI (AI hình như là trí tuệ nhân tạo đấy thằng em). Để biết thêm chi tiết về
các chiến lược tìm kiếm hoặc thuật toán minimax và phần mở rộng của nó với kỹ thuạt
rút gọn alpha-beta, xem ví dụ Nillsson (1971) hoặc Winston (1977).
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1
Tiểu luận Hệ chuyên gia
Đề 6: Search Techniques – Những kỹ thuật tìm kiếm
Mục lục

Lời nói đầu 2
20. Những kỹ thuật tìm kiếm. 3
20.1 Đồ thị tìm kiếm state-space 3
20.2. Trò chơi cây tìm kiếm (Searching Game Trees). 15
20.3. Thông tin nền. 22
Mục lục 23
Bùi Văn Chung – Đỗ Xuân Cường – Phùng Thế Bốn – Phạm Ngọc Lập – Nguyễn Văn Huấn
Lớp TK6LC1

×