Dữ liệu mờ. Ứng dụng thực tế của logic mờ

cơ chế tư duy, nhận thấy rằng trên thực tế không chỉ có một logic (ví dụ: Boolean), mà có nhiều logic như chúng ta mong muốn, bởi vì mọi thứ đều được quyết định bởi việc lựa chọn hệ thống tiên đề thích hợp. Tất nhiên, một khi các tiên đề được chọn, mọi phát biểu được xây dựng trên cơ sở của chúng phải chặt chẽ, không mâu thuẫn, liên kết với nhau theo các quy tắc được thiết lập trong hệ thống tiên đề này.

Tư duy của con người là sự kết hợp giữa trực giác và sự chặt chẽ, một mặt, nó nhìn thế giới như một tổng thể hoặc bằng cách loại suy, mặt khác, một cách hợp lý và nhất quán và do đó, thể hiện một cơ chế mờ nhạt. Các quy luật tư duy mà chúng ta muốn đưa vào các chương trình máy tính nhất thiết phải có tính hình thức; các quy luật tư duy thể hiện trong đối thoại giữa con người với con người là không rõ ràng. Do đó chúng ta có thể nói rằng logic mờ có thể thích ứng tốt với cuộc đối thoại của con người không? Có - nếu phần mềm, được phát triển có tính đến logic mờ, sẽ đi vào hoạt động và có thể được triển khai về mặt kỹ thuật, khi đó giao tiếp giữa người và máy sẽ trở nên thuận tiện hơn, nhanh hơn và phù hợp hơn để giải quyết vấn đề.

Thuật ngữ " lập luận mờ" thường được dùng với hai nghĩa khác nhau. Trong theo nghĩa hẹp, logic mờ là phép tính logic, là phần mở rộng của logic nhiều giá trị. Trong cô ấy theo nghĩa rộng, vốn được sử dụng phổ biến hiện nay, logic mờ tương đương với lý thuyết tập mờ. Từ quan điểm này, logic mờ theo nghĩa hẹp là một nhánh của logic mờ theo nghĩa rộng.

Sự định nghĩa. Bất kì biến mờđặc trưng bởi ba

Tên của biến ở đâu, - bộ phổ quát, là tập con mờ của tập hợp, biểu thị ràng buộc mờ về giá trị của biến, được điều hòa bởi .

Sử dụng sự tương tự của một chiếc túi du lịch, biến mờ có thể được ví như một chiếc túi du lịch có nhãn có thành “mềm”. Sau đó - dòng chữ trên nhãn (tên của túi), - danh sách các vật phẩm mà về nguyên tắc có thể được đặt trong túi và - một phần của danh sách này, trong đó mỗi vật phẩm được chỉ định một số, đặc trưng cho mức độ dễ dàng để đồ vật đó vào trong túi.

Bây giờ chúng ta hãy xem xét các cách tiếp cận khác nhau để xác định các hoạt động cơ bản trên biến mờ, cụ thể là kết hợp, phân tách và phủ định. Những phép toán này là nền tảng của logic mờ theo nghĩa là tất cả các cấu trúc của nó đều dựa trên những phép toán này. Hiện nay trong logic mờ như hoạt động kết hợp và sự tách rời sử dụng rộng rãi -norms và -conorms, vốn đi đến logic mờ từ lý thuyết về không gian số liệu xác suất. Chúng được nghiên cứu khá kỹ lưỡng và tạo thành nền tảng cho nhiều cấu trúc hình thức của logic mờ. Đồng thời, việc mở rộng phạm vi ứng dụng của logic mờ và khả năng mô hình hóa mờ đòi hỏi phải khái quát hóa các hoạt động này. Một hướng liên quan đến việc làm suy yếu các tiên đề của chúng để mở rộng các công cụ mô hình hóa mờ. Một hướng khái quát hóa khác hoạt động kết hợp và sự tách biệt của logic mờ có liên quan đến việc thay thế tập hợp các giá trị thành viên bằng một tập hợp đánh giá độ tin cậy ngôn ngữ được sắp xếp tuyến tính hoặc một phần. Một mặt, những khái quát hóa các hoạt động cơ bản của logic mờ này là do nhu cầu phát triển các hệ thống chuyên gia trong đó các giá trị chân lý của các sự kiện và quy tắc được mô tả trực tiếp bởi một chuyên gia hoặc người dùng trên thang đo ngôn ngữ và có tính chất có tính chất chất lượng. Mặt khác, những khái quát hóa như vậy là do sự chuyển dịch theo hướng phát triển tích cực của logic mờ từ mô hình hóa các quá trình định lượng có thể đo lường được sang mô hình hóa các quá trình tư duy của con người, trong đó nhận thức về thế giới và ra quyết định diễn ra trên cơ sở tổng hợp thông tin và tính toán bằng lời.

Sự khái quát hóa tự nhiên của các phép toán phủ định liên quan của logic mờ là các phủ định không liên quan. Chúng được quan tâm độc lập và được xem xét trong logic mờ và logic phi cổ điển khác. Nhu cầu nghiên cứu các hoạt động phủ định như vậy cũng xuất phát từ việc đưa vào xem xét các khái niệm tổng quát hoạt động kết hợp và sự phân tách được kết nối với nhau bằng cách sử dụng phép toán phủ định.

S.D.Shtovba "Giới thiệu lý thuyết tập mờ và logic mờ"

1.7. Lập luận mờ

Logic mờ là sự khái quát hóa của logic Aristoteles truyền thống cho trường hợp chân lý được coi là một biến ngôn ngữ nhận các giá trị như: “rất đúng”, “ít nhiều đúng”, “không sai lắm”, v.v. Các ý nghĩa ngôn ngữ cụ thể được thể hiện bằng các tập mờ.

1.7.1. Biến ngôn ngữ

Chúng ta hãy nhớ lại rằng một biến ngôn ngữ là một biến nhận các giá trị từ một tập hợp các từ hoặc cụm từ tự nhiên hoặc ngôn ngữ nhân tạo. Một loạt giá trị chấp nhận được một biến ngôn ngữ được gọi là một tập thuật ngữ. Việc đặt giá trị của biến bằng chữ, không sử dụng số, là điều tự nhiên hơn đối với con người. Hàng ngày chúng ta đưa ra quyết định dựa trên thông tin ngôn ngữ như: “rất nhiệt"; "chuyến đi dài"; "phản hồi nhanh"; " bó hoa đẹp";"hương vị hài hòa", v.v. Các nhà tâm lý học đã phát hiện ra rằng ở bộ não con người gần như tất cả thông tin sốđược mã hóa lại bằng lời nói và được lưu trữ dưới dạng các thuật ngữ ngôn ngữ. Khái niệm biến ngôn ngữ đóng vai trò quan trọng trong suy luận mờ và ra quyết định dựa trên suy luận gần đúng. Về mặt hình thức, một biến ngôn ngữ được định nghĩa như sau.

Định nghĩa 44.Biến ngôn ngữđược cho bởi năm, trong đó -; tên biến; - ; tập thuật ngữ, mỗi phần tử trong đó (thuật ngữ) được biểu diễn dưới dạng tập mờ trên tập phổ quát; - ; quy tắc cú pháp, thường ở dạng ngữ pháp, làm phát sinh tên của các thuật ngữ; - ; các quy tắc ngữ nghĩa xác định các hàm thành viên của các thuật ngữ mờ được tạo ra bởi các quy tắc cú pháp.

Ví dụ 9. Hãy xem xét một biến ngôn ngữ gọi là "nhiệt độ phòng". Khi đó bốn phần còn lại có thể được định nghĩa như sau:

Bảng 4 - Quy tắc tính hàm thành viên

Đồ thị hàm thành viên của các thuật ngữ “lạnh”, “không lạnh lắm”, “thoải mái”, “thoải mái ít nhiều”, “nóng” và “rất nóng” của biến ngôn ngữ “nhiệt độ phòng” được hiển thị trong Hình 2. 13.

Hình 13 - Biến ngôn ngữ “nhiệt độ phòng”

1.7.2. Sự thật mờ nhạt

Một vị trí đặc biệt trong logic mờ bị chiếm bởi biến ngôn ngữ “sự thật”. Trong logic cổ điển, sự thật chỉ có thể mang hai nghĩa: đúng và sai. Trong logic mờ, sự thật là "mờ". Chân lý mờ được định nghĩa theo tiên đề và các tác giả khác nhau thực hiện điều đó theo những cách khác nhau. Khoảng được sử dụng như một tập hợp phổ quát để xác định biến ngôn ngữ "sự thật". Sự thật rõ ràng, thông thường có thể được biểu diễn bằng các tập đơn lẻ mờ. Trong trường hợp này, một khái niệm rõ ràng sẽ thực sự tương ứng với hàm thành viên , và khái niệm rõ ràng là sai -; , .

Để định nghĩa chân lý mờ, Zadeh đề xuất các hàm thành viên sau đây cho các thuật ngữ “đúng” và “sai”:

;

Ở đâu - ; một tham số xác định các sóng mang của tập mờ “true” và “false”. Đối với tập mờ “đúng” sóng mang sẽ là khoảng , và đối với tập mờ “sai” - ;

Hàm thành viên của các thuật ngữ mờ “true” và “false” được chỉ ra trong hình 2. 14. Chúng được xây dựng với giá trị tham số . Như bạn có thể thấy, đồ thị hàm thành viên của các thuật ngữ “true” và “false” là hình ảnh phản chiếu.

Hình 14 - Biến ngôn ngữ “sự thật” theo Zadeh

Để định nghĩa chân lý mờ, Baldwin đề xuất các hàm thành viên sau đây cho mờ “đúng” và “sai”:

Các bộ định lượng “nhiều hay ít” và “rất” thường được áp dụng cho các tập mờ “true” và “false”, do đó thu được các thuật ngữ “rất sai”, “ít nhiều sai”, “đúng ít hơn”, “ rất đúng”, “rất, rất đúng”, “rất, rất sai”, v.v. Hàm thành viên của các số hạng mới thu được bằng cách thực hiện các phép toán tập trung và kéo giãn các tập mờ “đúng” và “sai”. Hoạt động tập trung tương ứng với bình phương hàm thành viên, và hoạt động kéo dài tương ứng với việc nâng nó lên lũy thừa ½. Do đó, các hàm thành viên của các thuật ngữ “rất, rất sai”, “rất sai”, “ít nhiều sai”, “đúng ít nhiều”, “đúng”, “rất đúng” và “rất, rất đúng” là được đưa ra như sau:

Đồ thị hàm thành viên của các số hạng này được thể hiện trong Hình 2. 15.

Hình 15 - Biến ngôn ngữ “sự thật” theo Baldwin

1.7.3. Các phép toán logic mờ

Đầu tiên, hãy nhớ lại ngắn gọn các nguyên tắc cơ bản của logic thông thường (Boolean). Xét hai câu A và B, mỗi câu có thể đúng hoặc sai, tức là lấy giá trị "1" hoặc "0". Tổng cộng hai câu lệnh này có nhiều phép toán logic khác nhau, trong đó chỉ có năm phép toán được diễn giải một cách có ý nghĩa: AND (), OR (), OR loại trừ (), hàm ý () và tương đương (). Bảng chân lý cho các phép toán này được đưa ra trong bảng. 5.

Bảng 5 - Bảng chân trị của logic Boolean

Giả sử rằng một câu lệnh logic có thể không có hai giá trị chân lý mà là ba giá trị, ví dụ: “true”, “false” và “uncertain”. Trong trường hợp này, chúng ta sẽ xử lý không phải với logic hai giá trị mà với logic ba giá trị. Tổng cộng hoạt động nhị phân và do đó, các bảng chân lý, trong logic ba giá trị bằng . Logic mờ là một loại logic đa giá trị trong đó các giá trị chân lý được xác định bằng các biến ngôn ngữ hoặc các thuật ngữ của biến ngôn ngữ “chân lý”. Các quy tắc thực hiện các phép toán logic mờ được lấy từ các phép toán logic Boolean sử dụng nguyên tắc tổng quát hóa.

Định nghĩa 45. Chúng ta hãy biểu thị các biến logic mờ bằng và , và các hàm thành viên xác định giá trị thực của các biến này bằng và , . Các phép toán logic mờ VÀ(), HOẶC(),
NOT() và hàm ý() được thực hiện theo quy tắc sau:

;

TRONG logic đa giá trị các phép toán logic có thể được xác định bằng bảng chân lý. Trong logic mờ, số lượng giá trị đúng có thể là vô hạn, do đó trong nhìn chung xem bảng không thể thực hiện được các thao tác logic. Tuy nhiên, trong dạng bảng có thể biểu diễn các phép toán logic mờ cho một số giá trị chân lý giới hạn, chẳng hạn như đối với một tập hợp thuật ngữ (“đúng”, “rất đúng”, “không đúng”, “ít nhiều sai”, “sai”). Đối với logic ba giá trị có giá trị chân lý mờ T - ; "đúng", F - ; “false” và T+F - “unknown” L. Zade đề xuất các bảng chân lý ngôn ngữ sau:

Bằng cách áp dụng các quy tắc để thực hiện các phép toán logic mờ từ Định nghĩa 45, chúng ta có thể mở rộng các bảng chân trị cho hơnđiều kiện Hãy xem cách thực hiện việc này bằng ví dụ sau.

Ví dụ 10. Cho các giá trị chân lý mờ sau:

Áp dụng quy tắc từ Định nghĩa 45, chúng ta tìm được tính đúng mờ của biểu thức “gần đúng HOẶC đúng”:

Chúng ta hãy so sánh tập mờ thu được với tập mờ “đúng ít nhiều”. Chúng gần như bằng nhau, có nghĩa là:

Kết quả của việc thực hiện các phép toán logic là một tập mờ thường thu được không tương đương với bất kỳ giá trị chân lý mờ nào được giới thiệu trước đó. Trong trường hợp này, cần tìm trong số các giá trị chân lý mờ một giá trị tương ứng với kết quả thực hiện phép toán logic mờ trong mức độ tối đa. Nói cách khác, cần phải thực hiện cái gọi là sự gần đúng về mặt ngôn ngữ, có thể được coi là tương tự như sự gần đúng của phân phối thống kê thực nghiệm bằng hàm phân phối chuẩn của các biến ngẫu nhiên. Để làm ví dụ, chúng tôi trình bày các bảng chân lý ngôn ngữ do Baldwin đề xuất cho những bảng được hiển thị trong Hình. 15 giá trị chân lý mờ:

mơ hồ

mơ hồ

mơ hồ

mơ hồ

mơ hồ

mơ hồ

mơ hồ

mơ hồ

rất đúng

rất đúng

ít nhiều đúng

ít nhiều đúng

1.7.3. Cơ sở kiến ​​thức mờ

Định nghĩa 46.Cơ sở kiến ​​thức mờ là một tập hợp các quy tắc mờ “Nếu-thì” xác định mối quan hệ giữa đầu vào và đầu ra của đối tượng đang nghiên cứu. Dạng tổng quát của luật mờ là:

Nếu nhưquy tắc gói,Cái đókết luận của quy tắc.

Tiền đề của quy tắc hoặc tiền đề là một phát biểu kiểu như “x is low”, trong đó “low” là một thuật ngữ (ý nghĩa ngôn ngữ) được xác định bởi một tập mờ trên tập phổ biến của biến ngôn ngữ x. Các từ định lượng “rất”, “nhiều hơn hoặc ít hơn”, “không”, “gần như”, v.v. có thể được sử dụng để sửa đổi các điều khoản trước đó.

Kết luận hoặc hệ quả của một quy tắc là một câu lệnh như “y là d”, trong đó giá trị của biến đầu ra (d) có thể được đưa ra:

  1. thuật ngữ mờ: “y cao”;
  2. nhóm giải pháp: “y bị viêm phế quản”
  3. một hằng số rõ ràng: "y=5";
  4. một hàm rõ ràng của các biến đầu vào: "y=5+4*x".

Nếu giá trị của biến đầu ra trong một quy tắc được xác định bởi một tập mờ thì quy tắc đó có thể được biểu diễn bằng một quan hệ mờ. Đối với quy tắc mờ “Nếu x thì y là”, quan hệ mờ được xác định trên tích Descartes, trong đó -; tập hợp phổ quát của biến đầu vào (đầu ra). Hàm ý mờ và t-norm có thể được sử dụng để tính toán một quan hệ mờ. Khi sử dụng phép toán tìm cực tiểu làm t-norm, việc tính quan hệ mờ được thực hiện như sau:

Ví dụ 11. Cơ sở tri thức mờ sau đây mô tả mối quan hệ giữa tuổi của người lái xe (x) và khả năng xảy ra tai nạn giao thông (y):

Nếu nhưx = Trẻ,Cái đóy = Cao;

Nếu nhưx = Trung bình,Cái đóy = Thấp;

Nếu nhưx = Rất cũ,Cái đóy = Cao.

Giả sử các hàm thành viên của các số hạng có dạng như trong Hình. 16. Khi đó các quan hệ mờ tương ứng với các luật của cơ sở tri thức sẽ như Hình 2. 17.

Hình 16 - Hàm thành viên kỳ hạn

Hình 17 - Quan hệ mờ tương ứng với các luật của cơ sở tri thức từ ví dụ 11

Để xác định sự phụ thuộc đầu vào-đầu ra đa chiều, các phép toán logic mờ AND và OR được sử dụng. Sẽ rất thuận tiện khi xây dựng các quy tắc sao cho trong mỗi quy tắc, các biến được kết hợp bằng phép toán logic AND và các quy tắc trong cơ sở kiến ​​thức được kết nối bằng phép toán OR. Trong trường hợp này, cơ sở tri thức mờ kết nối các đầu vào với đầu ra , có thể được biểu diễn dưới dạng sau.

Một bài viết tiêu chuẩn về logic mờ thường gặp phải hai vấn đề:

  1. Trong 99% trường hợp, bài viết chỉ đề cập đến việc ứng dụng logic mờ trong bối cảnh các tập mờ, hay đúng hơn là suy luận mờ, và chính xác hơn là thuật toán Mamdani. Có vẻ như đây là cách duy nhất có thể áp dụng logic mờ, nhưng thực tế không phải vậy.
  2. Hầu như bài viết luôn được viết bằng ngôn ngữ toán học. Tuyệt vời, nhưng các lập trình viên sử dụng một ngôn ngữ khác với các ký hiệu khác. Vì vậy, hóa ra bài viết này đơn giản là không thể hiểu được đối với những người có vẻ hữu ích.
Tất cả những điều này thật đáng buồn, bởi logic mờ là một trong những thành tựu vĩ đại nhất của toán học thế kỷ 20, nếu lấy ứng dụng thực tế làm tiêu chí. Trong bài viết này tôi sẽ cố gắng chỉ ra cách đơn giản và công cụ đắc lực lập trình - đơn giản nhưng mạnh mẽ hơn nhiều so với hệ thống các phép toán logic thông thường.

Sự thật đáng chú ý nhất về logic mờ là nó chủ yếu logic. Ngay từ buổi đầu của logic toán học, người ta đã biết rằng bất kỳ hàm logic có thể được biểu thị phân biệt hoặc liên kết dạng bình thường, từ đó suy ra rằng để thực hiện phép tính mệnh đề, chỉ cần ba phép tính là đủ: kết hợp (&&), phân tách (||) và phủ định (!). Trong logic cổ điển, mỗi phép toán này được chỉ định bởi một bảng chân trị:

Một b || a b && a ! -------- -------- ---- 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 0 1 0 1 1 0 0 1 1 1 1 1 1
Trong logic mờ, không giống như logic cổ điển, thay vì số lượng ĐÚNG VẬYnói dối giá trị sử dụng mức độ sự thật, lấy bất kỳ giá trị nào từ một tập hợp vô hạn từ 0 đến 1. Do đó, các phép toán logic không còn có thể được biểu diễn trong bảng nữa. Trong logic mờ chúng được xác định bởi các hàm.

Có hai cách để thực hiện phép tách và kết hợp:

Cách tiếp cận #Maximin: a || b => max(a, b) a && b => min(a, b) #Phương pháp đo màu: a || b => a + b - a * b a && b => a * b
Phủ định được đưa ra theo cách duy nhất (không khó đoán):

A => 1 - a
Có thể dễ dàng kiểm tra xem đối với các trường hợp cực đoan - khi giá trị của các biến chỉ là 1 hoặc 0 - các hàm trên đưa ra bảng chân trị cho các phép toán của logic cổ điển. Sẵn sàng! Giờ đây chúng ta có logic nâng cao cực kỳ mạnh mẽ, đơn giản nhưng vẫn hoàn toàn tương thích với logic cổ điển trong các trường hợp cực đoan. Điều này có nghĩa là ở mọi nơi chúng tôi [lập trình viên] sử dụng biểu thức logic, chúng ta có thể sử dụng các biểu thức logic mờ không? Không thực sự.

Thực tế là tất cả các toán tử ngôn ngữ lập trình đều yêu cầu các điều kiện rõ ràng, vì vậy tại một thời điểm nào đó, bạn luôn phải đạt được tiêu chí kích hoạt rõ ràng từ mức độ tin cậy mờ nhạt. Điều này tương tự với những gì xảy ra ở thế giới lượng tử: Miễn là hệ thống tiến hóa theo phương trình Schrödinger, trạng thái lượng tử của nó thay đổi một cách xác định và liên tục, nhưng ngay khi chúng ta chạm vào hệ thống, một bước nhảy lượng tử xảy ra và hệ thống sụp đổ thành một trong các trạng thái rời rạc. Trong logic mờ, điều này được gọi là giải mờ. Tự nhiên chỉ đơn giản biến trạng thái lượng tử thành xác suất và tung xúc xắc, nhưng nói chung có nhiều phương pháp giải mờ khác nhau. Tôi sẽ không đi sâu hơn vào chủ đề này, vì tập của nó cần có một bài viết riêng. Tôi xin đề cập rằng phương pháp giải mờ nên được chọn có tính đến ngữ nghĩa của vấn đề.

Ví dụ, hãy tưởng tượng một hệ thống điều khiển tên lửa sử dụng logic mờ để tránh chướng ngại vật. Hãy tưởng tượng tên lửa đang bay thẳng lên núi và hệ thống điều khiển tính toán giải pháp: bay bên phải - 0,5, bay bên trái - 0,5. Nếu bạn sử dụng phương pháp giải mờ bằng phương pháp khối tâm, hệ thống điều khiển sẽ ra lệnh bay thẳng. Bùm! Rõ ràng, trong trường hợp này giải pháp đúng- tung xúc xắc và nhận lệnh “trái” hoặc “phải” với xác suất 50%.

Trong trường hợp đơn giản nhất, khi bạn cần đưa ra quyết định dựa trên mức độ đúng, bạn có thể chia tập hợp thành các khoảng và sử dụng if-else-if.

Nếu logic mờ được sử dụng để tìm kiếm bằng tiêu chí mờ thì việc giải mờ có thể không cần thiết chút nào. Bằng cách so sánh, chúng ta sẽ thu được một mức độ giá trị bằng nhau nào đó cho từng phần tử của không gian tìm kiếm. Chúng ta có thể xác định một mức độ bình đẳng tối thiểu nào đó mà dưới mức đó chúng ta không quan tâm; đối với các phần tử còn lại, mức độ bằng nhau sẽ là mức độ phù hợp, theo thứ tự giảm dần chúng tôi sẽ sắp xếp kết quả và để người dùng quyết định kết quả nào đúng.

Ví dụ: tôi sẽ cung cấp cho bạn cách sử dụng logic mờ để giải quyết một vấn đề mà tôi rất thích khi còn học đại học - đây là vấn đề tìm kiếm Hán tự theo hình ảnh.

Tôi ngay lập tức từ chối ý tưởng nhận dạng bất kỳ nét vẽ nguệch ngoạc nào do người dùng vẽ trên màn hình (khi đó là màn hình PDA). Thay vào đó, chương trình đề xuất chọn loại nét từ thứ tự 23 được xác định theo quy tắc thư pháp Nhật Bản. Sau khi chọn loại tính năng, người dùng đã vẽ một hình chữ nhật phù hợp với tính năng đó. Trên thực tế, chữ tượng hình - cả được nhập và lưu trữ trong từ điển - được biểu diễn dưới dạng một tập hợp các hình chữ nhật được xác định một loại.

Làm thế nào để xác định sự bình đẳng của chữ tượng hình trong cách biểu diễn như vậy? Để bắt đầu, chúng ta hãy xây dựng tiêu chí bằng một tuyên bố rõ ràng:

Chữ tượng hình A và B bằng nhau khi và chỉ nếu với mỗi nét trong A có một nét bằng nhau trong B và với mọi nét trong B đều có một nét bằng nhau trong A.

Người ta ngầm cho rằng chữ tượng hình không chứa các đặc điểm trùng lặp, nghĩa là nếu một đặc điểm nào đó trùng với một đặc điểm trong một chữ tượng hình khác thì nó không thể trùng với bất kỳ đặc điểm nào khác trong cùng một chữ tượng hình.

Sự bình đẳng về tính trạng có thể được định nghĩa như sau:

Các tính trạng bằng nhau khi và chỉ khi chúng cùng loại và hình chữ nhật của chúng chiếm cùng một diện tích.

Hai định nghĩa này cho chúng ta một hệ thống các câu lệnh đủ để thực hiện thuật toán tìm kiếm.

Đầu tiên ta xây dựng ma trận E như sau:

For i in 1..n for j in 1..n E = A[i] == B[j] end end #A và B là chữ tượng hình; A[i] và B[j] là các đặc điểm của chúng và toán tử "==" tính toán đẳng thức mờ của chúng. #Giả định rằng cả hai chữ tượng hình đều có cùng số lượng đặc điểm - n.
Sau đó chúng ta đóng ma trận này vào vectơ M[n]:

For i in 1..n M[i] = E.max_in_row(i) end #Phương thức max_in_row tính giá trị lớn nhất trong một hàng ma trận.
Tôi sử dụng phương pháp maximin vì trên thực tế, phương pháp đo màu tạo ra các giá trị quá nhỏ cho các liên từ. Nếu chúng ta nhớ rằng max là một phân cách thì hóa ra là chúng ta đang tính phát biểu rằng tính năng thứ i A bằng nét đầu tiên của B hoặc nét thứ hai, thứ ba, v.v. Do đó, M là vectơ so khớp giữa đặc điểm A và đặc điểm B.

#Chỉ là một sự kết hợp mờ nhạt. e = M.min #Hoặc như thế này: e = M.sum / M.length #(tỷ lệ của tổng các phần tử với độ dài của vectơ).
Cả hai phương pháp đều hoạt động nhưng theo những cách khác nhau và phương pháp thứ hai hoạt động ngay cả khi bạn so sánh rõ ràng các tính năng. Cái nào đúng hơn là một câu hỏi triết học.

Cần nói thêm một vài lời về việc so sánh các đặc điểm. Theo định nghĩa, sự bình đẳng về tính trạng là sự kết hợp của hai điều kiện: sự bình đẳng về chủng loại và sự bình đẳng về hình chữ nhật. Đặc điểm của một số loại rất giống nhau. Khi nhập, người dùng có thể dễ dàng nhầm lẫn chúng, vì vậy cần có một bảng tương tự, các giá trị của bảng này sẽ phản ánh mức độ giống nhau của đặc điểm i với đặc điểm j (tự nhiên sẽ có những bảng trên đường chéo chính). Về mức độ bằng nhau của hình chữ nhật, chúng ta có thể lấy tỷ lệ giữa diện tích giao điểm của chúng với diện tích của hình chữ nhật lớn hơn.

Nhìn chung, phạm vi của logic mờ rất rộng. Trong bất kỳ thuật toán nào, trong bất kỳ hệ thống quy tắc nào, hãy cố gắng thay thế sự thật và sự giả dối bằng mức độ sự thật và có lẽ hệ thống quy tắc hoặc thuật toán này sẽ phản ánh thực tế chính xác hơn. Rốt cuộc, chúng ta đang sống trong một thế giới về cơ bản là mờ nhạt.

Lập luận mờ (lập luận mờ ) nổi lên như là nhất Một cách thuận tiện công trình phức tạp quy trình công nghệ, và cũng đã tìm thấy ứng dụng trong điện tử dân dụng, chẩn đoán và khác những hệ thống chuyên gia. Bộ máy toán học logic mờ được phát triển lần đầu tiên ở Mỹ vào giữa những năm 60 của thế kỷ trước, phát triển tích cực phương pháp này cũng bắt đầu ở châu Âu.

Logic cổ điển đã phát triển từ thời cổ đại. Aristotle được coi là người sáng lập của nó. Logic được chúng ta biết đến như một môn khoa học chặt chẽ có nhiều ứng dụng ứng dụng: ví dụ, nguyên lý hoạt động của tất cả máy tính hiện đại. Đồng thời, logic cổ điển có một nhược điểm đáng kể - với sự trợ giúp của nó, không thể mô tả đầy đủ tư duy liên tưởng của con người. Logic cổ điển chỉ hoạt động với hai khái niệm: TRUE và FALSE (logic 1 hoặc 0) và loại trừ bất kỳ giá trị trung gian nào. Tất cả điều này là tốt cho máy tính, nhưng hãy cố gắng tưởng tượng toàn bộ thế giới xung quanh bạn chỉ có màu đen và trắng, ngoài ra, loại trừ khỏi ngôn ngữ bất kỳ câu trả lời nào cho các câu hỏi ngoài CÓ và KHÔNG. Trong hoàn cảnh như vậy, bạn chỉ có thể thông cảm.

Toán học truyền thống, với các công thức định luật chính xác và rõ ràng, cũng dựa trên logic cổ điển. Và vì toán học, đến lượt nó, lại là một công cụ phổ quát để mô tả các hiện tượng của thế giới xung quanh trong tất cả các ngành khoa học tự nhiên (vật lý, hóa học, sinh học, v.v.) và các ứng dụng ứng dụng của chúng (ví dụ: lý thuyết đo lường, lý thuyết điều khiển, v.v.). ), không có gì đáng ngạc nhiên khi tất cả các ngành khoa học này đều hoạt động với dữ liệu chính xác về mặt toán học, chẳng hạn như: “ tốc độ trung bìnhô tô chạy trên đoạn đường dài 62 km có vận tốc là 93 km/h.” Nhưng một người có thực sự suy nghĩ theo những phạm trù như vậy không? Hãy tưởng tượng rằng đồng hồ tốc độ trên ô tô của bạn bị hỏng. Phải chăng điều này có nghĩa là từ giờ trở đi bạn không còn khả năng đánh giá tốc độ di chuyển của mình và không thể trả lời những câu hỏi như “hôm qua bạn về nhà nhanh không?” Dĩ nhiên là không. Rất có thể bạn sẽ nói điều gì đó để đáp lại thông tin đầu vào: “Có, khá nhanh thôi.” Trên thực tế, rất có thể bạn sẽ trả lời với tinh thần gần như tương tự, ngay cả khi đồng hồ tốc độ trên ô tô của bạn ở trạng thái bật. theo thứ tự hoàn hảo, bởi vì khi đi du lịch, bạn không có thói quen theo dõi liên tục các chỉ số của nó theo thời gian thực. Nghĩa là, trong suy nghĩ tự nhiên của chúng ta, liên quan đến tốc độ, chúng ta có xu hướng vận hành không phải với các giá trị chính xác tính bằng km/h hoặc m/s mà với các ước tính gần đúng như: “chậm”, “trung bình”, “nhanh”. ” và vô số các bán âm và ước tính trung gian: “bị kéo lê như rùa”, “lăn chậm”, “không thoát ra khỏi dòng chảy”, “lái xe khá nhanh”, “lao như điên”, v.v.

Nếu chúng ta cố gắng diễn đạt ý tưởng trực quan của mình về tốc độ bằng đồ họa, chúng ta sẽ thu được kết quả giống như hình bên dưới.

Ở đây dọc theo trục X các giá trị tốc độ được vẽ theo ký hiệu toán học nghiêm ngặt truyền thống và dọc theo trục Y- cái gọi là chức năng thành viên (thay đổi từ 0 đến 1) giá trị tốc độ chính xác đến tập mờ , được chỉ định bởi giá trị này hoặc giá trị khác biến ngôn ngữ "tốc độ": rất thấp, thấp, trung bình, cao và rất cao. Có thể có ít hoặc nhiều cấp độ (hạt) này. Độ chi tiết của thông tin mờ càng lớn thì nó càng tiến gần đến ước tính chính xác về mặt toán học (chúng ta đừng quên rằng thông tin đo lường được thể hiện ở dạng truyền thống luôn có một số lỗi và do đó, theo một nghĩa nào đó, cũng mờ). Vì vậy, ví dụ, giá trị tốc độ 105 km/h thuộc về tập mờ “cao” với giá trị hàm thành viên là 0,8 và thuộc về tập “rất cao” với giá trị 0,5.

Một ví dụ khác là ước tính tuổi của một người. Thường thì chúng ta hoàn toàn không có thông tin chính xác về độ tuổi của người này hoặc người kia mà chúng ta biết và do đó, khi trả lời câu hỏi tương ứng, chúng ta buộc phải đưa ra đánh giá mơ hồ như: “anh ấy 30 tuổi” hay “anh ấy cũng hơn 60 rồi”, v.v. ​của biến ngôn ngữ “tuổi” đặc biệt thường được sử dụng như: “trẻ”, “trung niên”, “già”, v.v. Hình dưới đây thể hiện bằng đồ họa có thể xuất hiện tập mờ “tuổi = trẻ” (rõ ràng là theo quan điểm của một người không quá 20 tuổi;)

Số mờ do “không hoàn toàn phép đo chính xác”, về nhiều mặt tương tự (nhưng không giống nhau! xem ví dụ với hai cái chai) với phân bố của lý thuyết xác suất, nhưng không có những nhược điểm cố hữu của lý thuyết xác suất: một số lượng nhỏ các hàm phân phối phù hợp để phân tích, nhu cầu về sự chuẩn hóa bắt buộc của chúng, sự tuân thủ các yêu cầu cộng tính, khó khăn trong việc chứng minh tính đầy đủ của sự trừu tượng toán học để mô tả hành vi của các đại lượng thực tế. So với các phương pháp chính xác và đặc biệt là xác suất, các phương pháp đo lường và điều khiển mờ có thể làm giảm đáng kể số lượng phép tính được thực hiện, từ đó dẫn đến tăng tốc độ của hệ thống mờ.

Như đã đề cập, tư cách thành viên của từng giá trị chính xác đối với một trong các giá trị của biến ngôn ngữ được xác định bằng hàm thành viên. Sự xuất hiện của nó có thể hoàn toàn tùy ý. Bây giờ khái niệm về cái gọi là hàm thành viên tiêu chuẩn đã được hình thành (xem hình bên dưới).

Tính năng tiêu chuẩn phụ kiện có thể dễ dàng áp dụng để giải quyết hầu hết các vấn đề. Tuy nhiên, nếu bạn phải giải quyết một vấn đề cụ thể, bạn có thể chọn một dạng hàm thành viên phù hợp hơn và bạn có thể đạt được kết quả tốt nhất hoạt động của hệ thống hơn so với khi sử dụng chức năng xem tiêu chuẩn.

Quá trình xây dựng (đồ họa hoặc phân tích) một hàm thành viên giá trị chính xác của một tập mờ được gọi là sự mờ hóa dữ liệu.

Một bài viết tiêu chuẩn về logic mờ thường gặp phải hai vấn đề:

  1. Trong 99% trường hợp, bài viết chỉ đề cập đến việc ứng dụng logic mờ trong bối cảnh các tập mờ, hay đúng hơn là suy luận mờ, và chính xác hơn là thuật toán Mamdani. Có vẻ như đây là cách duy nhất có thể áp dụng logic mờ, nhưng thực tế không phải vậy.
  2. Hầu như bài viết luôn được viết bằng ngôn ngữ toán học. Tuyệt vời, nhưng các lập trình viên sử dụng một ngôn ngữ khác với các ký hiệu khác. Vì vậy, hóa ra bài viết này đơn giản là không thể hiểu được đối với những người có vẻ hữu ích.
Tất cả những điều này thật đáng buồn, bởi logic mờ là một trong những thành tựu vĩ đại nhất của toán học thế kỷ 20, nếu lấy ứng dụng thực tế làm tiêu chí. Trong bài viết này, tôi sẽ cố gắng chỉ ra nó đơn giản và mạnh mẽ như thế nào - một công cụ lập trình - đơn giản nhưng mạnh hơn nhiều so với một hệ thống vận hành logic thông thường.

Sự thật đáng chú ý nhất về logic mờ là nó chủ yếu logic. Ngay từ đầu của logic toán học, người ta đã biết rằng bất kỳ hàm logic nào cũng có thể được biểu diễn dưới dạng chuẩn tắc phân biệt hoặc liên hợp, từ đó để thực hiện phép tính mệnh đề, chỉ cần ba phép toán là đủ: kết hợp (&&), phân tách (||) và phủ định (!). Trong logic cổ điển, mỗi phép toán này được chỉ định bởi một bảng chân trị:

Một b || a b && a ! -------- -------- ---- 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 0 1 0 1 1 0 0 1 1 1 1 1 1
Trong logic mờ, không giống như logic cổ điển, thay vì số lượng ĐÚNG VẬYnói dối giá trị sử dụng mức độ sự thật, lấy bất kỳ giá trị nào từ một tập hợp vô hạn từ 0 đến 1. Do đó, các phép toán logic không còn có thể được biểu diễn trong bảng nữa. Trong logic mờ chúng được xác định bởi các hàm.

Có hai cách để thực hiện phép tách và kết hợp:

Cách tiếp cận #Maximin: a || b => max(a, b) a && b => min(a, b) #Phương pháp đo màu: a || b => a + b - a * b a && b => a * b
Phủ định được đưa ra theo cách duy nhất (không khó đoán):

A => 1 - a
Có thể dễ dàng kiểm tra xem đối với các trường hợp cực đoan - khi giá trị của các biến chỉ là 1 hoặc 0 - các hàm trên đưa ra bảng chân trị cho các phép toán của logic cổ điển. Sẵn sàng! Giờ đây chúng ta có logic nâng cao cực kỳ mạnh mẽ, đơn giản nhưng vẫn hoàn toàn tương thích với logic cổ điển trong các trường hợp cực đoan. Vậy bất cứ nơi nào chúng tôi [lập trình viên] sử dụng biểu thức logic, chúng ta có thể sử dụng biểu thức logic mờ? Không thực sự.

Thực tế là tất cả các toán tử ngôn ngữ lập trình đều yêu cầu các điều kiện rõ ràng, vì vậy tại một thời điểm nào đó, bạn luôn phải đạt được tiêu chí kích hoạt rõ ràng từ mức độ tin cậy mờ nhạt. Điều này tương tự với những gì xảy ra trong thế giới lượng tử: miễn là hệ thống tiến hóa theo phương trình Schrödinger, trạng thái lượng tử của nó thay đổi một cách xác định và liên tục, nhưng ngay khi chúng ta chạm vào hệ thống, một bước nhảy lượng tử sẽ xảy ra và hệ thống sụp đổ sang một trong các trạng thái rời rạc. Trong logic mờ, điều này được gọi là giải mờ. Tự nhiên chỉ đơn giản biến trạng thái lượng tử thành xác suất và tung xúc xắc, nhưng nói chung có nhiều phương pháp giải mờ khác nhau. Tôi sẽ không đi sâu hơn vào chủ đề này, vì tập của nó cần có một bài viết riêng. Tôi xin đề cập rằng phương pháp giải mờ nên được chọn có tính đến ngữ nghĩa của vấn đề.

Ví dụ, hãy tưởng tượng một hệ thống điều khiển tên lửa sử dụng logic mờ để tránh chướng ngại vật. Hãy tưởng tượng tên lửa đang bay thẳng lên núi và hệ thống điều khiển tính toán giải pháp: bay bên phải - 0,5, bay bên trái - 0,5. Nếu bạn sử dụng phương pháp giải mờ bằng phương pháp khối tâm, hệ thống điều khiển sẽ ra lệnh bay thẳng. Bùm! Rõ ràng, trong trường hợp này, quyết định đúng đắn là tung xúc xắc và nhận lệnh “trái” hoặc “phải” với xác suất 50%.

Trong trường hợp đơn giản nhất, khi bạn cần đưa ra quyết định dựa trên mức độ đúng, bạn có thể chia tập hợp thành các khoảng và sử dụng if-else-if.

Nếu logic mờ được sử dụng để tìm kiếm bằng tiêu chí mờ thì việc giải mờ có thể không cần thiết chút nào. Bằng cách so sánh, chúng ta sẽ thu được một mức độ giá trị bằng nhau nào đó cho từng phần tử của không gian tìm kiếm. Chúng ta có thể xác định một mức độ bình đẳng tối thiểu nào đó mà dưới mức đó chúng ta không quan tâm; đối với các phần tử còn lại, mức độ bằng nhau sẽ là mức độ phù hợp, theo thứ tự giảm dần chúng tôi sẽ sắp xếp kết quả và để người dùng quyết định kết quả nào đúng.

Ví dụ: tôi sẽ cung cấp cho bạn cách sử dụng logic mờ để giải một bài toán mà tôi rất thích hồi còn học đại học - bài toán tìm một ký tự tiếng Trung từ một hình ảnh.

Tôi ngay lập tức từ chối ý tưởng nhận dạng bất kỳ nét vẽ nguệch ngoạc nào do người dùng vẽ trên màn hình (khi đó là màn hình PDA). Thay vào đó, chương trình đề xuất chọn loại nét từ thứ tự 23 được xác định theo quy tắc thư pháp Nhật Bản. Sau khi chọn loại tính năng, người dùng đã vẽ một hình chữ nhật phù hợp với tính năng đó. Trên thực tế, chữ tượng hình - cả được nhập và lưu trữ trong từ điển - được biểu diễn dưới dạng một tập hợp các hình chữ nhật được xác định một loại.

Làm thế nào để xác định sự bình đẳng của chữ tượng hình trong cách biểu diễn như vậy? Để bắt đầu, chúng ta hãy xây dựng tiêu chí bằng một tuyên bố rõ ràng:

Chữ tượng hình A và B bằng nhau khi và chỉ nếu với mỗi nét trong A có một nét bằng nhau trong B và với mọi nét trong B đều có một nét bằng nhau trong A.

Người ta ngầm cho rằng chữ tượng hình không chứa các đặc điểm trùng lặp, nghĩa là nếu một đặc điểm nào đó trùng với một đặc điểm trong một chữ tượng hình khác thì nó không thể trùng với bất kỳ đặc điểm nào khác trong cùng một chữ tượng hình.

Sự bình đẳng về tính trạng có thể được định nghĩa như sau:

Các tính trạng bằng nhau khi và chỉ khi chúng cùng loại và hình chữ nhật của chúng chiếm cùng một diện tích.

Hai định nghĩa này cho chúng ta một hệ thống các câu lệnh đủ để thực hiện thuật toán tìm kiếm.

Đầu tiên ta xây dựng ma trận E như sau:

For i in 1..n for j in 1..n E = A[i] == B[j] end end #A và B là chữ tượng hình; A[i] và B[j] là các đặc điểm của chúng và toán tử "==" tính toán đẳng thức mờ của chúng. #Giả định rằng cả hai chữ tượng hình đều có cùng số lượng đặc điểm - n.
Sau đó chúng ta đóng ma trận này vào vectơ M[n]:

For i in 1..n M[i] = E.max_in_row(i) end #Phương thức max_in_row tính giá trị lớn nhất trong một hàng ma trận.
Tôi sử dụng phương pháp maximin vì trên thực tế, phương pháp đo màu tạo ra các giá trị quá nhỏ cho các liên từ. Nếu chúng ta nhớ rằng max là một phân cách, thì hóa ra chúng ta đang tính toán phát biểu rằng đặc điểm thứ i của A bằng đặc điểm đầu tiên của B hoặc đặc điểm thứ hai hoặc thứ ba, v.v. Do đó, M là vectơ so khớp giữa đặc điểm A và đặc điểm B.

#Chỉ là một sự kết hợp mờ nhạt. e = M.min #Hoặc như thế này: e = M.sum / M.length #(tỷ lệ của tổng các phần tử với độ dài của vectơ).
Cả hai phương pháp đều hoạt động nhưng theo những cách khác nhau và phương pháp thứ hai hoạt động ngay cả khi bạn so sánh rõ ràng các tính năng. Cái nào đúng hơn là một câu hỏi triết học.

Cần nói thêm một vài lời về việc so sánh các đặc điểm. Theo định nghĩa, sự bình đẳng về tính trạng là sự kết hợp của hai điều kiện: sự bình đẳng về chủng loại và sự bình đẳng về hình chữ nhật. Đặc điểm của một số loại rất giống nhau. Khi nhập, người dùng có thể dễ dàng nhầm lẫn chúng, vì vậy cần có một bảng tương tự, các giá trị của bảng này sẽ phản ánh mức độ giống nhau của đặc điểm i với đặc điểm j (tự nhiên sẽ có những bảng trên đường chéo chính). Về mức độ bằng nhau của hình chữ nhật, chúng ta có thể lấy tỷ lệ giữa diện tích giao điểm của chúng với diện tích của hình chữ nhật lớn hơn.

Nhìn chung, phạm vi của logic mờ rất rộng. Trong bất kỳ thuật toán nào, trong bất kỳ hệ thống quy tắc nào, hãy cố gắng thay thế sự thật và sự giả dối bằng mức độ sự thật và có lẽ hệ thống quy tắc hoặc thuật toán này sẽ phản ánh thực tế chính xác hơn. Rốt cuộc, chúng ta đang sống trong một thế giới về cơ bản là mờ nhạt.