2017-11-10 6 views
0

저는 대학 프로젝트에 CLIPS를 사용하고 있습니다. 이는 질문 중심의 전문가 시스템이며 몇 가지 초기 질문을 무작위로 질문해야하므로이 규칙 그룹을 작성했습니다. 및 (임의 설정 - 전략) : 주요 증상에 대한 지식을 바탕으로CLIPS는 서로 다른 규칙 그룹에 대해 서로 다른 충돌 해결 전략을 설정했습니다.

(defrule ask-age 
    (not (age ?)) 
    => 
    (bind ?answer (question “What’s your age?”)) 
    (assert (age ?answer))) 

(defrule ask-gender 
    (not (age ?)) 
    => 
    (bind ?answer (question “What’s your gender?”)) 
    (assert (gender ?answer))) 

(defrule ask-main-symptom 
    (not (main-symptom ? TRUE)) 
    => 
    (bind ?answer (question “What’s the main symptom?”)) 
    (assert (main-symptom ?answer TRUE))) 

, 규칙의 또 다른 그룹이 활성화됩니다, 나는 충돌 해결 전략을 변경해야합니다. (assert (main-symptom? answer TRUE)를 수행 한 후) ask-main-symptom 규칙에 (set-strategy complexity)를 넣는 것이 맞습니까? 더 좋은 방법이 있을까요? 잠재적으로 충돌하는 규칙과 원래 OPS5로 작성된 프로그램을 실행하기위한 렉스/MEA를 확인하기 위해 무작위 전략을 사용하는 것보다 그 자체가 문제지만, 다른 곳은 어디에도 없습니다

(defrule ask-main-symptom 
    (not (main-symptom ? TRUE)) 
    => 
    (bind ?answer (question “What’s the main symptom?”)) 
    (assert (main-symptom ?answer TRUE)) 
    (set-strategy complexity)) 

답변

0

, 나는 상황에 걸쳐 온 적이 어디 실행 중에 두 가지 전략을 사용하여 깊이가 아닌 전략을 사용했습니다. 전략을 변경하는 것이 프로젝트 요구 사항 중 하나라면, 나는 규칙에서 그것을 할 것이지만, 다른 질문 규칙과 관련하여 무작위로 발동 될 질문 - 주 증상 규칙에서 수행하는 것이 아니라, 더 낮은 중요성을 창출한다 규칙은 모든 질문 규칙을 실행 한 후에 전략을 변경합니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 예, 프로젝트 요구 사항입니다. 나는 '(변경 전략 변경) ( '(declare (돌출) -1)' '=>' ' (설정 전략 복잡성)' 과 같은 규칙을 사용하려고 시도했다. 초기 질문은 무작위로 묻고, 그러나 주심 증상 규칙으로 특정 증상을 주장한 후에는 그 증상에 따라 모든 규칙이 실제로 실행되지 않는 변경 전략 규칙 이전에 의제에 포함됩니다. –