Lập trình thử nghiệm giải thuật Fuzzy Logic

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 72 - 75)

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

4.3.3 Lập trình thử nghiệm giải thuật Fuzzy Logic

Trong ứng dụng này, tôi sử dụng lại bài toán tipping problem. Các biến đầu vào gồm có chất lượng dịch vụ (service), chất lượng thức ăn (food), và chất lượng không khí (atm). Áp dụng Fuzzy Logic sẽ cho ra kết quả số tiền tip mà nhân viên nhận được. Ngưỡng giá trị (universe of discourse) của các biến trên từ 0 đến 10. Fuzzy Sets của các biến được mô tả như sau.

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

HÌNH4.30: Fuzzy Sets of Food

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

HÌNH4.32: Fuzzy Sets of Tip

//Step 1 : S e t t i n g SparkSession val spark= SparkSession . builder ( )

. appName( " FuzzySparkVersion " ) . getOrCreate ( )

val sc = spark . sparkContext

//Step 2 : Define the inputs , output

val s e r v i c e = v a r i a b l e ( " s e r v i c e " , ( 0 , 1 0 ) , 0 . 5 ) val food = v a r i a b l e ( " food " , ( 0 , 1 0 ) , 0 . 5 )

val atm = v a r i a b l e ( " atm " , ( 0 , 1 0 ) , 0 . 5 ) // output

val t i p = v a r i a b l e ( " t i p " , ( 0 , 10) )

//Step 3 : Define the Fuzzy Sets with membershipFunc val poor = trimf ( " poor " , 0 , 2 , 2 ) ;

val good = trimf ( " good " , 1 , 5 , 9 ) ;

val e x c e l l e n t = trimf ( " e x c e l l e n t " , 3 , 7 , 10) val rancid = trimf ( " rancid " , 0 , 0 , 5 ) ;

val d e l i c i o u s = trimf ( " d e l i c i o u s " , 3 , 9 , 10) val cool = trimf ( " cool " , 0 , 0 , 4 ) ;

val warm = trimf ( "warm" , 1 , 5 , 9 ) ; val hot = trimf ( " hot " , 6 , 10 , 14)

Chương 4. Xây dựng công cụ phân tích dữ liệu nông nghiệp 60 val cheap = trimf ( " cheap " , 0 , 0 , 5 ) ;

val average = trimf ( " average " , 1 , 5 , 8 ) ; val generous = trimf ( " generous " , 5 , 10 , 10) //Step 4 : Define the Fuzzy Inference System

val f i s = FIS_Mamdani (name = " tipdemo " , input = L i s t ( service , food , atm ) , output = L i s t ( t i p ) ,

andMethod = AndMethod . Min , orMethod = OrMethod . Max,

aggregation = Aggregation . Max,

d e f u z z i f i c a t i o n = Defuzzificaton . centroid , step = 1000000000)

//Pass the param value to inputs f i s . setInput ( L i s t ( 3 , 2 , 5 ) )

//Step 5 : Describe the r u l e s If−Then

f i s . I f ( atm i s hot ) Then ( t i p will_be cheap ) f i s I f ( ( s e r v i c e is_not good )

or ( food i s d e l i c i o u s ) or ( atm i s warm ) )

Then ( t i p will_be cheap ) f i s I f ( ( s e r v i c e i s e x c e l l e n t )

or ( food i s rancid ) or ( atm i s cool ) )

Then ( t i p will_be generous )

//Step 6 : D e f u z z i f i c a t i o n and show the r e s u l t p r i n t l n ( f i s . defuzz ( t i p ) )

spark . stop ( )

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 72 - 75)

Tải bản đầy đủ (PDF)

(105 trang)