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

BÁO CÁO ĐỒ ÁN NGUYÊN LÝ VÀ PHƯƠNG PHÁP LẬP TRÌNH NHỮNG ÔNG CHỒNG GHEN TUÔNG

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

ĐẠ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.
1


Lờ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.
2


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

3


- 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:
4


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
5


trans([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,_]).
6


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

7



×