• Nenhum resultado encontrado

[123doc] Demo Thuat Toan Vuong Hao Robinson Co Source Code Bang Csharp

N/A
N/A
Protected

Academic year: 2021

Share "[123doc] Demo Thuat Toan Vuong Hao Robinson Co Source Code Bang Csharp"

Copied!
12
0
0

Texto

(1)

---cabd---

BÀI TẬP MÔN HỌC

TRÍ TUỆ NHÂN TẠO

Tên bài tập:

MINH HỌA THUẬT TOÁN VƯƠNG HẠO

VÀ THUẬT TOÁN ROBINSON

Học viên thực hiện : Nguyễn Văn Hữu Hoàng Mã số học viên : N13CHIS024

Lớp : Cao học HTTT 2013 Giáo viên hướng dẫn: TS. Tân Hạnh

(2)

MỤC LỤC

1. Thuật toán Vương Hạo ... 2

1.1 Ý tưởng của thuật toán ... 2

1.2 Các bước thực hiện ... 2

2. Thuật toán Robinson ... 4

2.1 Ý tưởng của thuật toán ... 4

2.2 Các bước thực hiện ... 4

3. Viết chương trình minh họa ... 5

3.1 Mục tiêu ... 5

3.2 Cấu trúc dữ liệu... 5

3.3 Giải thuật ... 6

3.4 Chương trình minh họa ... 7

(3)

1. Thuật toán Vương Hạo 1.1 Ý tưởng của thuật toán

Áp dụng chiến lược “chia để trị” nhằm tách bài toán xuất phát thành các bài toán con dạng đơn giản hơn. Bài toán ban đầu sẽ được chứng minh khi và chỉ khi mọi bài toán sơ cấp được chứng minh.

1.2 Các bước thực hiện

- Bước 1: Ta đưa vế trái và vế phải của bài toán cần chứng minh về dạng chuẩn. Biểu thức mệnh đề dạng chuẩn là biểu thức mệnh đề chỉ bao gồm 3 phép toán ˄ (tuyển), ˅ (hội) và ¬ (phủ định).

- Bước 2: Thay phép toán ˄ ở GTi và phép toán ˅ ở KLj bằng dấu “,”. - Bước 3: Chuyển vế này sang vế kia các GTi, KLj có dạng phủ định. - Bước 4: Nếu dòng hiện hành có một trong hai dạng sau:

Dạng 1: GT1, GT2,…, a ∨ b, …, GTn-1, GTn KL1, KL2,…., KLm-1, KLm Thì thay bằng hai dòng: – GT1, GT2,…, a,…, GTn-1, GTn KL1, KL2,…., KLm-1, Klm – GT1, GT2,…, b,…, GTn-1, GTn KL1, KL2,…., KLm-1, Klm Dạng 2: GT1, GT2,…, GTn-1, GTn → KL1, KL2,…, a ∧ b,…, KLm-1, Klm Thì thay bằng hai dòng: – GT1, GT2,…., GTn-1, GTn → KL1, KL2,…, a,…, KLm-1, Klm – GT1, GT2,…., GTn-1, GTn → KL1, KL2,…, b,…, KLm-1, Klm

- Bước 5: Một dòng được chứng minh nếu tồn tại chung một mệnh đề ở cả hai vế hoặc tồn tại 2 mệnh đề phủ định lẫn nhau.

- Bước 6:

o Một vấn đề được giải quyết trọn vẹn nếu mọi dòng dẫn xuất biểu diễn ở dạng chuẩn được chứng minh.

(4)

mệnh đề nào thì dòng đó không được chứng minh. Các công thức cơ bản: p -> q ó ¬p v q ¬(p ^ q) ó ¬p v ¬q ¬(p v q) ó ¬p ^ ¬q Ví dụ: Cho: (p->q)^(q->r)^(¬p->r)=> r Bước 1 (đưa về dạng chuẩn): ¬p˅q, ¬q˅r, p˅r => r

Bước 2 (Thay phép toán ˄ ở GT và phép toán ˅ ở KL bằng dấu “,”): ¬p˅q, ¬q˅r, p˅r => r Bước 3 (chuyển vế các mệnh đề có dạng phủ định): ¬p˅q, ¬q˅r, p˅r => r Bước 4: Xét vế trái, ta chia ra làm 2 trường hợp: TH1: q, (¬q˅r), (p˅r) => r TH2: ¬p, (¬q˅r), (p˅r) => r Xét: ¬p, (¬q˅r), (p˅r) => r Bước 3 (chuyển vế các mệnh đề có dạng phủ định): (¬q˅r), (p˅r) => r, p Bước 4: Xét vế trái, ta chia ra làm 2 trường hợp: TH1: r, (p˅r) => r, p -> Đúng TH2: ¬q, (p˅r) => r, p Xét: ¬q, (p˅r) => r, p Bước 1 (đưa về dạng chuẩn): ¬q, (p˅r) => r, p Bước 3 (chuyển vế các mệnh đề có dạng phủ định): (p˅r) => r, p, q Bước 4: Xét vế trái, ta chia ra làm 2 trường hợp: TH1: r => r, p, q -> Đúng TH2: p => r, p, q -> Đúng Xét: q, (¬q˅r), (p˅r) → r Bước 4: Xét vế trái, ta chia ra làm 2 trường hợp: TH1: q, r, (p˅r) => r -> Đúng TH2: q, ¬q, (p˅r) => r Xét: q, ¬q, (p˅r) => r Bước 3 (chuyển vế các mệnh đề có dạng phủ định): q, (p˅r) => r, q Bước 4: Xét vế trái, ta chia ra làm 2 trường hợp: TH1: q, r => r, q -> Đúng TH2: q, p => r, q -> Đúng

(5)

Vậy giả thuyết => kết luận đúng, do tất cả các dẫn xuất đều được chứng minh. 2. Thuật toán Robinson

2.1 Ý tưởng của thuật toán

Thuật toán này do Robinson đề xuất và hoạt động dựa trên phương pháp chứng minh phản chứng.

Phương pháp chứng minh phản chứng:

Bài toán: Chứng minh phép a->b là đúng với a là giả thiết, b là kết luận. Phản chứng: Giả sử b sai suy ra ¬b đúng.

Bài toán được chứng minh nếu a đúng và ¬b đúng sinh ra một mâu thuẩn. 2.2 Các bước thực hiện

- Bước 1: Ta đưa vế trái và vế phải của bài toán cần chứng minh về dạng chuẩn. Biểu thức mệnh đề dạng chuẩn là biểu thức mệnh đề chỉ bao gồm 3 phép toán ˄ (tuyển), ˅ (hội) và ¬ (phủ định).

- Bước 2: Đưa về danh sách các mệnh đề dạng:

GT1, GT2,…GTn-1, GTn ,¬ KL1, ¬ KL2,…., ¬ KLm-1, ¬ KLm

- Bước 3: Nếu trong danh sách các mệnh đề ở bước 2 có hai mệnh đề đối ngẫu nhau thì vấn đề được giải quyết xong, còn không chuyển sang bước 4.

- Bước 4: Xây dựng một mệnh đề mới bằng cách tuyển một cặp mệnh đề trong danh sách các mệnh đề ở bước 2, nếu mệnh đề mới có các biến mệnh đề đối ngẫu thì những biến đó được loại bỏ.

- Bước 5: Bổ sung mệnh đề mới vào danh sách và loại bỏ hai mệnh đề cũ vừa tạo thành mệnh đề mới ra khỏi danh sách.

- Bước 6: Nếu không xây dựng thêm mệnh đề mới nào và trong danh sách các mệnh đề không có hai mệnh đề nào đối ngẫu nhau thì vấn đề phát biểu ở dạng chuẩn bước 1 là Sai.

(6)

Ví dụ thuật toán Robinson:

3. Viết chương trình minh họa 3.1 Mục tiêu

Mục tiêu của chương trình là:

- Đọc được các đầu vào phức tạp bằng cách xử lý chuỗi.

- Thực hiện thuật toán Vương Hạo và xuất ra kết quả ở mỗi bước. - Thực hiện thuật toán Robinson và xuất ra kết quả ở mỗi bước.

Chương trình được viết bằng ngôn ngữ C#, nền tảng .Net 3.5, sử dụng IDE là Visual Studio 2010.

3.2 Cấu trúc dữ liệu

Để mô tả mệnh đề ta dùng cấu trúc dữ liệu sau: public class MenhDe

{

public char KyHieu;

public List<MenhDe> DSMenhDeCon; public List<PhepToan> DSToanTu; public bool PhuDinh = false; }

(7)

Trong đó:

- KyHieu: Ký hiệu của mệnh đề, khác rỗng nếu là mệnh đề đơn p,q,r…

- DSMenhDeCon: chứa các mệnh đề con theo thứ tự trong mệnh đề, bằng rỗng nếu là mệnh đề đơn.

- DSToanTu: chứa các phép toán theo thứ tự trong mệnh đề.

- PhuDinh: lữu trữ toán từ phủ định, bằng true nếu là phủ định mệnh đề. Để quản lý một mệnh đề có hai vế trái và phải theo bài toán đưa ra ta dùng cấu trúc:

public class BieuThuc

{

public MenhDe MDVeTrai; public MenhDe MDVePhai;

public int DaXet; //true nếu không tách ở bước 4 }

3.3 Giải thuật

- Với cấu trúc dữ liệu như trên, từ một chuỗi ban đầu phức tạp ta sẽ tách thành 2 vế trái phải, ở mỗi vế ta đọc chuỗi và tách thành các mệnh đề con, sau đó tiếp tục dùng đệ quy để tách các mệnh đề con thành các mệnh đề con nhỏ hơn, cho đến khi nào mệnh đề là ký tự đơn p,q,r… thì dừng lại.

Vương Hạo:

- Sử dụng 1 biến kiểu stack để lưu các biểu thức cần xử lý, sau mỗi lần tách ở bước 4 thì ta lại đưa các trường hợp cần kiểm tra vào stack, sau đó lấy ra xử lý ở vòng lặp tiếp theo.

- Áp dụng 6 bước của thuật toán Vương Hạo, xuất ra kết quả mỗi bước và kết quả cuối cùng.

bool ketqua = true; while (stack.Count != 0) {

BieuThuc bieuThuc = stack.Pop();

builderKetQua.Append("\r\n - Xét " + bieuThuc.ToString()); if (Buoc5(bieuThuc)) { builderKetQua.Append(" -> Bước 5: Đúng"); continue; } if (Buoc6(bieuThuc)) { builderKetQua.Append(" -> Bước 6: Sai"); ketqua = false; break; }

(8)

if (bieuThuc.DaXet) continue; Buoc1(ref bieuThuc);

Buoc2(ref bieuThuc); Buoc3(ref bieuThuc); Buoc4(ref bieuThuc); }

if (ketqua)

builderKetQua.Append("\r\nMệnh đề được chứng minh là đúng."); else

builderKetQua.Append("\r\nKhông đủ dữ liệu để chứng minh!");

Robinson:

- Do việc kết hợp 2 mệnh đề có thể là ngẫu nhiên nên ở bước 4 sẽ kết hợp 2 mệnh đề đẩu tiên, cho đến khi số mệnh đề rỗng thì vấn đề được chứng minh, ngược lại thì mệnh đề suy ra không đúng.

bool ketqua = false;

menhDeChinh = new MenhDe(); Buoc1(ref bieuThuc);

Buoc2(bieuThuc, ref menhDeChinh);

while (menhDeChinh.DSMenhDeCon.Count > 1) { if (Buoc3(menhDeChinh)) { builderKetQua.Append(" -> Đúng"); ketqua = true; break; } else { builderKetQua.Append(" -> Chưa có"); if (!Buoc4(ref menhDeChinh))

break; } } if (ketqua) builderKetQua.Append("\r\n => Mệnh đề được chứng minh là đúng."); else

builderKetQua.Append("\r\n=> Không đủ dữ liệu để chứng minh mệnh đề!");

3.4 Chương trình minh họa Ø Yêu cầu đầu vào:

- Hai vế trái phải cách nhau bởi dấu => - Mệnh đề: a,b,c,d,e,f... (khác v) - Các ký hiệu phép toán:

^: và v: hoặc ->: kéo theo

(9)

- Ký hiệu phủ định: ¬

- Có thể sử dụng các ký tự như {} [] () trong 2 vế. - Ví dụ: [(a^b->cvd)^(c->e)^a]=>[b->e]

Ø Các chức năng chính:

- Chạy thuật toán Vương Hạo, Robinson. - Lấy dữ liệu từ file mẫu hoặc nhập vào. - Lưu kết quả vào file.

Ø Giao diện chương trình: Chạy thuật toán Vương Hạo:

(10)

Chạy thuật toán Robinson:

(11)

Một ví dụ kết quả xuất ra của chương trình bằng thuật toán Vương Hạo: Bài toán: [(a^b->cvd)^(c->e)^a]=>[b^c->e]

- Xét ((a^b)->(cvd))^(c->e)^a=>(b^c)->e Bước1: Đưa về dạng chuẩn:

((¬av¬b)v(cvd))^(¬cve)^a=>(¬bv¬c)ve

Bước 2: Thay ˄ ở GTi và ˅ ở KLj bằng dấu ",": ((¬av¬b)v(cvd)),(¬cve),a=>¬b,¬c,e

Bước 3: Chuyển vế nếu GTi, KLj có dạng phủ định: ((¬av¬b)v(cvd)),(¬cve),a,b,c=>e Bước 4: Tách dòng nếu có v ở GT hoặc ^ ở KL: (¬av¬b),(¬cve),a,b,c=>e (cvd),(¬cve),a,b,c=>e - Xét (cvd),(¬cve),a,b,c=>e Bước1: Đưa về dạng chuẩn: (cvd),(¬cve),a,b,c=>e

Bước 2: Thay ˄ ở GTi và ˅ ở KLj bằng dấu ",": (cvd),(¬cve),a,b,c=>e

Bước 3: Chuyển vế nếu GTi, KLj có dạng phủ định: (cvd),(¬cve),a,b,c=>e Bước 4: Tách dòng nếu có v ở GT hoặc ^ ở KL: c,(¬cve),a,b,c=>e d,(¬cve),a,b,c=>e - Xét d,(¬cve),a,b,c=>e Bước1: Đưa về dạng chuẩn: d,(¬cve),a,b,c=>e

Bước 2: Thay ˄ ở GTi và ˅ ở KLj bằng dấu ",": d,(¬cve),a,b,c=>e

Bước 3: Chuyển vế nếu GTi, KLj có dạng phủ định: d,(¬cve),a,b,c=>e Bước 4: Tách dòng nếu có v ở GT hoặc ^ ở KL: d,¬c,a,b,c=>e d,e,a,b,c=>e - Xét d,e,a,b,c=>e -> Bước 5: Đúng - Xét d,¬c,a,b,c=>e -> Bước 5: Đúng - Xét c,(¬cve),a,b,c=>e Bước1: Đưa về dạng chuẩn: c,(¬cve),a,b,c=>e

Bước 2: Thay ˄ ở GTi và ˅ ở KLj bằng dấu ",": c,(¬cve),a,b,c=>e

Bước 3: Chuyển vế nếu GTi, KLj có dạng phủ định: c,(¬cve),a,b,c=>e Bước 4: Tách dòng nếu có v ở GT hoặc ^ ở KL: c,¬c,a,b,c=>e c,e,a,b,c=>e - Xét c,e,a,b,c=>e -> Bước 5: Đúng - Xét c,¬c,a,b,c=>e -> Bước 5: Đúng

(12)

- Xét (¬av¬b),(¬cve),a,b,c=>e Bước1: Đưa về dạng chuẩn: (¬av¬b),(¬cve),a,b,c=>e

Bước 2: Thay ˄ ở GTi và ˅ ở KLj bằng dấu ",": (¬av¬b),(¬cve),a,b,c=>e

Bước 3: Chuyển vế nếu GTi, KLj có dạng phủ định: (¬av¬b),(¬cve),a,b,c=>e Bước 4: Tách dòng nếu có v ở GT hoặc ^ ở KL: ¬a,(¬cve),a,b,c=>e ¬b,(¬cve),a,b,c=>e - Xét ¬b,(¬cve),a,b,c=>e -> Bước 5: Đúng - Xét ¬a,(¬cve),a,b,c=>e -> Bước 5: Đúng

Các dẫn xuất đều đúng => Mệnh đề được chứng minh là đúng. Kết quả xuất ra từ thuật toán Robinson:

Bài toán:

(p->q)^(q->r)^(¬p->r)=>r Bước1: Đưa về dạng chuẩn: (¬pvq)^(¬qvr)^(pvr)=>r

Bước 2: Biến đổi dòng trên thành danh sách các mệnh đề: (¬pvq),(¬qvr),(pvr),¬r

Bước 3: Nếu có hai mệnh đề đối ngẫu nhau thì vấn đề được CM là đúng: (¬pvq),(¬qvr),(pvr),¬r -> Chưa có

Bước 4: Xây dựng MĐ mới bằng cách tuyển một cặp MĐ trong DS các MĐ: (¬pvr),(pvr),¬r

Bước 3: Nếu có hai mệnh đề đối ngẫu nhau thì vấn đề được CM là đúng: (¬pvr),(pvr),¬r -> Chưa có

Bước 4: Xây dựng MĐ mới bằng cách tuyển một cặp MĐ trong DS các MĐ: r,¬r

Bước 3: Nếu có hai mệnh đề đối ngẫu nhau thì vấn đề được CM là đúng: r,¬r -> Đúng

=> Mệnh đề được chứng minh là đúng. 4. Kết luận

- Hai công đoạn khó nhất của chương trình là xử lý chuỗi và bước 1 đưa mệnh đề về dạng chuẩn.

- Chương trình đã xử lý tốt chuỗi đầu vào, đọc được hầu như tất cả các mệnh đề đơn giản đến phức tạp.

- Chương trình có giao diện trực quan đối với người sử dụng, dễ dàng nhập dữ liệu đầu vào.

- Chương trình đã minh họa tốt và chạy đúng các bước của thuật toán Vương Hạo, Robinson.

Referências

Documentos relacionados

Este modo de vida começa por ser criticado pelo autor como parasitismo, acrescentando que tal forma de vida deve ter sido aprendida por estes peixes a partir dos

Graduado em Educação Física e Especialista em Treinamento Esportivo pela Universidade Estadual do Ceará, Diretor Logístico da Copa do Mundo FIFA 2014, Gestor de Instalações

Se um processo tentar abrir uma fila em modo de escrita, e nesse instante não houver um processo que tenha aberto a fila em modo de acesso de leitura, o processo fica

Revisão sistemática que incluiu apenas estudos observacionais, com o objetivo de comparar a cirurgia tradicional de Maze III (realizada com incisões) à técnica

Para entender esse processo tentamos fazer aqui uma análise cultural do projeto Recôncavo Experimental (R.E.), que tem como berço identitário o Recôncavo baiano,

Outra classificação define as ILPI de acordo com a Capacidade Funcional (CF) destinada aos residentes: idosos independentes que necessitem ou não de órteses para auxílio,

Com relação a viabilidade da implantação de hotelaria hospitalar na Santa Casa, todos os sujeitos entrevistados acreditam que é viável e que inclusive já é uma realidade na

A ausência das notícias relacionadas ao Pantanal como área de preservação e conservação, não apenas sugere a desva- lorização do bioma, mas também sugere o