Ba cặp vợ chồng muốn qua sông bằng một chiếc xuồng. Bất cứ ai trong số họ cũng có thể chèo xuồng. Tuy nhiên, chiếc xuồng chỉ có thể chở tối đa hai người (nghĩa là xuồng có thể chở một hoặc hai người). Do ba ông chồng đều rất ghen nên có điều kiện ràng buộc là: mỗi ông chồng đều phải luôn ở cạnh bà vợ của mình trừ khi ở đó không có người đàn ông nào khác (nghĩa là ông chồng chỉ có thể rời khỏi bà vợ nếu như không có người đàn ông nào khác ở đó).
Trang 11
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
- -
BÁO CÁO ĐỒ ÁN MÔN
NGUYÊN LÝ VÀ PHƯƠNG PHÁP LẬP TRÌNH
Đề tài: Trình bày phương pháp và viết chương trình trên ngôn ngữ Prolog để giải
bài toán “Những ông chồng ghen tuông” (“Jealous husbands problem”) trong trí tuệ nhân tạo
Lớp: CS221.J12
Giảng viên hướng dẫn: PGS TS Nguyễn Tuấn Đăng Thành viên nhóm thực hiện:
1, Lê Thanh Tiềm – 16521214
2, Nguyễn Đăng Thịnh – 16521177
Tp Hồ Chí Minh, tháng 01 năm 2019
Trang 2Lời cám ơn
Đầu tiên chúng em xin gửi lời cám ơn sau sắc nhất đến thầy Nguyễn Tuấn Đăng đã tận tình giảng dạy và giúp đỡ chúng em những kiến thức và ý tưởng cần thiết để hoàn thành được đề tài này
Do còn nhiều yếu tố khác nhau cùng với sự hiểu biết còn hạn chế của mỗi thành viên nên đề tài này còn nhiều thiếu sót Mong thầy có thể xem xét và đưa ra đánh giá để nhóm chúng em có thể hoàn thiện nó hơn trong tương lai
I, Giới thiệu bài toán:
Ba cặp vợ chồng muốn qua sông bằng một chiếc xuồng Bất cứ ai trong số họ cũng có thể chèo xuồng Tuy nhiên, chiếc xuồng chỉ có thể chở tối đa hai người (nghĩa là xuồng có thể chở một hoặc hai người)
Do ba ông chồng đều rất ghen nên có điều kiện ràng buộc là: mỗi ông chồng đều phải luôn ở cạnh bà vợ của mình trừ khi ở đó không có người đàn ông nào khác (nghĩa là ông chồng chỉ có thể rời khỏi bà vợ nếu như không có người đàn ông nào khác ở đó)
I, Phương pháp giải quyết bài toán:
1, Định nghĩa trạng thái:
- Trạng thái ban đầu: Tất cả các ông chồng và bà vợ đều ở bờ bên trái
Tương ứng: [1, 1, 1, 1, 1, 1, 0]
- Trạng thái mục tiêu: Tất cả các ông chồng và bà vợ đều ở bên bờ bên phải Tương ứng: [0, 0, 0, 0, 0, 0, 1]
- 6 vị trí đầu tương ứng với mỗi ông chồng và bà vợ của mình đứng xen kẽ nhau
- vị trí cuối cùng chỉ thuyền, thuyền chở tối đa được hai người
2, Các thao tác chuyển trạng thái:
- Chuyển cặp vợ chồng thứ nhất từ bờ bên trái sang bờ bên phải
- Chuyển cặp vợ chồng thứ hai từ bờ bên trái sang bờ bên phải
Trang 33
- Chuyển cặp vợ chồng thứ ba từ bờ bên trái sang bờ bên phải
- Chuyển ông chồng thứ nhất từ bờ bên trái sang bờ bên phải
- Chuyển ông chồng thứ hai từ bờ bên trái sang bờ bên phải
- Chuyển ông chồng thứ ba từ bờ bên trái sang bờ bên phải
- Chuyển bà vợ thứ nhất từ bờ bên trái sang bờ bên phải
- Chuyển bà vợ thứ hai từ bờ bên trái sang bờ bên phải
- Chuyển bà vợ thứ ba từ bờ bên trái sang bờ bên phải
- Chuyển ông chồng thứ nhất và ông chồng thứ hai từ bờ bên trái sang bờ bên phải
- Chuyển ông chồng thứ nhất và ông chồng thứ ba từ bờ bên trái sang bờ bên phải
- Chuyển ông chồng thứ hai và ông chồng thứ ba từ bờ bên trái sang bờ bên phải
- Chuyển bà vợ thứ nhất và bà vợ thứ hai từ bờ bên trái sang bờ bên phải
- Chuyển bà vợ thứ nhất và bà vợ thứ ba từ bờ bên trái sang bờ bên phải
- Chuyển bà vợ thứ hai và bà vợ thứ ba từ bờ bên trái sang bờ bên phải
- Chuyển cặp vợ chồng thứ nhất từ bờ bên phải sang bờ bên trái
- Chuyển cặp vợ chồng thứ hai từ bờ bên phải sang bờ bên trái
- Chuyển cặp vợ chồng thứ ba từ bờ bên phải sang bờ bên trái
- Chuyển ông chồng thứ nhất từ bờ bên phải sang bờ bên trái
- Chuyển ông chồng thứ hai từ bờ bên phải sang bờ bên trái
- Chuyển ông chồng thứ ba từ bờ bên phải sang bờ bên trái
- Chuyển bà vợ thứ nhất từ bờ bên phải sang bờ bên trái
- Chuyển bà vợ thứ hai từ bờ bên phải sang bờ bên trái
- Chuyển bà vợ thứ ba từ bờ bên phải sang bờ bên trái
Trang 4- Chuyển ông chồng thứ nhất và ông chồng thứ hai từ bờ bên phải sang bờ bên trái
- Chuyển ông chồng thứ nhất và ông chồng thứ ba từ bờ bên phải sang bờ bên trái
- Chuyển ông chồng thứ hai và ông chồng thứ ba từ bờ bên phải sang bờ bên trái
- Chuyển bà vợ thứ nhất và bà vợ thứ hai từ bờ bên phải sang bờ bên trái
- Chuyển bà vợ thứ nhất và bà vợ thứ ba từ bờ bên phải sang bờ bên trái
- Chuyển bà vợ thứ hai và bà vợ thứ ba từ bờ bên phải sang bờ bên trái
3, Các ràng buộc:
Các ông chồng luôn phải ở cạnh các bà vợ của mình trừ khi ở đó không có người đàn ông khác:
+ Ông chồng thứ nhất luôn ở cạnh bà vợ thứ nhất ( vợ của mình) trừ khi ở đó không có người đàn ông khác ở đó
+ Ông chồng thứ hai luôn ở cạnh bà vợ thứ nhất ( vợ của mình) trừ khi ở đó không có người đàn ông khác ở đó
+ Ông chồng thứ ba luôn ở cạnh bà vợ thứ nhất ( vợ của mình) trừ khi ở đó không có người đàn ông khác ở đó
4, Phương pháp cài đặt:
Biểu diễn trạng thái dưới dạng [A, B, C, D, E, F, G] ứng với:
+ vị trí A, B lần lượt là ông chồng thứ nhất, bà vợ thứ nhất
+ vị trí B, C lần lượt là ông chồng thứ hai, bà vợ thứ hai
+ vị trí E, F lần lượt là ông chồng thứ ba, bà vợ thứ ba
+ vị trí G chính là chiếc thuyền Nếu G là 0 thì thuyền ở bờ bên trái, bằng 1 thì là thuyền ở bờ bên phải
Trạng thái ban đầu: [1,1,1,1,1,1,0]
Trạng thái mục tiêu: [0,0,0,0,0,0,1]
II, Chương trình prolog:
Trang 55
goal([0,0,0,0,0,0,1])
%chuyen cap vo chong thu nhat
trans([1,1,C,D,E,F,0],[0,0,C,D,E,F,1])
trans([0,0,C,D,E,F,1],[1,1,C,D,E,F,0])
%chuyen cap vo chong thu hai
trans([A,B,1,1,E,F,0],[A,B,0,0,E,F,1])
trans([A,B,0,0,E,F,1],[A,B,1,1,E,F,0])
%chuyen cap vo chong thu ba
trans([A,B,C,D,1,1,0],[A,B,C,D,0,0,1])
trans([A,B,C,D,0,0,1],[A,B,C,D,1,1,0])
%chuyen ong chong thu nhat voi ong chong thu hai
trans([0,B,0,D,E,F,1],[1,B,1,D,E,F,0])
trans([1,B,1,D,E,F,0],[0,B,0,D,E,F,1])
%chuyen ong chong thu nhat vo ong chong thu ba
trans([0,B,C,D,0,F,1],[1,B,C,D,1,F,0])
trans([1,B,C,D,1,F,0],[0,B,C,D,0,F,1])
%chuyen ong chong thu hai va ong chong thu ba
trans([A,B,0,D,0,F,1],[A,B,1,D,1,F,0])
trans([A,B,1,D,1,F,0],[A,B,0,D,0,F,1])
%chuyen ba vo thu nhat va ba vo thu hai
trans([A,1,C,1,E,F,0],[A,0,C,0,E,F,1])
trans([A,0,C,0,E,F,1],[A,1,C,1,E,F,0])
%chuyen ba vo thu nhat voi ba vo thu ba
trans([A,1,C,D,E,1,0],[A,0,C,D,E,0,1])
trans([A,0,C,D,E,0,1],[A,1,C,D,E,1,0])
%chuyen ba vo thu hai va ba vo thu ba
trans([A,B,C,1,D,1,0],[A,B,C,0,D,0,1])
trans([A,B,C,0,D,0,1],[A,B,C,1,D,1,0])
%chuyen ong chong thu nhat
Trang 6trans([1,A,B,C,D,E,0],[0,A,B,C,D,E,1]) trans([0,A,B,C,D,E,1],[1,A,B,C,D,E,0])
%chuyen ba vo thu nhat
trans([A,1,B,C,D,E,0],[A,0,B,C,D,E,1]) trans([A,0,B,C,D,E,1],[A,1,B,C,D,E,0])
%chuyen ong chong thu hai
trans([A,B,1,C,D,E,0],[A,B,0,C,D,E,1]) trans([A,B,0,C,D,E,1],[A,B,1,C,D,E,0])
%chuyen ba vo thu hai
trans([A,B,C,1,D,E,0],[A,B,C,0,D,E,1]) trans([A,B,C,0,D,E,1],[A,B,C,1,D,E,0])
%chuyen ong chong thu ba
trans([A,B,C,D,1,E,0],[A,B,C,D,0,E,1]) trans([A,B,C,D,0,E,1],[A,B,C,D,1,E,0])
%chuyen ba vo thu ba
trans([A,B,C,D,E,1,0],[A,B,C,D,E,0,1]) trans([A,B,C,D,E,0,1],[A,B,C,D,E,1,0])
%cac trang thai nguy hiem
dangerous([1,0,0,_,_,_,_])
dangerous([1,0,_,_,0,_,_])
dangerous([0,1,1,_,_,_,_])
dangerous([0,1,_,_,1,_,_])
dangerous([0,_,1,0,_,_,_])
dangerous([_,_,1,0,0,_,_])
dangerous([1,_,0,1,_,_,_])
dangerous([_,_,0,1,1,_,_])
dangerous([0,_,_,_,1,0,_])
Trang 77
dangerous([_,_,0,_,1,0,_])
dangerous([1,_,_,_,0,1,_])
dangerous([_,_,1,_,0,1,_])
dfs(X,P,[X|P]):-goal(X),!
dfs(X,P,L):-trans(X,Y),X\=Y,\+dangerous(Y),\+member(Y,P),dfs(Y,[X|P],L)
III, Kết quả thử nghiệm:
X = [[0, 0, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1| ], [0, 1, 0, 1, 0| ], [0, 1, 0,
0| ], [1, 1, 0| ], [0, 0| ], [0| ], [ | ]| ]
Action? [write]
X = [[0, 0, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1, 1], [0, 1, 0, 1, 0, 1, 0], [0, 1, 0,
0, 0, 1, 1], [1, 1, 0, 0, 1, 1, 0], [0, 0, 0, 0, 1, 1, 1], [0, 0, 1, 1, 1, 1, 0], [0, 0, 1, 1, 0, 0, 1], [1,
1, 1, 1, 0, 0, 0], [1, 1, 0, 0, 0, 0, 1], [1, 1, 1, 0, 1, 0, 0], [1, 0, 1, 0, 1, 0, 1], [1, 0, 1, 1, 1, 1,
0], [0, 0, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0]]