我們假設有乙個交易系統,客戶提出要買的東西,賣家提供要買的東西,如果有符合的,就成交。這是乙個很簡單的系統,用一般程式語言也可以實現,但是我們看看專家系統開發更簡單的方法。
1第一條規則
如果來了新的客戶,取得這個客戶所有需要的商品,並產生新的事實。
(defrule query-buyer
?fact <- (new-buyer ?buyer) ; if there is a new a buyer...
=>
(retract ?fact)
(foreach ?i (nth$ 2 (send ?buyer "getproducts"))
(assert (requires ?buyer ?i)) ; get the products the buyer requires
; and for each one create a fact
; associating the buyer and the product))
例如,來了乙個客戶danny,我們先assert(new-buyer danny) ,jess發現了這條事實後,觸發query-buyer這個規則,注意所有的規則之間沒有順序性。query-buyer這條規則先撤銷剛才的事實,避免死迴圈,然後呼叫乙個函式取得使用者所有需要的商品send ?buyer "getproducts".例如得到的結果是(computer keyboard mouse),然後規則遍歷這個結果集,每乙個商品都產生乙個新的事實,例如assert requires danny computer等等。
2 第二個規則,出現乙個新賣家,原理和剛才一樣
(defrule query-seller
?fact <- (new-seller ?seller) ; if there is a new seller...
=>
(retract ?fact)
(foreach ?i (nth$ 2 (send ?seller "getproducts"))
(assert (provides ?seller ?i)) ; get the products the seller provides
; and for each one create a fact
; associating the seller and the product))
3 最後乙個是交易的規則
當有買家購買乙個商品,賣家賣乙個商品,並且兩者相同的事實時候,告訴賣家有人要買該物品,同時也告訴買家有賣家投遞該物品
(defrule match-buyer-and-seller
(requires ?buyer ?product1) ; the buyer requires product1
(provides ?seller ?product2) ; the seller provides product2
(test (eq ?product1 ?product2)) ; product1 and product2 are the same
=>
(send ?seller "order" ?product2) ; order from the seller
(send ?buyer "delivery" ?product1) ; deliver to the buyer
)從這個規則中,我們看到,實現這樣乙個交易市場的系統,沒有任何遍歷所有買家和賣家進行比較的操作。這些匹配是jess自動模式匹配完成的,大大簡化了開發。
使用專家系統,我們可以通過定義規則的方式來積累經驗,而不是通過if else這樣的**來積累經驗。
專家系統JESS例項教程
我們假設有乙個交易系統,客戶提出要買的東西,賣家提供要買的東西,如果有符合的,就成交。這是乙個很簡單的系統,用一般程式語言也可以實現,但是我們看看專家系統開發更簡單的方法。1第一條規則 如果來了新的客戶,取得這個客戶所有需要的商品,並產生新的事實。defrule query buyer fact n...
動物專家系統(4)
這個版本用函式實現了功能上的擴充套件,可以修改 新建 刪除規則。另外,對特徵進行排序,使得輸入的特徵不再需要按順序來。def init with open users he jia dongwushibie gui ze.txt r as f for line in f.readlines if l...
《專家系統》實驗(初稿)
今天硬是被趕鴨子上架了一把,mm非要我幫她寫乙份 專家系統 的實驗報告冊。這可真的是難為我了,花了幾個小時擬了初稿出來。哎 書到用是方恨少 這句是真理!不管寫得有多爛,先發上來讓各路ggjj給咱提點意見。我對專家系統的理解還很膚淺,這次拍腦袋,真是哦 大家多幫幫忙啦 專家系統 實驗 專家系統是早期人...