CLIPS에는 두 가지 규칙이 있습니다. 둘 다 사실이라면 결합하고 싶습니다 ... 어떻게해야할지 모르겠습니다. 나는 grant-eligible
라고하는 속성을 가지고 있습니다. 나는 그 값을 TRUE
으로 설정하면 'grant-eligible'
을 FALSE
으로 설정하고 싶었습니다.하지만 내 코드가CLIPS와이 두 규칙을 결합하는 방법은 무엇입니까?
(defrule complete "rule for app completeness"
?f <- (application (transcript-received Yes) (app-complete FALSE)
(gpa
?v_gpa&:(
> ?v_gpa 0)))
=>
(modify ?f (app-complete TRUE)))
(defrule denied "rule for admission - DENIED"
?f <- (application (app-complete TRUE) (app-decision FALSE)
(gpa
?v_gpa&:(
< ?v_gpa 3.0))
(ssat
?v_ssat&:(
>= ?v_ssat 0.0))
)
=>
(modify ?f (app-decision DENIED))
)
(defrule accepted "rule for admission - ACCEPTED"
?f <- (application (app-complete TRUE) (app-decision FALSE)
(gpa
?v_gpa&:(
>= ?v_gpa 3.5))
(ssat
?v_ssat&:(
>= ?v_ssat 1500))
)
=>
(modify ?f (app-decision ACCEPTED))
)
이 나는이 규칙에 모두 해당하는 경우 지금
(defrule female-finaid "rule for finaid applications for female students"
?f <- (application (app-decision ACCEPTED)
(gender F) (grade-entry Freshman) (country USA)
(grant-eligible TRUE)
(grant ?v_grant)
)
=>
(modify ?f
(grant (+ ?v_grant 5000))
(grant-eligible TRUE)
)
)
(defrule great-students-finaid "rule for finaid applications for female students"
?f <- (application (app-decision ACCEPTED)
(country USA)
(grant-eligible TRUE)
(grant ?v_grant)
(gpa
?v_gpa&:(
>= ?v_gpa 4.0))
)
=>
(modify ?f
(grant (+ ?v_grant 4500))
(grant-eligible FALSE)
)
)
을 구현하기 위해 노력하고있는 것들이다 : 나는 이렇게 무한 루프 ... 그래서 여기
내 규칙입니다 , 부여 된 보조금은 9500, 5000 일 수도 있고 4500 일 수도 ... 어떤 아이디어?
솔루션 : (ff-grant-eligible
및 es-grant-eligible
내 제어 사실을 어디에 ... 그들은 FF = 여성 finaid 및 ES = 우수한 학생 서)
(defrule female-finaid "rule for finaid applications for female students"
?f <- (application (app-decision ACCEPTED) (ff-grant-eligible TRUE)
(gender F) (grade-entry Freshman) (country USA)
(grant ?v_grant)
)
=>
(modify ?f
(grant (+ ?v_grant 5000))
(ff-grant-eligible FALSE)
)
)
(defrule great-students-finaid "rule for finaid applications for female students"
?f <- (application (app-decision ACCEPTED) (es-grant-eligible TRUE)
(country USA)
(grant ?v_grant)
(gpa
?v_gpa&:(
>= ?v_gpa 4.0))
)
=>
(modify ?f
(grant (+ ?v_grant 4500))
(es-grant-eligible FALSE)
)
)
귀하의 철저한 답변을 위해 @bogatron에게 감사드립니다 ... 나는 약간 명확하지 않습니다. 지난 몇 주간 CLIPS를 배웠습니다. 그래서 나는 이것이 무엇을 의미하는지 이해하지 못한다. (assert (grant? id female 5000))) ... 또한'apply-grants stage '도 없다. 나는'grant-eligible' 속성을 사용하여 규칙이 반복적으로 실행되는 것을 멈추는 방법으로 사용하고 있었지만 분명히 작동하지 않았습니다. – engr007
추가하려면 각 응용 프로그램마다 고유 한 ID가 있어야합니다. – engr007
'(assert (grant? id female 5000)))'은 응용 프로그램에 적용 할 권한을 지정합니다.나는 당신이'grant-eligible'를 통제 사실로 사용하고 있다는 것을 깨닫지 못했습니다. 업데이트 된 답변 ('grant-eligible'를 삭제합니다)을보고 그것이 의미가 있는지 확인하십시오. – bogatron