Đề tài Áp dụng mô hình hệ chuyên gia xây dựng chương trình đoán nhận tính cách người qua đặc tả khuôn mặt

Tài liệu Đề tài Áp dụng mô hình hệ chuyên gia xây dựng chương trình đoán nhận tính cách người qua đặc tả khuôn mặt: MỤC LỤC Chương I: TỔNG QUAN I.1 Lời nói đầu. Có thể nói khuôn mặt chính là nơi “anh hoa phát tiết ra ngoài” của mỗi người. Nó không chỉ biểu hiện trạng thái tâm lý, mà còn thể hiện cá tính, sức khỏe, địa vị xã hội… của người đó. Một khuôn mặt đầy đặn, tươi tắn, rạng rỡ có tạo cho bạn một cảm giác thoải mái, dễ chịu hoặc cảm nhận về một tinh thần khỏe mạnh hay không ? Ngược lại, một khuôn mặt gày gò, xanh xao, buồn bã liệu có làm cho bạn phải suy tư, trăn trở ? Hay nói đúng hơn, khuôn mặt không chỉ thể hiện tư chất, tâm trạng của người đó, mà còn để lại ấn tượng tốt hoặc xấu cho người đối diện. Và “Nhân tướng học” chính là “chìa khóa giải mã những bí ẩn” mà bạn nên khám phá, để thấy được sự hấp dẫn thú và vị trên khuôn mặt bạn và của những người mà bạn quen biết, giao tiếp. Những tìm tòi, hiểu biết, những kinh nghiệm, kiến giải… về Nhân tướng học được tích lũy từ ngàn xưa, đương nhiên trở thành một kho tàng vô cùng phong phú, không chỉ dành cho riêng ai mà là di sản tinh thần cho ...

doc74 trang | Chia sẻ: hunglv | Lượt xem: 1182 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Áp dụng mô hình hệ chuyên gia xây dựng chương trình đoán nhận tính cách người qua đặc tả khuôn mặt, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC Chương I: TỔNG QUAN I.1 Lời nói đầu. Có thể nói khuôn mặt chính là nơi “anh hoa phát tiết ra ngoài” của mỗi người. Nó không chỉ biểu hiện trạng thái tâm lý, mà còn thể hiện cá tính, sức khỏe, địa vị xã hội… của người đó. Một khuôn mặt đầy đặn, tươi tắn, rạng rỡ có tạo cho bạn một cảm giác thoải mái, dễ chịu hoặc cảm nhận về một tinh thần khỏe mạnh hay không ? Ngược lại, một khuôn mặt gày gò, xanh xao, buồn bã liệu có làm cho bạn phải suy tư, trăn trở ? Hay nói đúng hơn, khuôn mặt không chỉ thể hiện tư chất, tâm trạng của người đó, mà còn để lại ấn tượng tốt hoặc xấu cho người đối diện. Và “Nhân tướng học” chính là “chìa khóa giải mã những bí ẩn” mà bạn nên khám phá, để thấy được sự hấp dẫn thú và vị trên khuôn mặt bạn và của những người mà bạn quen biết, giao tiếp. Những tìm tòi, hiểu biết, những kinh nghiệm, kiến giải… về Nhân tướng học được tích lũy từ ngàn xưa, đương nhiên trở thành một kho tàng vô cùng phong phú, không chỉ dành cho riêng ai mà là di sản tinh thần cho tất cả chúng ta. Chính vì lẽ đó mà em dự định xây dựng một “Hệ chuyên gia” cho phép đoán tính cách của người qua đặc tả khuôn mặt. Trái ngược với sự lâu đời của “Nhân tướng học”, “Hệ chuyên gia” mới được con người nghiên cứu, phát triển và ứng dụng trong một khoảng thời gian ngắn gần đây. Hệ chuyên gia là 1 trong những lĩnh vực nghiên cứu độc lập của trí tuệ nhân tạo. Đây là một lĩnh vực quan tâm tới việc phát triển các chương trình xử lý tri thức được mô tả bằng ký hiệu để mô phỏng cách làm việc của chuyên gia con người. I.2 Nhân tướng học. I.2.1 Giới thiệu Từ khi đất nước mở cửa,Văn hóa thế giới giao lưu,hội nhập rộng rãi với Việt Nam. Đặc biệt hơn cả là nền văn hóa cổ Trung Hoa-vốn đã gần gũi từ lâu-một lần nữa lại được nghiên cứu,tìm hiểu đầy đủ,trong đó Nhân tướng học là một bộ phận đã càng thâm nhập và đi sâu vào cuộc sống,xã hội,con người Việt Nam. Với mỗi người,khuôn mặt trước hết là sự biểu hiện cá tính và tâm trạng. Đó là những cảm xúc thông thường như buồn, vui, lo lắng, giận hờn…Nhưng đồng thời nó cũng thể hiện sức khỏe, nhân cách, địa vị xã hội… của người đó. Nhìn mặt đoán tính cách vốn là một kinh nghiệm có từ lâu đời,đến nay nó vẫn được sử dụng như một “môn nghệ thuật” với những kỹ năng và mức độ khác nhau. Ở phương Đông,”môn nghệ thuật” này được gọi với cái tên quen thuộc là “Nhân tướng học”. Và cho đến nay, nó là một chuyên ngành khoa học được mọi người công nhận. Nhân tướng học Á-đông không chỉ dừng chân ở việc đoán tính cách. Khoa này còn đào sâu cả địa hạt phú quý,bệnh tật,thọ yểu,sinh kế,nghề nghiệp. Mặt khác Nhân tướng học còn tìm hiểu-qua nét tướng mỗi cá nhân-những chi tiết liên quan đến những người khác có liên hệ mật thiết với mình : cha mẹ, vợ chồng, anh em, con cái, bạn bè. Sau cùng, Nhân tướng học Á-đông còn rộng rãi và táo bạo hơn hẳn khoa tâm lý phương Tây. Từ nội tâm và liên hệ của con người, Nhân tướng học Á-đông tiên đoán luôn vận mạng, dám khẳng định cả sự thành bại, thịnh suy, xét cả quá khứ lẫn tương lai, chứ không dừng lại ở một giai đoạn nào. Tóm lại, Nhân tướng học là một bộ môn nhân văn, từ người mà ra, do con người mà có và nhằm phục vụ cho con người trong việc “tri kỷ, tri bỉ”. Tuy nhiên ở khuôn khổ đề tài này, chúng ta chỉ tìm hiểu đến một phần của khoa Nhân tướng học : Tìm hiểu cá tính biểu hiện trên khuôn mặt. Qua đó ta có thể nắm chắc một trong những yếu tố quan trọng để phát triển và duy trì mối quan hệ hài hòa, hiệu quả giữa con người với nhau. I.2.2 Những điều cơ bản về cá tính thể hiện trên khuôn mặt Thuật tìm hiểu tính cách qua khuôn mặt về cơ bản dựa trên kích thước, hình dạng, vị trí, tính chất, và màu sắc của một số cơ quan thể hiện trên khuôn mặt. Một trong những dấu hiệu quan trọng nhất trong thuật tìm hiểu cá tính biểu hiện trên khuôn mặt là khuôn mặt có cân đối hay không. Khuôn mặt của một người càng mất cân đối, thì người ấy càng có nhiều khả năng bị rối loạn tâm lý, trong cuộc sống gặp nhiều khó khăn, khổ sở và nhiều thất vọng. Cũng như bộ não được chia thành hai phần với các chức năng khác nhau, các bên của khuôn mặt cũng phản ánh nhiều đặc điểm khác nhau. Ở hầu hết mọi người, bên trái của khuôn mặt biểu thị cá tính và tính khí, trong khi bên phải mô tả cảm xúc, địa vị xã hội và kinh tế, các mối quan hệ giữa cá nhân với người khác. Có 3 loại khuôn mặt cơ bản, với mỗi loại tương ứng với một loại cá tính và vận may cụ thể : tam giác, tròn, vuông. Khuôn mặt được chia thành 3 vùng theo phương nằm ngang : trán; vùng từ chân mày đến cuối mũi; và từ cuối mũi đến cằm. Ta quan sát các đặc tả khuôn mặt chủ yếu dựa trên các bộ phận chính như : trán, mắt, mũi, miệng, tai, cằm. Ngoài ra cũng có thể dựa trên một số chi tiết khác như : nếp nhăn, chân mày, gò má (lưỡng quyền), nốt ruồi, răng… I.2.3 Biết được gì qua vầng trán a)Trán cao, rộng: Trán cao, rộng là dấu hiệu của trí năng, nghị lực. Cá nhân có loại trán này dành nhiều thời gian để quan sát và suy ngẫm. Trán cao rộng là đặc điểm thường gặp ở những người thành công. b)Trán thấp, rộng : Loại trán này là dấu hiệu của khả năng quan sát tinh tế, tính kiên nhẫn và kiên trì. Ngoài ra, người có trán thấp rộng thường quá e dè, ngượng ngập, đến mức không thể nhận biết toàn bộ khả năng tiềm ẩn của bản thân. c)Trán cao, hẹp : Người có trán như thế này thường thờ ơ,dửng dưng,không biết thương xót người khác mặc dù họ rất thông minh. Nhiều nhà khoa học có loại trán này. d)Trán thấp, hẹp : Đây là dấu hiệu biểu thị thái độ vô trách nhiệm, cẩu thả, không thành thật, trong nhiều trường hợp còn có hành động tội ác. …. I.2.4 Cá tính thể hiện qua cặp mắt a)Mắt to: Nam giới có cặp mắt to áp đảo, dễ nhận thấy thường là những người đầy cảm xúc, thích nghệ thuật, và tinh thần chiến đấu cao. Họ thường có khuynh hướng cấp tiến trong cả tư tưởng lẫn hành động và quan tâm đến các dự án có tính đột phá. Nữ giới có cặp mắt to thường có khuynh hướng nhạy cảm, có khiếu nghệ thuật. b)Mắt nhỏ : Người có cặp mắt nhỏ là những người có khuynh hướng thực tế và quyết tâm. Họ ít có thiên hướng nghệ thuật. c)Mắt lồi : Người có mắt lồi với mí mắt trên mỏng rất giỏi trong khả năng ngoại cảm, cẩn thận, bị động và nhút nhát. Người có mắt lồi với mí mắt trên dầy thường có khuynh hướng dũng cảm, tham vọng, nhiều nghị lực lạ thường, và sẽ đạt được thành công. d)Mắt lõm : Đây là dấu hiệu cho thấy sự thiếu tự tin, suy nghĩ chậm chạp, ăn nói lắp bắp và không có khả năng biểu cảm hay thể hiện tình yêu. …. I.2.5 Mũi cho ta biết điều gì ? a)Mũi ngắn, dẹt : Người có mũi ngắn, dẹt gần như lúc nào cũng có nhiều trở ngại, cả về thể xác lẫn tinh thần, sự chênh lệch đối với họ thường ở mức một điều gì đó khác thường. Những người trong nhóm này thường là những người đi đứng chậm chạp, nhưng họ vô cùng trung thành đối với những ai đối xử tử tế đối với họ. b)Mũi dài : Mũi của một người càng dài thì họ thường có khuynh hướng kém linh động hơn, có nhiều khả năng quan trọng hóa vấn đề. Nhưng họ lại có ý thức trách nhiệm rất cao, và rất tỉ mỉ trong công việc của họ. Tuy nhiên, những người có mũi quá dài đều thường không thực tế, và gặp khó khăn trong việc xác lập, duy trì các mối quan hệ gắn bó, cũng như trong cảm xúc và biểu hiện tình yêu. c)Mũi dài, to, cao : Người có mũi dài, to, cao nổi tiếng là cố chấp và nhất mực làm theo ý mình, thường đạt mục đích thông qua sự dọa dẫm. d)Mũi khoằm : Họ là những người có cá tính tốt, có tài năng, và tham vọng cao. Tuy nhiên dù như vậy họ vẫn thường phải đối mặt với nhiều trở ngại nghiêm trọng, vấn đề khó khăn. …. I.2.6 Hình dáng của miệng biểu đạt gì ? a)Miệng rộng : Người có miệng rộng thường sống cởi mở, chan hòa, có nghị lực, tham vọng, thân mật, thoải mái. b)Miệng nhỏ : Miệng nhỏ thường đi kèm với sự yếu đuối, nhút nhát, lệ thuộc, đa cảm và một số đặc điểm không mong muốn khác. Người có miệng nhỏ, môi mỏng thường có khuynh hướng tự xem mình là trung tâm, và nhẫn tâm đối với người khác. c)Miệng trề : Miệng trề là miệng nhìn nghiêng nó nhô ra khỏi đường thẳng giữa mũi và cằm. Đây là dấu hiệu cho thấy sự cố chấp và trí năng kém, cũng như biểu thị cá nhân đó luôn khăng khăng giữ ý kiến riêng của mình. Và họ đặc biệt thích nói nhiều. d)Miệng lồi, môi dầy : Người có môi dầy, miệng cong xuống phía dưới ở khóe miệng thường thích tranh luận, luôn phàn nàn và không sẵn sàng nghe theo lời khuyên của người khác. e)Miệng lõm, môi dày : Nó biểu thị lòng từ tâm, nhân cách tốt. Ngoài ra, người có loại miệng này thường rất dễ thích nghi và làm việc có hiệu quả. …. I.2.7 Đôi tai mách bảo điều gì ? a)Tai to : Tai to biểu thị lòng can đảm và thế chủ động, kết hợp với trường thọ. Những người có đôi tai to thường thông minh, lịch lãm, làm việc chuyên cần, kiên nhẫn và quyết tâm b)Tai nhỏ : Chúng biểu thị cá nhân đó thường có khuynh hướng hay thay đổi và trí nhớ kém, nhưng nó cũng cho thấy người sở hữu chúng có khiếu nghệ thuật và tính sáng tạo. …. I.2.8 Một số khuôn mặt thường thấy Trán bằng, rộng; mắt nhỏ, dài; mũi hẹp, thẳng; miệng nhỏ, tươi; vành tai ngoài rõ át vành tai trong; cằm và mang tai vừa phải, có thịt trễ xuống: tính ôn hòa, độ lượng, có trách nhiệm, phóng khoáng, không thích nhục mạ người khác. Lông mày đậm, lớn và giao nhau; mắt lớn nhưng không có thần; mũi nhỏ, dài; lưỡng quyền cao; môi dày, miệng nhỏ; vành tai ngoài nở ngược chiều thông thường; cằm ngắn và phẳng : tính trầm lặng; thiếu đảm lược; không thích khó nhọc, khung cảnh ồn ào, náo nhiệt. Trán cao nhưng thiếu bề ngang; lông mày ngắn, to bản, đậm; ánh mắt nhìn xuống; mũi thẳng, cao; miệng nhỏ, môi dày; tai có dái tai lớn nhưng hướng về phía trước; xương quyền cao, nhọn : tính cang cường, khỏe mạnh, dám nói dám làm. Trán bằng, rộng nhưng thiếu chiều cao; lông mày thưa, nhỏ, ít; đuôi mắt hướng xuống; nhân trung ngắn, lợi răng lộ; tai dài, dái tai rủ xuống; cằm có nhiều thịt : tính ưa nhàn tản, không chịu khổ sở, thọ mệnh không dài. Đầu cân xứng, tròn trịa; trán cao; mắt lớn, ánh mắt lanh lẹ, sáng sủa; mũi to, ngay ngắn; lưỡng quyền cao; tai mỏng, lớn và dài : ý chí kiên cường, có khí phách, can đảm. Đỉnh đầu bằng phẳng; trán cao, lông mày nhỏ, thanh tú và dài quá mắt; hai mắt trong sáng; mũi thẳng; miệng nhỏ, môi hồng; mang tai vừa phải, và thẳng xuôi; cằm đầy đặn, không khuyết hãm : tính tình từ thiện, sáng suốt, làm việc gì cũng có kế hoạch lâu dài và dứt khoát, rất trường thọ. Trán hãm (hoặc gồ cao, hoặc lõm, hoặc gồ chỗ này lõm chỗ khác, bên cao bên thấp); đuôi mắt rủ xuống, ánh mắt có thần; miệng vuông; mũi thẳng, lưỡng quyền cao; cằm tròn đầy : không có nhiều khả năng phú túc. Đầu thấp nhỏ; trán bằng phẳng; mắt có thần, đuôi mày rủ gần mắt, khi cười thường xệ, khó biết là cười vui hay khinh thị; tai nhỏ, mỏng : tính tình cô độc, đa phần đều vất vả, khổ sở, đoản thọ. Trán cao, rộng; mắt tròn, nhỏ; lông mày ít, thưa; mũi nhỏ ngay ngắn; miệng nhỏ nhưng dáng đẹp; cằm hẹp; tai mỏng và cuốn ở phần trên : giỏi về mưu trí, làm việc trí óc thành công hơn bằng bắp cơ, dễ rung cảm. Trán rộng, bằng phẳng, phía sau đầu nảy nở rất rõ; mày hướng lên; mũi thon, ngay ngắn; khóe miệng xuống; lưỡng quyền và cằm bằng phẳng; tai dày, nhỏ : thông tuệ nhưng kiêu ngạo, bi quan. Đầu nhỏ; trán ngắn; lông mày nhỏ, ngắn; ánh mắt luôn nghi kỵ; mũi lệch; hai chân mày gần như giao nhau; cằm ngắn; mang tai hẹp :tâm tính bất chính, tính nết hung hiểm. Đầu và trán bằng phẳng; lông mày ít nhưng xanh tươi; mắt nhỏ; mũi cao; môi dày, tươi thắm; cằm thon, bằng : khó phú túc. I.3 Phương hướng giải quyết. Với những lợi ích của Nhân tướng học như trên, em dự định xây dựng một hệ chuyên gia với các công việc chính sau : Cho phép người sử dụng nêu ra các đặc tả của các bộ phận trên khuôn mặt như : mắt, mũi, miệng, trán, tai… Thông qua các đặc tả đó, chương trình sẽ nêu lên dự đoán về tính cách của người có khuôn mặt như vậy. Chương II : HỆ CHUYÊN GIA II.1 Tổng quan II.1.1 Hệ chuyên gia là gì ? Hệ chuyên gia là một hệ thống chương trình máy tính chứa các thông tin, tri thức và các quá trình suy luận về một lĩnh vực cụ thể nào đó để giải quyết các vấn đề khó hoặc hóc búa đòi hỏi sự tinh thông đầy đủ của các chuyên gia con người đối với các giải pháp của họ. Nói một cách khác hệ chuyên gia là dựa trên tri thức của các chuyên gia con người giỏi nhất trong lĩnh vực quan tâm. Tri thức của hệ chuyên gia bao gồm các sự kiện và các luật. Các sự kiện được cấu thành bởi một số nhiều các thông tin, được thu thập rộng rãi, công khai và được sự đồng tình của các chuyên gia con người trong lĩnh vực. Các luật biểu thị sự quyết đoán chuyên môn của các chuyên gia trong lĩnh vực. Mức độ hiệu quả của một hệ chuyên gia phụ thuộc vào kích thước và chất lượng của cơ sở tri thức mà hệ đó có được. Mỗi hệ chuyên gia chỉ đặc trưng cho một lĩnh vực vấn đề nào đó, như y học, tài chính, khoa học hay công nghệ, vv…, mà không phải là cho bất cứ một lĩnh vực vấn đề nào. Ví dụ : hệ chuyên gia về lĩnh vực y học để phát hiện các căn bệnh lây nhiễm sẽ có nhiều tri thức về một số triệu chứng lây bệnh, lĩnh vực tri thức y học bao gồm các căn bệnh, triệu chứng và chữa trị. Hoạt động của một hệ chuyên gia dựa trên tri thức được minh họa như sau: Người sử dụng Hệ thống giao tiếp Cơ sở tri thức Máy suy diễn II.1.2 Đặc trưng và ưu điểm của hệ chuyên gia 4 đặc trưng cơ bản: Hiệu quả cao: Khả năng trả lời với mức độ tinh thông bằng hoặc cao hơn so với chuyên gia (người) trong cùng lĩnh vực. Thời gian trả lời thỏa đáng: Thời gian trả lời hợp lý, bằng hoặc nhanh hơn so với chuyên gia (người) để đi đến cùng một quyết định. Độ tin cậy cao: Không thể xảy ra sự cố hoặc giảm sút độ tin cậy khi sử dụng. Dễ hiểu: Hệ chuyên gia giải thích các bước suy luận một cách dễ hiểu và nhất quán. Những ưu điểm của hệ chuyên gia : Phổ cập: Là sản phẩm chuyên gia, được phát triển không ngừng với hiệu quả sử dụng không thể phủ nhận. Giảm giá thành. Giảm rủi ro: Giúp con người tránh được rủi ro trong các môi trường nguy hiểm. Tính thường trực: Bất kể lúc nào cũng có thể khai thác sử dụng. Trong khi con người có thể mệt mỏi, nghỉ ngơi hay vắng mặt. Đa lĩnh vực: Chuyên gia về nhiều lĩnh vực khác nhau và được khai thác đồng thời bất kể thời gian sử dụng. Độ tin cậy. Khả năng giảng giải: Câu trả lời với mức độ tinh thông được giảng giải rõ ràng, chi tiết, dễ hiểu. Khả năng trả lời nhanh. Tính ổn định, suy luận có lý và đầy đủ mọi lúc mọi nơi. Trợ giúp thông minh như một người hướng dẫn. Có thể truy cập như là một cơ sở dữ liệu thông minh. II.1.3 Các lĩnh vực ứng dụng của hệ chuyên gia Tính đến thời điểm này, hàng trăm hệ chuyên gia đã được xây dựng và báo cáo thường xuyên trong các tạp chí, sách báo và hội thảo khoa học. Ngoài ra còn các hệ chuyên gia được sử dụng trong các công ty, các tổ chức quân sự mà không được công bố vì lí do bảo mật. Dưới đây là một số lĩnh vực ứng dụng diện rộng của các hệ chuyên gia : Lĩnh vực Ứng dụng diện rộng Dạy học kiểu thông minh sao cho sinh viên có thể hỏi Cấu hình Lập luận dựa trên những chứng cứ quan sát được Truyền đạt Chẩn đoán Tập hợp thích đáng những thành phần của một hệ thống theo cách riêng Giải thích Giải thích những dữ liệu thu nhận được So sánh dữ liệu thu lượm được với chuyên môn để đánh giá hiệu quả Lập kế hoạch Kiểm tra Dự đoán Lập kế hoạch sản xuất theo yêu cầu Điều khiển Chữa trị Chỉ định cách thụ lý một vấn đề Điều khiển một quá trình, đòi hỏi diễn giải, chẩn đoán, kiểm tra, lập kế hoạch, dự đoán và chữa trị Dự đoán hậu quả từ một tình huống xảy ra II.1.4 Cấu trúc của hệ chuyên gia Một hệ chuyên gia kiểu mẫu gồm các thành phần cơ bản sau : Bộ nhớ làm việc Cơ sở tri thức Mô tơ suy diễn Suy diễn Điều khiển Giao diện người, máy Người sử dụng Bộ thu nạp tri thức Bộ giải thích Chuyên gia con người Giao diện người, máy : Thực hiện giao tiếp giữa hệ chuyên gia và người sử dụng. Nhận các thông tin từ người dùng (các câu hỏi, các yêu cầu về lĩnh vực) và đưa ra các lời khuyên, các câu trả lời, các giải thích về lĩnh vực đó. Bộ giải thích : Giải thích các hoạt động của hệ khi có yêu cầu của người sử dụng. Bộ thu nạp tri thức : Làm nhiệm vụ thu nhận tri thức từ chuyên gia con người, từ kỹ sư tri thức và cả người sử dụng thông qua các câu hỏi và yêu cầu của họ, sau đó lưu trữ vào cơ sở tri thức. Cơ sở tri thức : Lưu trữ, biểu diễn các tri thức trong lĩnh vực mà hệ đảm nhận, làm cơ sở cho các hoạt động của hệ. Cơ sở tri thức bao gồm các sự kiện và các luật. Mô tơ suy diễn : Làm nhiệm vụ sử lý và điều khiển các tri thức được biểu diễn trong cơ sở tri thức nhằm đáp ứng các câu hỏi, các yêu cầu của người sử dụng. (*) Để thực hiện được các công việc của các thành phần trên trong cấu trúc hệ chuyên gia phải có một hệ điều khiển và quản lý việc tạo lập, tích lũy tri thức cho lĩnh vực hệ đảm nhận gọi là “Hệ quản trị cơ sở tri thức”. Hệ quản trị cơ sở tri thức thực chất là quản lý và điều khiển công việc của Bộ thu nạp tri thức, Bộ giải thích, Mô tơ suy diễn. Nó phải đảm bảo các yêu cầu : Giảm dư thừa tri thức, dữ liệu. Tính nhất quán và phi mâu thuẫn của tri thức. Tính toàn vẹn và an toàn. Giải quyết các vấn đề cạnh tranh. Chuyển đổi tri thức. Ngôn ngữ xử lý tri thức. II.1.5 Một số mô hình kiến trúc hệ chuyên gia a)Mô hình J.L.Ermine b)Mô hình C.Ernest : c)Mô hình E.V.Popov : II.2 Cơ sở tri thức II.2.1 Phân biệt tri thức và dữ liệu Chúng ta có thể dựa vào một số đặc trưng sau để phân biệt qui ước tri thức và dữ liệu : Khả năng tự giải thích nội dung : Dữ liệu đưa vào máy tính không tự giải thích nổi, đôi khi còn được mã hóa cho ngắn gọn để dễ cài đặt trong máy. Chỉ có người lập trình đó mới có thể hiểu được nội dung, ý nghĩa của dữ liệu, nhưng tri thức có thể tự giải thích nội dung của mình với người sử dụng bất kỳ. Tính cấu trúc : Một trong những đặc tính cơ bản của hoạt động nhận thức của con người đối với thế giới xung quanh là khả năng phân tích cấu trúc của các đối tượng. Tri thức được đưa vào máy cũng cần có khả năng tạo ra được một sự phân cấp giữa các khái niệm và mối quan hệ giữa chúng. Tính liên hệ : Ngoài các quan hệ về cấu trúc trong mỗi tri thức (khái niệm, quá trình, hiện tượng, sự kiện) giữa các đơn vị tri thức còn có nhiều mối liên hệ khác (không gian, thời gian, nhân quả…). Một số nghiên cứu đã chỉ ra số các liên hệ cơ bản giữa các sự kiện xấp xỉ 200 lần. Một cơ sở tri thức được kết hợp với số liên hệ cơ bản này có thể mô tả và biểu diễn được hầu hết mọi vấn đề mà chúng ta quan tâm. Tính chủ động : Như chúng ta đã thấy, dữ liệu có vai trò bị động vì nó phụ thuộc vào sự khai thác của chương trình cụ thể. Trong xã hội loài người khi hoạt động bất kỳ ở đâu và ở trong lĩnh vực nào thì con người bao giờ cũng bị điều khiển bằng chính tri thức (vốn hiểu biết) của mình. Nhờ có tri thức mà con người đã hình thành mục tiêu và các hành vi để thực hiện mục tiêu đó. Quá trình này luôn đi kèm với sự bổ sung tri thức và khắc phục sự mâu thuẫn giữa các tri thức để đi đến hoàn thiện dần cơ sở tri thức trong mỗi người. Đối với các tri thức biểu diễn trong máy cũng vậy, chúng chủ động hướng người sử dụng biết khai thác tri thức. Đó chính là quá trình kích hoạt tri thức được thể hiện trong các hệ chuyên gia được xây dựng trên các cơ sở tri thức biểu diễn ở mức cao có khả năng tiếp nhận, tinh chế, tự hoàn thiện ngay trong quá trình hoạt động của hệ. Tính chủ động của tri thức còn thể hiện sinh động thông qua các ngôn ngữ lập trình trí tuệ nhân tạo như Lisp, Prolog…ở đó không còn có sự phân biệt rõ ràng giữa dữ liệu và thủ tục. II.2.2 Phân loại tri thức Tri thức tồn tại dưới 2 dạng cơ bản : Tri thức định lượng. Tri thức định tính. Tri thức định lượng thường gắn với các loại kinh nghiệm khác nhau. Ở đây chúng ta xét về tri thức định tính. Tri thức định tính được chia thành 3 loại : Tri thức mô tả. Tri thức thủ tục. Tri thức điều khiển. a)Tri thức mô tả : Cho những thông tin về một sự kiện, hiện tượng hay quá trình mà không đưa ra thông tin về cấu trúc bên trong cũng như phương pháp sử dụng bên trong của tri thức đó. Ví dụ : Khẳng định “Việt Nam là đất nước tươi đẹp”. Đây là một khẳng định bất biến, không phụ thuộc vào tình huống, không gian và thời gian. Các tri thức phụ thuộc không gian và thời gian đòi hỏi những mô hình biểu diễn đặc biệt, cho phép thể hiện các tương quan giữa các sự kiện, quá trình không gian và thời gian. Ngoài ra các tri thức mô tả còn cho phép miêu tả các mối liên hệ, các ràng buộc giữa các đối tượng, các sự kiện và các quá trình. Ví dụ : “Tôi muốn mua bút” miêu tả mối quan hệ giữa đối tượng “tôi” và “bút” thông qua quan hệ “muốn mua”. b)Tri thức thủ tục : Cho ta những phương pháp cấu trúc tri thức, ghép nối và suy diễn các tri thức mới từ những tri thức đã có. Các tri thức loại này tạo nên cơ sở của kỹ nghệ xử lý tri thức Một số thủ tục tri thức cơ bản : Tổng hợp tri thức : Suy diễn, Quy diễn, Quy nạp. Học tự động : 2 cách suy diễn logic thường được sử dụng trong các hệ thống là Modus Ponens Nghĩa là nếu A đúng, A suy ra B thì B cũng đúng Modus Tollens Nghĩa là nếu B sai, A suy ra B thì A cũng sai c)Tri thức điều khiển : Dùng để điều khiển, phối hợp các nguồn tri thức thủ tục và tri thức mô tả khác nhau. II.2.3 Các cấp độ tri thức a)Tri thức động phụ thuộc vào tình huống không gian và thời gian : Các tri thức mô tả, tri thức thủ tục, tri thức điều khiển không phụ thuộc vào yếu tố không gian, thời gian được gọi là tri thức tĩnh. Các tri thức loại này tạo nên phần lõi trong các cơ cấu trí thức. Nguồn các cơ cấu trí thức này thường phát sinh từ các tài liệu chuyên môn các nguyên lý chung của khoa học. Ví dụ : “Nếu một đường thẳng vuông góc với một trong hai đường thẳng song song thì nó vuông góc với đường thẳng còn lại”. Tuy vậy, có những tri thức lại phụ thuộc vào yếu tố lịch sử,thông qua các tham số thời gian và không gian có thể xuất hiện tường minh hoặc không tường minh trong các phát biểu. Chẳng hạn, phát biểu : “Việt Nam không phải là thành viên của tổ chức WTO” chỉ đúng ở thời điểm trước năm 2008, còn hiện nay Việt Nam đã gia nhập tổ chức WTO. Chính yếu tố đó, mà quá trình suy diễn trong các cơ sở tri thức được phụ thuộc không gian, thời gian có thể giao hoán hay không giao hoán bộ phận, đơn điệu hay không đơn điệu. b)Tri thức bất định, tri thức không đầy đủ : Trong nhiều trường hợp các tri thức có thể đúng hoặc sai. Tuy vậy trong thực tế ta gặp phải các phát biểu không phải lúc nào cũng xác định được chúng đúng hay sai. Ví dụ : “Trời có thể mưa”, trong trường hợp này không thể quyết định 100% là trời mưa hay không mưa ; Các tri thức không chính xác là các mệnh đề phát biểu mà giá trị chân lý của chúng không thể chỉ ra một cách chính xác, tương ứng với thang đo quy ước. Ví dụ : “Anh ta cao khoảng 1m70”. Cũng có thể xuất hiện các tri thức không đầy đủ trong các phát biểu, các mô tả. Ví dụ : “Thông thường nếu anh ta đi thì nói chung chị ấy cũng đi” , đây là phát biểu bất định, song chỉ có tác dụng nếu biết được một chút về sự kiện “anh ta có đến hay không”. Nói chung, các tri thức bất định, không chính xác và không đầy đủ xuất hiện là do trong các phát biểu, người ta sử dụng các yếu tố ngôn ngữ không rõ ràng, như : có thể, có lẽ, khoảng, nói chung…Một trong những cách tiếp cận để xử lý các loại tri thức trên là sử dụng cách tiếp cận lý thuyết mờ. Các lý thuyết lập luận xấp xỉ đã và đang được quan tâm, nghiên cứu rất nhiều. II.2.4 Các phương pháp biểu diễn tri thức a)Biểu diễn tri thức nhờ logic Dựa vào các khái niệm cơ bản về logic mệnh đề và logic vị từ, với một số bài toán, các trạng thái được mô tả qua các biểu thức logic. Khi đó bài toán được phát biểu lại dưới dạng : A.Chứng minh : Từ GTGT…GT suy ra một trong các kết luận : KL,…,KL. Ở đây :GT,KL là các biểu thức logic (mệnh đề hoặc vị từ) B.Tìm phép gán cho các biến tự do sao cho từ GT,…,GT suy ra một trong các kết luận KL,…,KL. Cơ sở tri thức bằng logic mệnh đề : Cơ sở tri thức gồm 2 phần : Các sự kiện. Các luật. Các sự kiện được cho bởi các luật đặc biệt dạng : q; q; … q; Tập F = (p,…,p) tạo nên giả thiết cho quá trình suy diễn. Các luật ở dạng chuẩn Horn : ppq Cơ sở tri thức biểu diễn bằng logic vị từ : Cơ sở tri thức được cấu tạo bởi 2 phần : Tập các sự kiện F. Tập các luật R. Các sự kiện được cho bởi q (x,y,z,…), I = ,ở đây q (x,y,z,…) là các vị từ phụ thuộc vào các hạng thức x, y, z,… Các luật có dạng ppq(.). Logic vị từ cho phép biểu diễn hầu hết các khái niệm và các phát biểu định lý, định luật trong các bộ môn khoa học. Cách biểu diễn này khá trực quan và ưu điểm căn bản của nó là có một cơ sở lý thuyết vững chắc cho những thủ tục suy diễn nhằm tìm kiếm và sản sinh ra những tri thức mới, dựa trên các sự kiện và các luật đã cho. (*) Logic vị từ và logic mệnh đề có các ưu điểm sau : Là ngôn ngữ biểu diễn kiểu mô tả. Có khả năng suy diễn đối với các cơ chế quen thuộc : Pronens & Tollens. Khá trực quan với người sử dụng. Khá gần gũi về cú pháp với các lệnh lập trình logic, chẳng hạn như PROLOG. Có thể dùng để mô tả cấu trúc mô hình và xử lý động mô hình. Có thể kiểm tra tính mâu thuẫn trong cơ sở tri thức. Tính mô đun cao, do vậy các tri thức có thể thêm bớt sửa đổi khá độc lập với nhau và các cơ chế suy diễn. (*)Một số điểm yếu của logic : Mức độ hình thức hóa cao, dẫn tới khó hiểu ngữ nghĩa của các vị từ khi xét chương trình. Năng xuất xử lý thấp. Một trong những khó khăn cơ bản của quá trình suy diễn là cơ chế hợp và suy diễn vét cạn. Do các tri thức được biểu diễn nhờ các vị từ, nên ưu thể sử dụng cấu trúc dữ liệu không được khai thác triệt để. b)Biểu diễn tri thức nhờ mạng ngữ nghĩa : Trong phương pháp này, người ta sử dụng một đồ thị gồm các nút và các cung nối các nút để biểu diễn tri thức. Nút dùng để thể hiện các đối tượng, thuộc tính của đối tượng và giá trị của thuộc tính. Còn cung dùng để thể hiện các quan hệ giữa các đối tượng. Các nút và các cung đều được gắn nhãn. Ví dụ để thể hiện tri thức “sẻ là một loài chim có cánh và biết bay” ,người ta vẽ một đồ thị như sau : Bằng cách thêm vào đồ thị nút mới và các cung mới người ta có thể mở rộng một mạng ngữ nghĩa. Các cung mới được thêm thể hiện các đối tượng tương tự (với các nút đã có trong đồ thị), hoặc tổng quát hơn. Chẳng hạn để thể hiện “chim là một loài động vật đẻ trứng” và “cánh cụt là loài chim biết lặn”, người ta vẽ thêm như sau : (*)Ưu điểm : Cho phép biểu diễn một cách trực quan các sự kiện và mối quan hệ giữa chúng. Tính mô đun cao, theo nghĩa các tri thức thêm vào hoàn toàn độc lập với các tri thức cũ. Là ngôn ngữ biểu diễn dạng mô tả. Có thể áp dụng một số cơ chế trên mạng : Cơ chế truyền và thừa hưởng thông tin giữa các đối tượng. (*)Nhược điểm : Không có một phương pháp suy diễn chung cho mọi loại mạng ngữ nghĩa. Khó kiểm soát được quá trình cập nhật tri thức, dễ dẫn đến mâu thuẫn trong cơ sở tri thức. c)Biểu diễn tri thức nhờ các luật sản xuất Để có thể tận dụng những điểm mạnh trong suy diễn logic nhờ nguyên lý Modun Ponens, các hệ chuyên gia trí tuệ nhân tạo đưa ra các luật sản xuất có dạng : Nếu Điều kiện 1 Điều kiện 2 ……. Điều kiện m Thì Kết luận 1 ……. Kết luận n Trong đó các điều kiện và các kết luận có thể có dạng khá thoải mái. Trường hợp mỗi điều kiện i , mỗi kết luận j là vị từ hay mệnh đề thì ta có thể suy diễn logic thông thường. (*)Ưu điểm : Cách biểu diễn khá đơn giản và trực quan. Có thể suy diễn theo chiến lược khác nhau : suy diễn tiến, suy diễn lùi, và suy diễn hỗn hợp. Khá gần gũi về cú pháp. Có thể kiểm tra tính mâu thuẫn giữa các luật. Tính mô đun cao, có nghĩa là việc thêm, sửa đổi hoặc loại bỏ các luật hoàn toàn không có ảnh hưởng tới các luật khác và cơ chế suy diễn. (*)Nhược điểm : Năng xuất xử lý thấp. Không sử dụng được các cấu trúc dữ liệu. d)Biểu diễn tri thức bằng FRAME Phương pháp biểu diễn tri thức bằng FRAME có tất cả các tính chất vốn có của một ngôn ngữ biểu diễn tri thức. Nghĩa là nó có thể biểu diễn tri thức ở góc độ giao diện người-máy, góc độ mô tả mô hình, điều khiển hệ thống. Đồng thời nó cũng là một cơ sở cho một phương pháp xử lý thông tin mới – hướng đối tượng. Nếu phương pháp nhờ logic và mạng ngữ nghĩa dùng để biểu diễn tri thức mô tả và phương pháp luật sản xuất dùng để biểu diễn tri thức thủ tục thì các FRAME là kết hợp của cả 2 dạng biểu diễn : mô tả và thủ tục. FRAME tận dụng được các ưu điểm của luật sản xuất, vị từ, cũng như mạng ngữ nghĩa. Cấu trúc của FRAME : (như trên, duy nhất, miền…) (text, integer, real, pointer…) (tên, giá trị, thủ tục,…) Ví dụ về 1 FRAME mô tả tập HOCSINH : Frame HOCSINH IS-A: FART-OF : NGUOI-DI-HOC A KIND OF : (HOC_SINH_CO_SO, HOC_SINH_TRUNG_HOC) Cân nặng : 10-60 kg Chiều cao : 80-170 cm Có râu : không Nói tiếng : Việt/Anh/Pháp Cấu trúc này cho ta một khung dữ liệu để khoanh vùng các đối tượng là học sinh. Trường hợp gặp 1 người cao 180 cm, nặng 45 kg ta có thể khẳng định rằng đó không phải học sinh, vì không thỏa mãn các ràng buộc đã có. (*)Ưu điểm : Đáp ứng tất cả các yêu cầu về biểu diễn tri thức. Cho phép người sử dụng khá tự do khi biểu diễn tri thức. FRAME không chỉ sử dụng để mô tả tri thức mà còn được dùng thể hiện các thuật toán suy dẫn. Tận dụng được những điểm mạnh của biểu diễn thủ tục và mô tả. Quá trình xử lý trên các FRAME độc lập theo nghĩa kế thừa thông tin, không nhất thiết phải tuần tự. (*)Nhược điểm : Phương pháp biểu diễn quá phức tạp và cồng kềnh. Phương pháp biểu diễn FRAME tiện lợi đối với kỹ sư xử lý tri thức cũng như người sử dụng có trình độ cao, nhưng lại là sự quá tải đối với những người sử dụng thông thường. Các giá trị của slot có thể gán qua thực hiện các thủ tục, điều này làm cho việc thu nạp và cập nhật tri thức trở nên phức tạp và làm khả năng mềm dẻo, phù hợp với những thay đổi của môi trường bên ngoài bị giảm xuống. Do cấu trúc của FRAME nên khi biểu diễn cần phải sử dụng các biện pháp khá cầu kỳ. Vì vậy làm mất đi tính trực quan trong phương pháp biểu diễn. Đối với các bài toán phức tạp thì việc mô tả và điều khiển hệ thống sử dụng FRAME sẽ phức tạp lên rất nhiều so với các phương pháp biểu diễn khác. e)Biểu diễn nhờ bộ ba liên hợp O.A.V Biểu diễn tri thức nhờ bộ ba liên hợp OAV là sử dụng bộ ba “Đối tượng”-“Thuộc tính”-“Giá trị” (Object-Attribute-Value) để chỉ ra rằng đối tượng với thuộc tính đã cho nào đó có một giá trị nào đó. Ví dụ : (Nguyễn A, cao, 167) (Nguyễn A, nặng, 64) (Nguyễn A, râu, không) (Nguyễn A, nói, tiếng Việt) =>Có thể mô tả dưới dạng mạng ngữ nghĩa và các bộ liên hợp như sau : Đối tượng trong bộ ba liên hợp được chia thành 2 loại : đối tượng tĩnh và đối tượng động. Các đối tượng tĩnh được lưu trong bộ nhớ ngoài (băng từ, đĩa…) và khi cần được nạp vào bộ nhớ trong để xử lý. Các đối tượng động được khởi tạo trong quá trình làm việc và được lưu giữ ở bộ nhớ trong phục vụ cho việc xử lý. Một điều quan trọng là các đối tượng có thể sắp xếp và liên kết lại với nhau cũng giống như trong liên kết các FRAME. Tuy vậy, không thể biết một cách chính xác và tường minh bản chất của từng liên kết. Vì vậy người ta thường sử dụng bộ ba liên hợp để biểu diễn các sự kiện không chắc chắn. (*)Ưu điểm : Cho phép biểu diễn các đối tượng một cách trực quan. Tính mô đun tương đối cao. Là ngôn ngữ biểu diễn dạng mô tả. Cho phép diễn đạt tường minh các luật suy diễn. (*)Tuy vậy, cách biểu diễn này thực chất là một dạng đặc biêt của phương pháp mạng ngữ nghĩa nên nó cũng có các nhược điểm của mạng ngữ nghĩa. Ngoài ra khi sử dụng phương pháp này, các quan hệ, liên kết giữa các đối tượng không thể biểu diễn một cách tường minh. II.3 Mô tơ suy diễn II.3.1 Cơ chế suy diễn a)Suy diễn tiến : Suy diễn tiến là lập luận từ các sự kiện, sự việc để rút ra các kết luận. Ví dụ: Nếu thấy trời mưa trước khi ra khỏi nhà (sự kiện) thì phải lấy áo mưa (kết luận). Trong phương pháp này, người sử dụng cung cấp các sự kiện cho hệ chuyên gia để hệ thống (máy suy diễn) tìm cách rút ra các kết luận có thể. Kết luận được xem là những thuộc tính có thể được gán giá trị. Trong số những kết luận này, có thể có những kết luận làm người sử dụng quan tâm, một số khác không nói lên điều gì, một số khác có thể vắng mặt. Các sự kiện thường có dạng : Attribute = Value Lần lượt các sự kiện trong cơ sở trí thức được chọn và hệ thống xem xét tất cả các luật mà các sự kiện này xuất hiện như là tiền đề. Theo nguyên tắc lập luận trên, hệ thống sẽ lấy ra những luật thỏa mãn. Sau khi gán giá trị cho các thuộc tính thuộc kết luận tương ứng, người ta nói rằng các sự kiện đã được thỏa mãn. Các thuộc tính được gán giá trị sẽ là một phần của kết quả chuyên gia. Sau khi mọi sự kiện đã được xem xét, kết quả được xuất ra cho người sử dụng dùng. b)Suy diễn lùi : Phương pháp suy diễn lùi tiến hành các lập luận theo chiều ngược lại (đối với phương pháp suy diễn tiến). Từ một giả thuyết (như là một kết luận), hệ thống đưa ra một tình huống trả lời gồm các sự kiện là cơ sở của giả thuyết đã cho này. Ví dụ: nếu ai đó vào nhà mà cầm áo mưa và quần áo bị ướt thì giả thuyết này là trời mưa. Để củng cố giả thuyết này, ta hỏi người đó xem có phải trời mưa không ? Nếu người đó trả lời là có thì giả thuyết trời mưa là đúng và trở thành một sự kiện. Nghĩa là trời mưa nên phải cầm áo mưa và quần áo bị ướt. Suy diễn lùi là cho phép nhận được giá trị của một thuộc tính. Đó là câu trả lời cho câu hỏi “giá trị của thuộc tính A là bao nhiêu ?” với A là một đích. Để xác định giá trị của A, cần có các nguồn thông tin. Những nguồn này có thể là những câu hỏi hoắc có thể là những luật. Căn cứ vào các câu hỏi, hệ thống nhận được một cách trực tiếp từ người sử dụng những giá trị của thuộc tính liên quan. Căn cứ vào các luật, hệ thống suy diễn có thể tìm ra giá trị sẽ là kết luận của một trong số các kết luận có thể của thuộc tính liên quan,… Ý tưởng của thuật toán suy diễn lùi như sau : Với mỗi thuộc tính đã cho, người ta định nghĩa nguồn của nó : Nếu thuộc tính xuất hiện như là tiền đề của một luật (phần đầu của luật), thì nguồn sẽ thu gọn thành một câu hỏi. Nếu thuộc tính xuất hiện như là hậu quả của một luật (phần cuối của luật), thì nguồn sẽ là các luật mà trong đó, thuộc tính là kết luận. Nếu thuộc tính là trung gian, xuất hiện đồng thời như là tiền đề và như là kết luận, khi đó nguồn có thể là các luật, hoặc có thể là các câu hỏi mà chưa được nêu ra. Nếu mỗi lần với câu hỏi đã cho, người sử dụng trả lời hợp lệ, giá trị trả lời này sẽ được gán cho thuộc tính và xem như thành công. Nếu nguồn là các luật, hệ thống sẽ lấy lần lượt các luật mà thuộc tính đích xuất hiện như kết luận, để có thể tìm giá trị các thuộc tính thuộc tiền đề. Nếu các luật thỏa mãn, thuộc tính kết luận sẽ được ghi nhận. c)Cơ chế hỗn hợp : Sử dụng kết hợp cả 2 phương pháp suy diễn trên. II.3.2 Cơ chế điều khiển a)Chọn hướng suy diễn: Cho f = # GT GT: tập các sự kiện ban đầu f = # KL KL: Tập các sự kiện kết quả f = max #{ r R/ r có thể áp dụng cho 1 tập con F nào đó } = max # lọc (F,R) f = max # { r R/ r có cùng một sự kiện ở vế phải } (*)Các luật heuristic : Luật 1 : nếu f < f thì chọn suy diễn tiến Luật 2 : nếu f > f thì chọn suy diễn lùi Luật 3 : nếu f = f và f < f thì chọn suy diễn tiến Luật 4 : nếu f = f và f > f thì chọn suy diễn lùi Luật 5 : nếu f = f và f = f người thiết kế có thể chọn 1 trong 2 phương pháp suy diễn để sử dụng. b)Giải quyết các vấn đề cạnh tranh : b.1)Cạnh tranh trong suy diễn tiến Tính huống cạnh tranh xảy ra khi và chỉ khi tồn tại F và r1, r2 R mà : r1 : left1q1, r2 : left2q2, left1F, left2Fó # lọc (F,R) 2 ta có lọc ({a},R) = {r1,r2} Đặt vấn đề : làm thế nào để chọn 1 luật r trong số các luật có thể áp dụng được bằng lọc (F,R) ? Giải pháp 1 : Tổ chức các luật có thể sử dụng được như một hàng đợi. Giải pháp 2 : Tổ chức các luật có thể sử dụng theo xếp chồng. Giải pháp 3 : Sử dụng heuristic Đối với mỗi r R bằng kỹ thuật heuristic ta đánh giá liên hệ hàm ước lượng h trong KL với một phần vế phải của luật r, r : leftq H(r,KL) = h(q,KL) Nguyên tắc : Luật r : leftq sẽ được chọn khi và chỉ khi h(q,KL) min/max Giải pháp 4 : Thực hiện sắp xếp thứ tự các sự kiện (Đồ thị FPG-Fact Precedence Graph) Cho tập luật R và mỗi sự kiện của R là một nút, các luật là các dây cung trong đồ thị FPG. Giải pháp 4’ : Sử dụng đồ thị VA/HOĂC Mỗi luật r : pp…pq tương đương với một cụm cung kiểu “VÀ”. Giải pháp 5 : Đồ thị thứ tự luật (RPG – Rule Precedence Graph) Một luật r là sắp thứ tự với luật r (ký hiệu là r r) nếu và chỉ nếu tồn tại một sự kiện f sao cho : r : leftf ; r :…f…q Một luật r được gọi “khởi đầu – initial” nếu và chỉ nếu : r : leftq và left GTINITIAL Mỗi luật r được gọi là “kết thúc – final” nếu và chỉ nếu : r : left q và q GTFINAL Biểu diễn trong đồ thị RPG : Mỗi luật khởi đầu được coi là “áp dụng” ; APP = {INITIAL}. Cho App(r) điểm – vào(r) = {r’} tồn tại một đỉnh r’r trong RPG ; r : leftq ; mỗi r’ App(r) có thể áp dụng Nếu left {q’/ r’ App(r)}GT Thì luật r cũng có thể được áp dụng. Suy diễn trong đồ thị RPG như sau : Chọn một luật trong APPLICABLE. Thực hiện luật đó. Chú ý : đối với Suy diễn theo chiều rộng APP = hàng đợi Suy diễn theo chiều sâu APP = xếp chồng (*)Một số các kinh nghiệm (heuristics) : b.1.1/, h(r,FINALS) = h(r) # điểm – ra(r) = #{r’ / tồn tại một cung rr’ trong RPG} Luật được chọn ó h(r) = # điểm – ra(r) max b.1.2/, h(r,FINALS) = # p Luật được chọn ó h(r,FINALS) min b.1.3/, h(r,FINALS) = # {p / p : r FINALS} (số lượng các đường đi từ luật r đến FINALS trong đồ thị RPG) Luật được chọn ó h(r,FINALS) là lớn nhất b.2)Cạnh tranh trong suy diễn lùi : Cạnh tranh trong suy diễn lùi xảy ra khi và chỉ khi với một sự kiện f nào đó tồn tại ít nhất 2 luật r1, r2 : r1 : left1f và r2 : left2f Định nghĩa hàm tìm thấy: Tìm_thấy(f) = {r/ r : leftf } Câu hỏi đặt ra : Làm thế nào để chọn một luật sao cho r Tìm_thấy (f) Giải pháp 1 : Nếu r, r Tìm_thấy (f) Và r, r không được sử dụng nữa Và i < j Thì r được chọn Giải pháp 2 : Sử dụng đồ thì VA/HOAC và đồ thị FPG (*)Một vài phương pháp kinh nghiệm (heuristics) b.2.1/, Xét luật r : leftq. Với mỗi sự kiện f độ_dài(f,GT) = độ dài đường đi ngắn nhất từ GT đến f. h(r,GT) = max(độ_dài(f,GT)/ fleft) luật r1 được chọn ó h(r1,GT) nhỏ nhất b.2.2/, h(r,GT) = # left /* r : leftq */ luật được chọn ó # leftnhỏ nhất b.2.3/, Hàm độ_sâu(f,GT) = 0 nếu fGT Max { max( độ_sâu(q) + 1)} r : leftf q left luật được chọn ó max{độ_sâu(q)} nhỏ nhất b.2.4/, Hàm h(r,GT) = ( độ_sâu(f) ) f left luật được chọn ó h(r,GT) nhỏ nhất c)Việc giới hạn Thao tác lọc thường tốn thời gian để tính toán, nên phải lướt qua tập luật R để tìm ra tập có thể áp dụng được APPLICABLE. Để giảm nhẹ con số thử nghiệm, người ta quyết định chỉ lọc một phần các luật, hoặc sự kiện được đưa vào. Đó là việc giới hạn phải làm trước khi lọc. Chương III : ÁP DỤNG MÔ HÌNH HỆ CHUYÊN GIA XÂY DỰNG CHƯƠNG TRÌNH ĐOÁN NHẬN TÍNH CÁCH NGƯỜI QUA ĐẶC TẢ KHUÔN MẶT (*)Mô hình hệ. Em dự định xây dựng một chương trình hệ chuyên gia, mà qua đó cho phép đoán tính cách của một người nào đó dựa trên những đặc tả về khuôn mặt của họ. Hệ thống sử dụng vecto suy diễn tiến và cơ sở tri thức như sau : III.1 Vecto suy diễn tiến Giải quyết vấn đề dựa trên biểu diễn bài toán bằng logic vị từ, logic mệnh đề, các phương pháp suy diễn sẽ dần dần chuyển từ các giả thiết về kết luận, bằng cách thêm vào giả thiết các sự kiện đã được khẳng định là đúng, dựa trên 2 phương thức : Modus ponens : Nghĩa là nếu A đúng, AB đúng thì B cũng đúng. Modus tollens: Nghĩa là nếu B sai , AB đúng thì A cũng sai. Nói một cách khác, giả sử A, B, -A, -B là các sự kiện, trước khi áp dụng luật AB , ta có tập {A} (hoặc tập {B} tương ứng) thì sau sự khi thực hiện luật ta sẽ có thêm {B} (hoặc{-A} tương ứng). Kết quả là có tập sự kiện {A,B} (hoặc {-A,-B}) Ta có thể viết : {A} AB {A,B} {-B} AB {-A,-B} Như vậy, quá trình suy diễn bắt đầu từ tập các giả thiết, làm nở dần dần bằng cách thêm vào các sự kiện mới cho đến khi một trong các kết luận cần chứng minh được thực hiện. Chữ “tiến” ở đây sẽ được dùng với nghĩa với mỗi qui tắc luật AB, ta sẽ chuyển từ vế trái sang vế phải dấu . (*)Suy diễn tiến với logic mệnh đề : Đầu vào : Tập các mệnh đề đã cho GT = {g1,g2,…,g} Tập các luật RULE có dạng Horn : p1p2…pq Tập các mệnh đề kết luận : KL = {q1,q2,…,q} Đầu ra : Thông báo thành công nếu mọi q KL có thể suy ra từ giả thiết GT nhờ sử dụng tập luật RULE. Thuật toán : Tgian là tập các sự kiện (mệnh đề) đúng trong thời điểm đang xét, ban đầu Tgian = GT. Sat là tập luật có dạng p1p2…pq sao cho i = (i,n) p Tgian { Tgian = GT; Sat = lọc (RULE,Tgian); While KL Tgian and Sat do { r get (Sat) ; /*lấy một luật khả hợp từ tập Sat,giả sử r có dạng p1p2…pq */ TgianTgian {q}; RULERULE \ {r}; Sat = lọc (RULE,Tgian); }; If KL Tgian then exit (“thành công”) else exit (“không thành công”); } III.2 Cơ sở tri thức Thông qua việc tham khảo và tổng hợp các tài liệu về nhân tướng học, em dự định sẽ xây dựng một cơ sở tri thức với các luật theo cấu trúc If…then được minh họa như sau : Nếu một người có vầng trán cao rộng thì đây là một người có trí năng, nghị lực. Nếu một người có vầng trán thấp rộng thì đây là một người có khả năng quan sát tinh tế, kiên trì nhưng lại quá e dè. Nếu một người có vầng trán vồ thì đây là người có tính độc lập, có khả năng thích nghi, tháo vát. Nếu một người có đôi mắt to không bằng nhau (mắt to, mắt bé) thì đây là một người có tham vọng, tháo vát, chan hòa và năng nổ Nếu một người có đôi mắt to thì đây là người giàu cảm xúc, thích nghệ thuật và thông minh. Nếu một người có đôi tai to thì đây là người có tính chủ động, lịch lãm, chuyên cần. Nếu một người có đôi tai nhỏ thì đây là người hay thay đổi, trí nhớ kém, nhưng lại có khiếu nghệ thuật và sáng tạo. Nếu một người có mũi ngắn dẹt thì đây là người suy nghĩ chậm chạp nhưng trung thành với ai đối xử tốt với họ. Nếu một người có chiếc mũi dài to cao thì đây là người vô cùng cố chấp. Nếu một người có bướu ở giữa mũi thì đây là người khỏe mạnh, kiên quyết và ưa mạo hiểm. Nếu một người có miệng rộng thì đây là người cởi mở, chan hòa, có nghị lực, thân mật và thoải mái. Nếu một người có miệng nhỏ thì đây là người yếu đuối, sống lệ thuộc, đa cảm. Nếu một người có 2 răng cửa nhỏ thì đây là người năng nổ, nói nhiều nhưng không có khả năng giữ bí mật. Ngoài ra còn có các luật với cấu trúc Ifandand…then bằng cách liên kết các điều kiện ở các luật bên trên theo những hướng khác nhau tùy ý người dùng và kết quả là kết quả tổng hợp. Ví dụ như : “Nếu một người có vầng trán vuông, mắt lồi, tai to, mũi dài to cao, miệng trề thì đây là một người có tinh thần thực tiễn; cẩn thận, tham vọng, nhiều nghị lực; lịch lãm, chuyên cần; cố chấp; nói nhiều, vui vẻ ”. Với các luật như trên em đã xây dựng được cơ sở dữ liệu như sau : a)Ràng buộc trong cơ sở dữ liệu : b)Chi tiết các bảng : tbl_FeatureType : Bảng trên cho phép cập nhật thông tin về các bộ phận trên khuôn mặt con người. tbl_Feature : Bảng trên cho phép cập nhập các đặc điểm của từng loại bộ phận trên khuôn mặt người. Ví dụ như : với id_type = 0 , ta có thể thấy “ trán ” có các đặc điểm như vuông , vồ , lẹm , cao rộng … tbl_Characters : Chúng ta có thể cập nhập các tính cách có thể có của con người trong bảng trên. tbl_RelationType : Trong “ tbl_RelationType ” ta cập nhật thông tin về các mối quan hệ có thể có giữa các tính cách. Ví dụ : 2 tính cách “ thông minh ” và “ suy nghĩ chậm chạp ” có mối quan hệ đối lập nhau. 2 tính cách “ vui vẻ ” và “ ham vui ” có mối quan hệ tương đồng , tương hỗ. tbl_FeatureRelation : “ tbl_FeatureRelation ” cho phép ta thiết lập mối quan hệ giữa các đặc điểm của từng bộ phận trên khuôn mặt với tính cách của con người. tbl_CharacterRelation : “ tbl_FeatureRelation ” cho phép ta thiết lập mối quan hệ giữa các tính cách. (*) Cơ sở dữ liệu trên cho phép chúng ta thực hiện các thao tác cập nhập dễ dàng thông qua chương trình được mô tả dưới đây. Chương IV : CHƯƠNG TRÌNH CHÍNH IV.1 Môi trường Hệ điều hành : Windows Nền tảng : NetFramework 3.5 Sử dụng hệ quản trị cơ sở dữ liệu Access Môtơ suy diễn tiến Ngôn ngữ cài đặt : C# IV.2 Giao diện chương trình Giao diện chính : Người dùng có thể lựa chọn các đặc điểm trên khuôn mặt mà họ cần trong các comboBox “Nhận dạng” và “Đặc điểm”. Sau khi nhấn vào button “Thêm”, các đặc điểm đó sẽ hiện lên trong listview như sau : Khi click button “Phỏng đoán”, chương trình sẽ xử lý và đưa ra những tính cách có thể có dựa trên các đặc điểm mà người dùng đã chọn : Bên cạnh chức năng phỏng đoán tính cách con người qua đặc tả khuôn mặt, chương trình còn cho phép người dùng cập nhật cơ sở dữ liệu thông qua button : Trên form “Co so du lieu” này chúng ta có thể thực hiện các thao tác như : Thêm bớt các đặc điểm của khuôn mặt cũng như những tính cách thường thấy ở con người. Thiết lập các mối quan hệ giữa đặc điểm nhận dạng và tính cách thông qua form : Thiết lập các mối quan hệ giữa 2 tính cách chuẩn (xét sự đối lập của 2 tính cách) thông qua form : IV.3 Mã nguồn một số form chính Main form : public partial class Main : Form { private List> idFeature; private List> textFeature; private List listChar; public Main() { InitializeComponent(); cb_Type.LostFocus += new EventHandler(cb_Type_LostFocus); cb_DacDiem.LostFocus += new EventHandler(cb_DacDiem_LostFocus); } private void cb_Type_LostFocus(object sender, EventArgs e) { if (cb_Type.SelectedIndex == -1) { errPrv.SetError(cb_Type, "Không tồn tại đặc điểm này"); cb_Type.Focus(); } else errPrv.Clear(); } private void cb_DacDiem_LostFocus(object sender, EventArgs e) { if (cb_DacDiem.SelectedIndex == -1) { errPrv.SetError(cb_DacDiem, "Không tồn tại đặc điểm này"); cb_DacDiem.Focus(); } else errPrv.Clear(); } private void init() { idFeature = new List>(); textFeature = new List>(); for (int i = 0; i < cb_Type.Items.Count; i++) { idFeature.Add(new List()); textFeature.Add(new List()); } for (int i = 0; i < cb_Type.Items.Count; i++) { ListViewItem item = new ListViewItem(i.ToString()); item.SubItems.Add(((System.Data.DataRowView)cb_Type.Items[i])["Mota"].ToString()); item.SubItems.Add(""); lv_DDNhanDang.Items.Add(item); } } private void Main_Load(object sender, EventArgs e) { this.tbl_FeatureTypeTableAdapter.Fill(this.boiToanDataSet.tbl_FeatureType); init(); cb_Type_SelectedIndexChanged(cb_Type, new EventArgs()); } private void button1_Click(object sender, EventArgs e) { CSDL frm_CSDL = new CSDL(); frm_CSDL.Disposed += new EventHandler(frm_CSDL_Disposed); frm_CSDL.Show(); } private void frm_CSDL_Disposed(object sender, EventArgs e) { cb_Type_SelectedIndexChanged(cb_Type, new EventArgs()); this.Visible = true; } private void cb_Type_SelectedIndexChanged(object sender, EventArgs e) { if (cb_Type.SelectedIndex == -1) { errPrv.SetError(cb_Type, "Không tồn tại đặc điểm này"); cb_Type.Focus(); return; } else errPrv.Clear(); BoiToanDataSet.tbl_FeaturesDataTable dataTable = new BoiToanDataSet.tbl_FeaturesDataTable(); BoiToanDataSetTableAdapters.tbl_FeaturesTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.tbl_FeaturesTableAdapter(); adapter.FillByType(dataTable, int.Parse(cb_Type.SelectedValue.ToString())); cb_DacDiem.DisplayMember = dataTable.MotaColumn.ColumnName; cb_DacDiem.ValueMember = dataTable.idColumn.ColumnName; cb_DacDiem.DataSource = dataTable; } private void bt_AddFeature_Click(object sender, EventArgs e) { if (cb_Type.SelectedIndex == -1) { errPrv.SetError(cb_Type, "Không tồn tại đặc điểm này"); cb_Type.Focus(); return; } else errPrv.Clear(); if (cb_DacDiem.SelectedIndex == -1) { errPrv.SetError(cb_DacDiem, "Không tồn tại đặc điểm này"); cb_DacDiem.Focus(); return; } else errPrv.Clear(); int idx = cb_Type.SelectedIndex; try { int id = int.Parse(cb_DacDiem.SelectedValue.ToString()); if (idFeature[idx].Contains(id)) return; idFeature[idx].Add(id); textFeature[idx].Add(cb_DacDiem.Text); if (lv_DDNhanDang.Items[idx].SubItems[2].Text.Length > 0) lv_DDNhanDang.Items[idx].SubItems[2].Text += ", "; lv_DDNhanDang.Items[idx].SubItems[2].Text += cb_DacDiem.Text; } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); } } private void bt_RemoveFeature_Click(object sender, EventArgs e) { if (lv_DDNhanDang.SelectedItems.Count <= 0) return; int idx = lv_DDNhanDang.SelectedIndices[0]; if (textFeature[idx].Count <= 0) return; idFeature[idx].RemoveAt(idFeature[idx].Count - 1); textFeature[idx].RemoveAt(textFeature[idx].Count - 1); lv_DDNhanDang.Items[idx].SubItems[2].Text = ""; if (textFeature[idx].Count > 0) { for (int i = 0; i < textFeature[idx].Count - 1; i++) lv_DDNhanDang.Items[idx].SubItems[2].Text += textFeature[idx][i] + ", "; lv_DDNhanDang.Items[idx].SubItems[2].Text += textFeature[idx][textFeature[idx].Count - 1]; } } private void bt_Go_Click(object sender, EventArgs e) { List str = new List(); listChar = getListCharacter(ref str); if (listChar.Count <= 0) { MessageBox.Show("Không tồn tại chuẩn tính cách nào !"); return; } List charCount = new List(); for (int i=0; i<listChar.Count; i++) charCount.Add(0); for (int i = 0; i < idFeature.Count; i++) { for (int j = 0; j < idFeature[i].Count; j++) { processFeature(idFeature[i][j], listChar, ref charCount); } } for (int i = 0; i < charCount.Count - 1; i++) if (charCount[i] > 0) { for (int j=i + 1; j<charCount.Count; j++) if (charCount[j] > 0) { if (hasRelation(listChar[i], listChar[j])) { charCount[i] += (int)(charCount[i] / 2); charCount[j] += (int)(charCount[j] / 2); } } } for (int i = 0; i < charCount.Count; i++) for (int j=i+1; j<charCount.Count; j++) if (charCount[i] < charCount[j]) { int c = charCount[i]; charCount[i] = charCount[j]; charCount[j] = c; c = listChar[i]; listChar[i] = listChar[j]; listChar[j] = c; String tmp = str[i]; str[i] = str[j]; str[j] = tmp; } List resultIdx = new List(); for (int i = 0; i < charCount.Count; i++) if (charCount[i] > 0) { if (canAdd(resultIdx, listChar[i])) resultIdx.Add(i); } else break; rtb_TinhCach.Text = "Người này có tính cách: "; for (int i = 0; i < resultIdx.Count; i++) { rtb_TinhCach.Text += str[resultIdx[i]] + ", "; } } private bool hasRelation(int _id1, int _id2) { BoiToanDataSet.tbl_CharacterRelationDataTable tbl = new BoiToanDataSet.tbl_CharacterRelationDataTable(); BoiToanDataSetTableAdapters.tbl_CharacterRelationTableAdapter adap = new BoiToan.BoiToanDataSetTableAdapters.tbl_CharacterRelationTableAdapter(); adap.FillBy2ID(tbl, _id1, _id2); if (tbl.Rows.Count > 0) if (tbl.Rows[0][tbl.relation_typeColumn].ToString() == CharacterRelation.QH_TUONG_HO.ToString()) return true; adap.FillBy2ID(tbl, _id2, _id1); if (tbl.Rows.Count > 0) if (tbl.Rows[0][tbl.relation_typeColumn].ToString() == CharacterRelation.QH_TUONG_HO.ToString()) return true; return false; } private bool canAdd(List _listIdx, int _id) { BoiToanDataSet.tbl_CharacterRelationDataTable tbl = new BoiToanDataSet.tbl_CharacterRelationDataTable(); BoiToanDataSetTableAdapters.tbl_CharacterRelationTableAdapter adap = new BoiToan.BoiToanDataSetTableAdapters.tbl_CharacterRelationTableAdapter(); adap.ClearBeforeFill = true; for (int i = 0; i < _listIdx.Count; i++) { adap.FillBy2ID(tbl, listChar[_listIdx[i]], _id); if (tbl.Count > 0) { if (tbl.Rows[0][tbl.relation_typeColumn].ToString() == CharacterRelation.QH_DOI_LAP.ToString()) return false; } adap.FillBy2ID(tbl, _id, listChar[_listIdx[i]]); if (tbl.Count > 0) { if (tbl.Rows[0][tbl.relation_typeColumn].ToString() == CharacterRelation.QH_DOI_LAP.ToString()) return false; } } return true; } private void processFeature(int _idFeature, List _idCharList, ref List _countList) { BoiToanDataSet.tbl_FeatureRelationDataTable tbl = new BoiToanDataSet.tbl_FeatureRelationDataTable(); BoiToanDataSetTableAdapters.tbl_FeatureRelationTableAdapter adap = new BoiToan.BoiToanDataSetTableAdapters.tbl_FeatureRelationTableAdapter(); adap.FillByIdFeature(tbl, _idFeature); for (int i = 0; i < tbl.Rows.Count; i++) { try { int idChar = int.Parse(tbl.Rows[i][tbl.id_characterColumn].ToString()); int weight = int.Parse(tbl.Rows[i][tbl.weightColumn].ToString()); for (int j=0; j<_idCharList.Count; j++) if (_idCharList[j] == idChar) { _countList[j] += weight; break; } } catch {} } } private List getListCharacter(ref List charStr) { List result = new List(); BoiToanDataSet.tbl_CharactersDataTable tbl = new BoiToanDataSet.tbl_CharactersDataTable(); BoiToanDataSetTableAdapters.tbl_CharactersTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.tbl_CharactersTableAdapter(); adapter.Fill(tbl); charStr.Clear(); for (int i = 0; i < tbl.Rows.Count; i++) { try { result.Add(int.Parse(tbl.Rows[i][tbl.idColumn].ToString())); charStr.Add(tbl.Rows[i][tbl.MotaColumn].ToString()); } catch { } } return result; } private void mn_CT_Thoat_Click(object sender, EventArgs e) { this.Close(); } private void mn_CT_CSDL_Click(object sender, EventArgs e) { CSDL frm_CSDL = new CSDL(); frm_CSDL.Disposed += new EventHandler(frm_CSDL_Disposed); frm_CSDL.Show(); this.Visible = false; } private void textBox1_TextChanged(object sender, EventArgs e) { } private void tb_Search_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { doSearch(); } } private void doSearch() { MessageBox.Show("Do search"); } private void thôngTinChươngTrìnhToolStripMenuItem_Click(object sender, EventArgs e) { ThongTin frm_about = new ThongTin(); frm_about.Show(); } private void câuHỏiTrắcNToolStripMenuItem_Click(object sender, EventArgs e) { Question frm_Question = new Question(); frm_Question.Show(); } private void làmBàiToolStripMenuItem_Click(object sender, EventArgs e) { Quiz frm_Quiz = new Quiz(); frm_Quiz.Show(); this.Visible = false; frm_Quiz.Disposed += new EventHandler(frm_CSDL_Disposed); } private void cb_DacDiem_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { bt_AddFeature_Click(bt_AddFeature, new EventArgs()); } } private void bt_Close_Click(object sender, EventArgs e) { this.Dispose(); } } Form cập nhập cơ sở dữ liệu : public partial class CSDL : Form { public const int DAC_DIEM_TRAN = 0; public const int DAC_DIEM_MAT = 1; public const int DAC_DIEM_MUI = 2; public const int DAC_DIEM_MIENG = 3; public const int DAC_DIEM_TAI = 4; private BoiToanDataSet.tbl_FeaturesDataTable dt_DacDiem; private BoiToanDataSet.tbl_CharactersDataTable dt_TinhCachChuan; private int idAddFeature; public CSDL() { InitializeComponent(); } public static String correctString(String _input) { String result = ""; Char pChar = ' '; for (int i = 0; i < _input.Length; i++) { if (_input[i] == ' ' && pChar == ' ') continue; pChar = _input[i]; result += _input[i].ToString(); } return result; } private void Main_Load(object sender, EventArgs e) { this.tbl_FeatureTypeTableAdapter.Fill(this.boiToanDataSet.tbl_FeatureType); cb_Type.SelectedIndex = 0; refreshCharacters(); cb_Type_SelectedIndexChanged(cb_Type, new EventArgs()); } private void refreshCharacters() { dt_TinhCachChuan = new BoiToanDataSet.tbl_CharactersDataTable(); BoiToanDataSetTableAdapters.tbl_CharactersTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.tbl_CharactersTableAdapter(); adapter.Fill(dt_TinhCachChuan); lv_TinhCach.Items.Clear(); for (int i = 0; i < dt_TinhCachChuan.Rows.Count; i++) { ListViewItem item = new ListViewItem(i.ToString()); item.SubItems.Add(dt_TinhCachChuan.Rows[i][dt_TinhCachChuan.MotaColumn].ToString()); lv_TinhCach.Items.Add(item); } } private void cb_Type_SelectedIndexChanged(object sender, EventArgs e) { if (cb_Type.SelectedIndex < 0) return; lv_DDNhanDang.Items.Clear(); dt_DacDiem = new BoiToanDataSet.tbl_FeaturesDataTable(); BoiToanDataSetTableAdapters.tbl_FeaturesTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.tbl_FeaturesTableAdapter(); try { adapter.FillByType(dt_DacDiem, int.Parse(cb_Type.SelectedValue.ToString())); } catch { } for (int i = 0; i < dt_DacDiem.Rows.Count; i++) { ListViewItem item = new ListViewItem(i.ToString()); item.SubItems.Add(dt_DacDiem.Rows[i][dt_DacDiem.MotaColumn].ToString()); item.SubItems.Add(getHasCharaters(int.Parse(dt_DacDiem.Rows[i][dt_DacDiem.idColumn].ToString()))); lv_DDNhanDang.Items.Add(item); } } private String getHasCharaters(int _id_feature) { String result = ""; BoiToanDataSet.view_FeatureRelationDataTable tbl = new BoiToanDataSet.view_FeatureRelationDataTable(); BoiToanDataSetTableAdapters.view_FeatureRelationTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.view_FeatureRelationTableAdapter(); adapter.FillByFeatureID(tbl, _id_feature); for (int i = 0; i < tbl.Rows.Count; i++) { if (tbl.Rows[i][tbl.weightColumn].ToString() == "2") { result += tbl.Rows[i][tbl.MotaColumn].ToString() + ", "; } } return result; } private void bt_ThemTC_Click(object sender, EventArgs e) { InputText frm_input = new InputText(); frm_input.Finished += new InputText.EventUpdate(frm_input_Finished); frm_input.Show(); } private void frm_input_Finished(object sender, String _value) { BoiToanDataSetTableAdapters.tbl_CharactersTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.tbl_CharactersTableAdapter(); int i = 0; String tmp = adapter.getMaxID().ToString(); if (!(tmp == "")) i = int.Parse(tmp) + 1; _value = correctString(_value.Trim()); if (adapter.GetDataByMota(_value).Rows.Count > 0) { MessageBox.Show("Đã tồn tại tính cách này!"); return; } adapter.Insert(i, _value); refreshCharacters(); } private void bt_XoaTC_Click(object sender, EventArgs e) { if (lv_TinhCach.SelectedIndices.Count == 0) return; BoiToanDataSetTableAdapters.tbl_CharactersTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.tbl_CharactersTableAdapter(); try { int id = int.Parse(dt_TinhCachChuan.Rows[lv_TinhCach.SelectedIndices[0]][dt_TinhCachChuan.idColumn].ToString()); BoiToanDataSetTableAdapters.tbl_FeatureRelationTableAdapter featureAdap = new BoiToan.BoiToanDataSetTableAdapters.tbl_FeatureRelationTableAdapter(); featureAdap.DeleteByCharacterID(id); BoiToanDataSetTableAdapters.tbl_CharacterRelationTableAdapter charAdap = new BoiToan.BoiToanDataSetTableAdapters.tbl_CharacterRelationTableAdapter(); featureAdap.DeleteByCharacterID(id); String mota = dt_TinhCachChuan.Rows[lv_TinhCach.SelectedIndices[0]][dt_TinhCachChuan.MotaColumn].ToString(); adapter.Delete(id, mota); } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); } refreshCharacters(); cb_Type_SelectedIndexChanged(cb_Type, new EventArgs()); } private void bt_ChiTietTC_Click(object sender, EventArgs e) { CharacterRelation frm_Relation = new CharacterRelation(); frm_Relation.Show(); } private void lv_TinhCach_MouseDoubleClick(object sender, MouseEventArgs e) { bt_ChiTietTC_Click(sender, new EventArgs()); } private void bt_AddFeature_Click(object sender, EventArgs e) { if (cb_Type.SelectedIndex < 0) return; InputText frm_inputFeature = new InputText(); frm_inputFeature.Finished += new InputText.EventUpdate(frm_inputFeature_Finished); frm_inputFeature.Show(); idAddFeature = int.Parse(cb_Type.SelectedValue.ToString()); } private void frm_inputFeature_Finished(object sender, String _value) { BoiToanDataSetTableAdapters.tbl_FeaturesTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.tbl_FeaturesTableAdapter(); try { int newID = int.Parse(adapter.getMaxID().ToString()) + 1; _value = correctString(_value.Trim()); if (adapter.GetDataByMota(_value, idAddFeature).Rows.Count > 0) { MessageBox.Show("Đã tồn tại đặc điểm này!"); return; } adapter.Insert(newID, _value, idAddFeature); } catch { } cb_Type_SelectedIndexChanged(cb_Type, new EventArgs()); } private void bt_RemoveFeature_Click(object sender, EventArgs e) { if (lv_DDNhanDang.SelectedItems.Count <= 0) return; int idx = lv_DDNhanDang.SelectedIndices[0]; try { int id = int.Parse(dt_DacDiem.Rows[idx][dt_DacDiem.idColumn].ToString()); BoiToanDataSetTableAdapters.tbl_FeatureRelationTableAdapter featureAdap = new BoiToan.BoiToanDataSetTableAdapters.tbl_FeatureRelationTableAdapter(); featureAdap.DeleteByFeatureID(id); BoiToanDataSetTableAdapters.tbl_FeaturesTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.tbl_FeaturesTableAdapter(); adapter.DeleteByID(id); } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); } cb_Type_SelectedIndexChanged(cb_Type, new EventArgs()); } private void bt_DetailFeature_Click(object sender, EventArgs e) { FeaturesRelation frm_Relation = new FeaturesRelation(); frm_Relation.Disposed += new EventHandler(frm_Relation_Disposed); frm_Relation.Show(); } private void frm_Relation_Disposed(object sender, EventArgs e) { cb_Type_SelectedIndexChanged(cb_Type, new EventArgs()); } } Form thiết lập mối quan hệ giữa các tính cách : public partial class CharacterRelation : Form { public const int QH_DOI_LAP = 0; public const int QH_TUONG_HO = 1; private int idTinhCach; private List listID; public CharacterRelation() { InitializeComponent(); listID = new List(); } private void Main_Load(object sender, EventArgs e) { this.tbl_CharactersTableAdapter.Fill(this.boiToanDataSet.tbl_Characters); if (cb_TinhCach.Items.Count > 0) { cb_TinhCach.SelectedIndex = 0; cb_TinhCach_SelectedIndexChanged(cb_TinhCach, new EventArgs()); } } private void bt_ThemTC_Click(object sender, EventArgs e) { InputCharactersRelation frm_InputRelation = new InputCharactersRelation(); frm_InputRelation.Show(); frm_InputRelation.Disposed += new EventHandler(frm_InputRelation_Disposed); } private void frm_InputRelation_Disposed(object sender, EventArgs e) { cb_TinhCach_SelectedIndexChanged(cb_TinhCach, new EventArgs()); } private void bt_XoaTC_Click(object sender, EventArgs e) { if (lv_TinhCach.SelectedItems.Count <= 0) return; int idx = lv_TinhCach.SelectedIndices[0]; try { BoiToanDataSetTableAdapters.tbl_CharacterRelationTableAdapter adap = new BoiToan.BoiToanDataSetTableAdapters.tbl_CharacterRelationTableAdapter(); adap.DeleteBy2Id(int.Parse(cb_TinhCach.SelectedValue.ToString()), listID[idx]); adap.DeleteBy2Id(listID[idx], int.Parse(cb_TinhCach.SelectedValue.ToString())); } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); } cb_TinhCach_SelectedIndexChanged(cb_TinhCach, new EventArgs()); } private void cb_TinhCach_SelectedIndexChanged(object sender, EventArgs e) { if (cb_TinhCach.SelectedIndex == -1) return; lv_TinhCach.Items.Clear(); BoiToanDataSetTableAdapters.view_getRelationTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.view_getRelationTableAdapter(); BoiToanDataSet.view_getRelationDataTable tbl = new BoiToanDataSet.view_getRelationDataTable(); adapter.Fill(tbl); listID.Clear(); for (int i = 0; i < tbl.Rows.Count; i++) { if (tbl.Rows[i][tbl.id_char1Column].ToString() == cb_TinhCach.SelectedValue.ToString()) { ListViewItem item = new ListViewItem(lv_TinhCach.Items.Count.ToString()); item.SubItems.Add(tbl.Rows[i][tbl.Expr1Column].ToString()); item.SubItems.Add(tbl.Rows[i][tbl.Expr2Column].ToString()); lv_TinhCach.Items.Add(item); listID.Add(int.Parse(tbl.Rows[i][tbl.id_char2Column].ToString())); } else if (tbl.Rows[i][tbl.id_char2Column].ToString() == cb_TinhCach.SelectedValue.ToString()) { ListViewItem item = new ListViewItem(lv_TinhCach.Items.Count.ToString()); item.SubItems.Add(tbl.Rows[i][tbl.MotaColumn].ToString()); item.SubItems.Add(tbl.Rows[i][tbl.Expr2Column].ToString()); lv_TinhCach.Items.Add(item); listID.Add(int.Parse(tbl.Rows[i][tbl.id_char1Column].ToString())); } } } } Form thiết lập mối quan hệ giữa đặc điểm khuôn mặt và tính cách : public partial class FeaturesRelation : Form { BoiToanDataSet.view_FeatureRelationDataTable tbl_Relation; public FeaturesRelation() { InitializeComponent(); } private void Main_Load(object sender, EventArgs e) { this.tbl_FeatureTypeTableAdapter.Fill(this.boiToanDataSet.tbl_FeatureType); cb_Type.SelectedIndex = 0; refreshCharacters(); cb_Type_SelectedIndexChanged(cb_Type, new EventArgs()); } private void refreshCharacters() { } private void cb_Type_SelectedIndexChanged(object sender, EventArgs e) { if (cb_Type.SelectedIndex < 0) return; BoiToanDataSet.tbl_FeaturesDataTable dataTable = new BoiToanDataSet.tbl_FeaturesDataTable(); BoiToanDataSetTableAdapters.tbl_FeaturesTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.tbl_FeaturesTableAdapter(); adapter.FillByType(dataTable, int.Parse(cb_Type.SelectedValue.ToString())); cb_DacDiem.DisplayMember = dataTable.MotaColumn.ColumnName; cb_DacDiem.ValueMember = dataTable.idColumn.ColumnName; cb_DacDiem.DataSource = dataTable; } private void bt_AddFeature_Click(object sender, EventArgs e) { InputFeatureRelation frm_InputRelation = new InputFeatureRelation(); frm_InputRelation.Finished += new InputFeatureRelation.EventUpdate(frm_InputRelation_Finished); frm_InputRelation.Show(); } private void frm_InputRelation_Finished(object sender) { cb_DacDiem_SelectedIndexChanged(cb_DacDiem, new EventArgs()); } private void cb_DacDiem_SelectedIndexChanged(object sender, EventArgs e) { if (cb_DacDiem.SelectedIndex 0) return; lv_DDNhanDang.Items.Clear(); tbl_Relation = new BoiToanDataSet.view_FeatureRelationDataTable(); BoiToanDataSetTableAdapters.view_FeatureRelationTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.view_FeatureRelationTableAdapter(); adapter.FillByFeatureID(tbl_Relation, int.Parse(cb_DacDiem.SelectedValue.ToString())); for (int i = 0; i < tbl_Relation.Rows.Count; i++) { ListViewItem item = new ListViewItem(i.ToString()); item.SubItems.Add(tbl_Relation.Rows[i][tbl_Relation.MotaColumn].ToString()); int weight = int.Parse(tbl_Relation.Rows[i][tbl_Relation.weightColumn].ToString()); String qh = "Có"; if (weight == -1) qh = "Không có"; item.SubItems.Add(qh); lv_DDNhanDang.Items.Add(item); } } private void bt_RemoveFeature_Click_1(object sender, EventArgs e) { if (lv_DDNhanDang.SelectedItems.Count <= 0) return; try { int idx = lv_DDNhanDang.SelectedIndices[0]; int id_feature = int.Parse(tbl_Relation.Rows[idx][tbl_Relation.id_featureColumn].ToString()); int id_character = int.Parse(tbl_Relation.Rows[idx][tbl_Relation.id_characterColumn].ToString()); BoiToanDataSetTableAdapters.tbl_FeatureRelationTableAdapter adapter = new BoiToan.BoiToanDataSetTableAdapters.tbl_FeatureRelationTableAdapter(); adapter.DeleteByID(id_feature, id_character); } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); } cb_DacDiem_SelectedIndexChanged(cb_DacDiem, new EventArgs()); } } IV.4 Đánh giá chương trình a) Ưu điểm : Cách sử dụng hoàn toàn đơn giản, dễ hiểu. Chương trình đã cơ bản xử lý được tình huống “2 hoặc nhiều đặc điểm trên 1 khuôn mặt lại chỉ ra những tính cách giống hệt nhau và đặc biệt là trái ngược nhau”. Các luật trong cơ sở trí thức là khá lớn và ràng buộc được xây dựng chặt chẽ. Cơ sở tri thức được xây dựng đảm bảo cho việc xử lý cập nhập thông tin thuận tiện. b) Hạn chế : Giao diện chương trình chưa thật đặc sắc, chưa thật thân thiện với người dùng (ép người dùng lựa chọn những đặc điểm thông qua ComboBox). Chương trình mới chỉ đưa ra các phỏng đoán thông qua ngũ quan trên khuôn mặt chứ chưa bao quát được những đặc điểm khác như nốt ruồi, khóe miệng hay như lưỡng quyền (gò má)... Ngoài ra, hệ thống chưa có cơ sở dữ liệu về hình ảnh giúp cho người dùng có thể hình dung ra những đặc điểm trên khuôn mặt một cách rõ nét. c) Hướng phát triển : Tăng tính thân thiện của giao diện bằng việc cho phép người dùng chủ động hơn trong việc đưa vào các dữ liệu. Thu thập và xử lý thêm các đặc điểm khác ngoài ngũ quan đã có sẵn như nốt ruồi, lưỡng quyền, lông mày… Xây dựng thêm cơ sở tri thức về hình ảnh minh họa cụ thể những đặc điểm trên khuôn mặt con người. KẾT LUẬN ***oOo*** Sự kết hợp giữa cái cổ xưa “Nhân tướng học” và khái niệm hiện đại mới mẻ “Hệ chuyên gia” sẽ tạo ra một công cụ hữu ích phục vụ đắc lực cho con người trong việc “tri kỷ, tri bỉ”. Từ đó, mối quan hệ giữa người với người sẽ được tăng cường, phát triển và duy trì hài hòa. Với sự giúp đỡ của các thầy cô trong khoa Công Nghệ Thông Tin trường Đại Học Hàng Hải, đặc biệt là sự chỉ bảo cặn kẽ của thầy Nguyễn Trọng Đức, trên cơ sở những kiến thức có được trong quá trình học tập và thời gian nghiên cứu vừa qua em đã hoàn thành luận văn tốt nghiệp của mình đúng tiến độ. Một lần nữa em xin chân thành cám ơn các bạn, quý thầy cô đặc biệt là thầy Nguyễn Trọng Đức đã tận tình chỉ bảo, giúp đỡ để em hoàn thành đề tài này. Tài liệu tham khảo: Nguyễn Thanh Thuỷ, Hệ chuyên gia, NXB Giáo dục Nguyễn Thanh Thủy, Trí tuệ nhân tạo, NXB Khoa học và kỹ thuật. Đậu Quang Tuấn, Tự học lập trình hướng đối tượng & lập trình cơ sở dữ liệu C#, NXB Giao thông vận tải. Phan Huy Khánh, Giáo trình hệ chuyên gia, Đại học Đà Nẵng Demente, Cá tính thể hiện trên khuôn mặt người Châu Á, NXB Từ điển Bách Khoa. Việt Chương, Vận dụng khoa Nhân tướng học trong ứng xử & quản lý, NXB Văn hoá Thông tin.

Các file đính kèm theo tài liệu này:

  • docÁP DỤNG MÔ HÌNH HỆ CHUYÊN GIA XÂY DỰNG CHƯƠNG TRÌNH ĐOÁN NHẬN TÍNH CÁCH NGƯỜI QUA ĐẶC TẢ KHUÔN MẶT.doc
Tài liệu liên quan