Search Techniques – Những kỹ thuật tìm kiếm
Trang 1KHOA 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
Hưng Yên, tháng 12 năm 2009
Trang 2Lờ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ếmDướ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!
Trang 3Đồ 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).
Trang 4Quá 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
Trang 5Vớ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).
Trang 6update_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 | YS], [X, Y | YS]) ← 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
Trang 7lớ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:
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.
Trang 8adjust(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
Trang 9sự 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ự
Trang 10tí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
Trang 11Evaluate_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).
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) đó