5 Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp
4.18 Fuzzy Inference System Class Diagram
Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 43
4.3.2 Đặc tả chi tiết
Trước khi đi vào các thiết kế chi tiết của từng class, tôi sẽ mô tả ý tưởng thiết kế giải thuật trên. Nhắc lại về cấu trúc của một luật If-Then
I f ( x i s A) Then ( y i s B)
I f ( ( x i s A) or ( y i s B ) ) Then ( z i s C)
Ở ví dụ trên, ta có thể cấu trúc câu lệnh If-then làm 4 phần phân biệt: If, tiền đề, Then và hệ quả. Phần tiền đề và hệ quả cũng là các thành phần có cấu trúc
Scala cung cấp một số biến thể cú pháp để gọi các phương thức. Chẳng hạn một đối tượng x có phương thức là is, và tham số là A. Ta có thể gọi phương thức theo hai cách tương đương như sau:
// invoke method with dot notation x . i s (A)
// invoke method without dot notation x i s A
Với biến thể trên, việc gọi hàm trở nên tự nhiên và ngắn gọn hơn, rất phù hợp cho việc diễn tả một câu luật If-Then trong Fuzzy Logic
variable
• Properties:
– name: String: tên biến
– range: (Double, Double): ngưỡng giá trị của biến, hay còn gọi là universe of discourse
– value: Double: giá trị của biến nằm trong ngưỡng range
– valueFuzzy: Double: giá trị sau khi đã được mờ hóa sử dụng membershipFunc
(MF)
– andMethod:(Double, Double)=>Double: hàm được sử dụng để tính toán
tử AND
– orMethod:(Double, Double)=>Double: hàm được sử dụng để tính toán tử
OR
– aggregation:(List[Double], List[Double])=>List[Double]: hàm được sử dụng
Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 44
– is: tính giá trị mờ (0->1) sau khi áp dụng MF đối với giá trị thực
* param: membershipFunc
* return: exprIf
– is_not: giá trị nghịch đảo của method is
* param: membershipFunc
* return: exprIf
– will_be: là method được áp dụng cho biến output, sau bước implication.
valueFuzzy của tiền đề sẽ được gán cho valueFuzzy của hệ quả.
* param: membershipFunc
* return: void
exprIf
exprIf là một cấu trúc dữ liệu được dùng để lưu trữ valueFuzzy của các biến sau khi đã áp dụng membershipFunc Ví dụ: (x is A) thì giá trị trả về của method này sẽ là một đối tượng expr(valueFuzzy)
• Properties
– valueFuzzy: Double: lưu valueFuzzy của biến
– andMethod:(Double, Double)=>Double: hàm được sử dụng để tính toán
tử AND
– orMethod:(Double, Double)=>Double: hàm được sử dụng để tính toán tử
OR
• Method
– and: hàm and giúp kết nối các vế của tiền đề với nhau và tính toán tử
AND. Ví dụ (x is A) and (y is B) thì trả về vẫn là một expr(valueFuzzy)
* param: exprIf
* return: exprIf
– or: hàm and giúp kết nối các vế của tiền đề với nhau và tính toán tử OR.
Ví dụ (x is A) or (y is B) thì trả về vẫn là một expr(valueFuzzy)
* param: exprIf
Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 45
exprThen
• Method
– and: hàm and mục đích chính là để kết nối các vế của hệ quả với nhau và
không có chức năng tính toán
* param: exprThen
* return: exprThen
AndMethod
Là một class chứa hàm static dùng để tính toán tử And. Trong nghiên cứu này, hàm min là hàm được sử dụng để tính toán tử And.
• Static Methods:
– Min: trả về giá trị nhỏ nhất của hai số thực
* param: (Double, Double)
* return: Double
OrMethod
Là một class chứa hàm static dùng để tính toán tử Or. Trong nghiên cứu này, hàm max là hàm được sử dụng để tính toán tử Or.
• Static Methods:
– Max: trả về giá trị lớn nhất của hai số thực
* param: (Double, Double)
* return: Double
Aggregation
Là một class chứa các hàm static dùng để tổng hợp các Fuzzy Sets của hệ quả.
• Static Methods:
– Max: trả về Fuzzy Set lớn nhất sau khi trộn giữa hai Fuzzy Set
* param: (List[Double], List[Double])
Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 46
– Sum: trả về Fuzzy Set là tổng của các Fuzzy Set
* param: (List[Double], List[Double])
* return: List[Double]
Defuzzification
Là một class chứa các hàm static dùng để khử mờ Fuzzy Set của output
• Static Methods:
– centroid: trả về trọng tâm của Fuzzy Set theo trục X. Và được tính theo
công thức sau:
xCentroid=∑iµ(xi)xi
∑iµ(xi) (4.3)
Trong đó: xi là giá trị trong khoảng universe of discourse vàµ(xi)là ánh
xạ của x sau khi áp dụng membershipFuncµ()