2015-06-13 10 views
0

я хочу написать проект получить точное значение калорий, чтобы вычислить точное значение то часть (? Сколько весов увеличения) это мое правило:Как fuzzify в fuzzyclips? .

if calorie is high then increase weight 

для этого у меня есть этот набор для калорийность:

(highCalorie (20 0)(40 .2) (60 .5) (100 .8) (180 1)) 

и, с другой стороны для значения увеличения веса у меня есть этот набор:

(increase(50 0) (100 .4) (120 .8) (150 1)) 

в другом слове я хочу отобразить значение для Кало чтобы увеличить вес. для этого я пишу этот код:

(deftemplate calories 
    20 180 
    (high(20 0)(40 .2) (60 .5) (100 .8) (180 1)) 
) 
(deftemplate fat 
    50 150 
    (increase(50 0) (100 .4) (120 .8) (150 1)) 
) 

; We first get a precise value for calorie and fuzzify it. 

(defrule getCalorie 
    (declare (salience 100)) 
    => 
    (printout t "Enter calorie: ") 
    (bind ?t (read)) 
    (assert (calorie ?t)) 
) 

(defrule fuzzifyCalorie 
    (calorie ?t) 
    => 
    (assert (calories (?t 0) (?t .2) (?t .5)(?t .8)(?t 1)))) 

; Here we add rules to prescribe amounts of increased weight 

(defrule result 
    (declare (salience -1)) 
    (calories high) 
    => 
    (assert (fat increase))) 

(defrule ShowPenicillin 
    (declare (salience -100)) 
    ?f <- (fat ?p) 
    => 
    (printout t "for this colrie" (moment-defuzzify ?f) " grams of fat increased to weight" crlf)) 

, что это моя ошибка?

спасибо большое.

ответ

0

В ваших плотах отсутствуют скобки. Исправленный код:

(deftemplate calories 
    20 180 
    ((high (20 0) 
      (40 .2) 
      (60 .5) 
      (100 .8) 
      (180 1)))) 

(deftemplate fat 
    50 150 
    ((increase (50 0) 
       (100 .4) 
       (120 .8) 
       (150 1)))) 
+0

tnx, в вашем коде, например (20 0), означает, что валидатор из 20 в наборе калорий равен 0? Это правда? –

+0

Я думаю, что это то, что называется классом членства. Таким образом, значение 20 не будет считаться высоким. Там есть документация, которую я нашел здесь: http://alumni.cs.ucr.edu/~vladimir/cs171/quickfuzzy.pdf. –

+0

Я попробовал то, что вы сказали, но это не сработало, я изменил свой код. и он работает, но я не понимаю смысла этой линии? (defrule fuzzifyCalorie (calorie? t) => (assert (calories (? t 0) (? t 1) (? t 0)))) спасибо за помощь –