Tập các ngày cuối tuần

Một phần của tài liệu Nghiên cứu phát triển công cụ phân tích dữ liệu nông nghiệp dùng cho làng thông minh (Trang 47)

5 Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp

4.3 Tập các ngày cuối tuần

Membership Functions

A membership function(MF) hay còn gọi là hàm liên thuộc là một hàm dùng để xác định mỗi giá trị đầu vào được ánh xạ ra một giá trị đầu ra từ 0 đến 1. Không gian đầu vào được gọi là universe of discourse. Hình minh họa dưới đây mô tả ý nghĩa của MF. Để xác định một người là cao hay thấp, ta có thể sử dụng logic cổ điển hoặc logic mờ.

HÌNH 4.4: Xác định một người là cao hay thấp bằng Membership Function

Classical Set có thể được biểu diễn như công thức ở dưới đây, trong đó điều kiện x>6 được xem là MF của A

A={x|x 6} (4.1)

Fuzzy Set là một tập mở rộng của Classical Set. Nếu X là universe of discourse và các giá trị x thuộc X, thì một Fuzzy set A được định nghĩa với công thức

A={x,µA(x)|x∈X} (4.2)

µA(x)được gọi là MF của x trong A. MF ánh xạ mỗi phần tử của X ra một giá trị từ

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 33

HÌNH4.5: Triangular, Trapezoidal membership function

HÌNH4.6: Gaussian, Generalized bell membership function

HÌNH4.7: Sigmoidal membership functions

Các phép toán Logic trong Fuzzy Logic

Nếu trong logic cổ điển, các giá trị đầu vào phải là giá trị 0 hoặc 1. Thì ở logic mờ, giá trị đầu vào có thể là một số thực từ 0 đến 1. Hình minh họa dưới đây mô tả cách tính đầy đủ của một số phép tính logic thông dụng nhất được sử dụng trong Fuzzy Logic, đó là phép AND, OR và NOT

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 34

HÌNH4.8: Bảng chân trị

HÌNH4.9: So sánh các phép tính logic giữa logic cổ điển và logic mờBẢNG4.1: Fuzzy Logic Operator BẢNG4.1: Fuzzy Logic Operator

Boolean Fuzzy

AND(x,y) MIN(x,y)

OR(x,y) MAX(x,y)

NOT(x) 1 – x

Luật If-Then

Các câu luật If-Then được sử dụng để hình thành nên các câu lệnh điều kiện. Cấu trúc của một câu luật if then:

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 35

i f x i s A, then y i s B

Trong đó, A and B là các giá trị được định nghĩa bởi Fuzzy Set thuộc các Universe of discourse X và Y tương ứng.

Thành phần If "x is A" được gọi là tiền đề, còn thành phần "y is B" được gọi là hệ quả.

4.2.2 Fuzzy Inference System

Fuzzy Inference là một quá trình suy diễn các giá trị đầu vào thành các giá trị đầu ra. Quá trình suy diễn này bao gồm tất cả các phần đã được mô tả từ trước như

Membership Functions,Các phép toán tử, vàluật if-then.

Phần này sẽ mô tả chi tiết quá trình suy diễn mờ và áp dụng một bài toán minh họa. Cụ thể, sử dụng ngữ cảnh tính toán tiền thưởng (tip) cho phục vụ nhà hàng với hai dữ kiện đầu vào là chất lượng dịch vụ (service) và đồ ăn (food). Quá trình suy diễn sẽ tuân theo các luật if-then như sau

• If the service is poor or the food is rancid, then tip is cheap

• If the service is good, then tip is average

• If the service is excellent or food is delicious, then tip is generous.

Hình minh họa dưới đây mô tả quá trình tổng quan, bao gồm các biến đầu vào, đầu ra, ngưỡng giá trị của các biến.

HÌNH4.10: Fuzzy inference processMột hệ thống suy diễn mờ sẽ tuân theo các bước cơ bản sau: Một hệ thống suy diễn mờ sẽ tuân theo các bước cơ bản sau:

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 36

• Fuzzification: làm mờ các biến đầu vào

• Apply Fuzzy Operator: Áp dụng các toán tử AND,OR hoặc NOT ở phần tiền

đề

• Implication: Tính toán hệ quả từ phần tiền đề

• Aggregation: Tổng hợp các hệ quả

• Defuzzification: khử mờ các biến đầu ra

Fuzzification

Ở bước đầu tiên, lấy các giá trị đầu vào và xác định mức độ mà chúng thuộc về các Fuzzy Set thông qua các Membership Function. Đầu vào là một giá trị thuộc phạm vi universe of discourse (trong trường hợp này là từ 0 đến 10).

HÌNH4.11: Fuzzification

Apply Fuzzy Operator

Nếu phần tiền đề của luật có nhiều hơn một phần, toán tử mờ được áp dụng để tính ra được giá trị kết quả cho phần tiền đề. Sau đó, giá trị này được áp dụng cho hàm đầu ra.

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 37

HÌNH4.12: Ví dụ về toán tử OR

Implication

Trước khi chuyển sang bước Implication, cần phải xác định trọng số của luật. Tất cả các luật đều có một trọng số (từ 0 đến 1), được nhân với kết quả tính toán có được từ tiền đề. Trọng số này giúp làm tăng hoặc giảm mức độ quan trọng của luật trong hệ thống suy diễn. Hình minh họa dưới đây sẽ mô tả chi tiết cách tính trong bước Implication

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 38

Aggregation

Aggregation được xem là bước tổng hợp các hệ quả từ các luật thành một FuzzySet duy nhất. Có một số phương thức để lấy tổng hợp hệ quả gồm:

• max: lấy giá trị lớn nhất

• probor: lấy theo một phân bố xác suất

• sum: lấy tổng

HÌNH4.14: Aggregation all outputs

Defuzzification

Đầu vào cho quá trình khử mờ này là Fuzzy Set, kết quả của bước Aggregation, đầu ra là một con số cụ thể. Một số phương pháp làm mờ là: centroid, bisector, middle of

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 39 maximum, largest of maximum, và smallest of maximum. Trong đó phương pháp lấy giá trị centroid được xem là phổ biến nhất.

HÌNH4.15: Defuzzification

Fuzzy Inference Diagram

Sau đây là sơ đồ tổng hợp tất cả quá trình trên. Nhìn vào sơ đồ trên ta có thể hiểu được luồng tính toán của hệ thống suy diễn. Luồng đi lên từ các đầu vào(input) biểu thị cho quá trình Fuzzification, luồng đi từ trái sang phải biểu diễn cho quá trình áp dụng toán tử và Implication hệ quả. Luồng đi từ trên xuống dưới, thể hiện bước tổng hợp Aggregation và bước khử mờ để cho ra kết quả cuối cùng

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 40

HÌNH4.16: Fuzzy Inference Diagram

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 41

4.3 Hiện thực giải thuật Fuzzy Logic vào Spark

Dựa vào những kiến thức tổng quan về Fuzzy Logic đã được giới thiệu ở phần trước. Tôi đã xây dựng nên một hệ thống suy diễn mờ (Fuzzy Inference System - FIS) được viết bằng ngôn ngữ scala. Quy trình phát triển giải thuật này gồm hai giai đoạn chính:

• Hiện thực giải thuật phiên bản gốc

• Hiện thực giải thuật nâng cấp phiên bản 2

Vì sao cần phải phát triển giải thuật ở hai giai đoạn như vậy? Spark là một framework tính toán phân tán, nên quá trình phát triển gặp nhiều khó khăn trong việc tìm lỗi, thử nghiệm chương trình. Vì thế, việc phát triển giải thuật ở giai đoạn 1 đóng vai trò đảm bảo giải thuật chạy tốt và ổn định trên môi trường tính toán một máy tính. Sau khi đã thành công với bộ khung của giai đoạn một, nhà phát triển có thể tự tin hơn trong việc thiết kế các cấu trúc dữ liệu mới, phù hợp hơn để giải thuật chạy được trên môi trường Spark nhiều máy tính.

Trong phần này, tôi sẽ giới thiệu tổng quan về kiến trúc thiết kế của hệ thống suy diễn Fuzzy Logic; đặc tả chi tiết về các class trong hệ thống. Và thử nghiệm tính toán giải thuật trên với một đoạn chương trình scala. Tiếp theo, tôi sẽ trình bày cụ thể về những hạn chế, điểm yếu của phiên bản cũ đang gặp phải; đề xuất phương án nâng cấp giải thuật và hiện thực. Sau đó sẽ thử nghiệm lại với đoạn chương trình đã dùng trước đó để so sánh về hiệu năng giữa hai phiên bản.

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 42

4.3.1 Class Diagram

Dưới đây là thiết kế chi tiết về hệ thống suy diễn Fuzzy Logic.

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µ()

HÌNH4.19: Centroid của Fuzzy Sets

* param: variable

* return: Double

bisector: trả về một giá trị k trên trục X mà tại đó, được thẳng x=k chia fuzzy sets thành hai phần có diện tích bằng nhau

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 47

HÌNH4.20: Bisector của Fuzzy Sets

* param: variable

* return: Double

FIS_Mamdani

FIS_Mamdani là class mô tả tổng quan và chứa các thông tin quan trọng nhất của một hệ thống suy diễn mờ.

• Properties:

name: String: tên của hệ thống

input: List[variable]: danh sách các biến đầu vào

output: List[variable]: danh sách các biến đầu ra

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 để tính ở bước tổng hợp(Aggregation)

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 48

defuzz: variable=>Double: hàm được sử dụng để tính ở bước khử mờ

(Defuzzification)

implication: Double: giá trị implication dùng để nhân vào kết quả suy

diễn mờ, làm tăng hoặc giảm tầm quan trọng của luật If-Then

step:Double: số bước tính toán, được sử dụng để tăng giảm độ phức tạp

của phép toán tích phân trong bước Defuzzification

• Methods:

setInput

* param: List(Double): truyền vào danh sách các giá trị của đầu vào,

lưu ý về thứ tự trùng với khai báo input

* return: void If * param: exprIf * return: this Then * param: exprThen * return: void membershipFunc

membershipFunc là một interface dùng chung cho tất cả các loại membership function

• Methods:

execute

* param: Double

* return: Double

trimf

Triangular membership function.

f(x;a,b,c) ={ 0 x≤a x−a b−a a≤x≤b c−x c−b b≤x≤c 0 c≤x

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 49

HÌNH4.21: Triangular membership function

• Properties: name: String a: Double b: Double c: Double • Methods: execute * param: Double * return Double

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 50

trapmf

Trapezoidal membership function.

f(x;a,b,c,d) ={ 0 x≤a x−a b−a a≤x≤b 1 b≤x≤c d−x d−c c≤x≤d 0 d≤x

HÌNH4.22: Trapezoidal membership function

• Properties: name: String a: Double b: Double c: Double d: Double • Methods:

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 51

execute

* param: Double

* return Double

gbellmf

Generalized bell-shaped membership function.

f(x;a,b,c) = 1

1+|x−ac|2b

HÌNH4.23: Generalized bell-shaped membership function

• Properties: name: String a: Double b: Double c: Double • Methods:

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 52

execute

* param: Double

* return Double

gaussmf

Gaussian membership function.

f(x;σ,c) =e−(x−c)

2 2σ2

HÌNH4.24: Gaussian membership function

• Properties: name: String mean: Double deviation: Double • Methods: execute * param: Double

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 53

* return Double

zmf

Z-shaped membership function.

f(x;a,b) ={ 1 x≤a 1−2(x−a b−a)2 a≤x≤a+b 2 2(xb−−ab)2 a+b 2 ≤x≤b 0 b≤x

HÌNH4.25: Z-shaped membership function

• Properties: name: String a: Double b: Double • Methods: execute

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 54

* param: Double

* return Double

smf

S-shaped membership function.

f(x;a,b) ={

0 x≤a

2(xb−−aa)2 a≤x≤a+2b 1−2(xb−−ba)2 a+2b ≤x≤b

1 b≤x

HÌNH4.26: S-shaped membership function

• Properties: name: String a: Double b: Double • Methods: execute

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 55

* param: Double

* return Double

sigmf

Sigmoidal membership function.

f(x;ak,ck) = 1

1+e−ak(x−ck)

HÌNH4.27: Sigmoidal membership function

• Properties: name: String a: Double c: Double • Methods: execute * param: Double * return Double

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 56

pimf

Pi-shaped membership function.

f(x;a,b,c,d) ={ 0 x≤a 2(xb−−ba)2 a≤x≤a+2b 1−2(xb−−ba)2 a+b 2 ≤x≤b 1 b≤x≤c 1−2(xd−−cc)2 c≤x≤c+2d 2(xd−−dc)2 c+d 2 ≤x≤d 0 d≤x

HÌNH4.28: Pi-shaped membership function

• Properties: name: String a: Double b: Double c: Double

Một phần của tài liệu Nghiên cứu phát triển công cụ phân tích dữ liệu nông nghiệp dùng cho làng thông minh (Trang 47)