0
전기 회로 감소 및 직렬 연결에 어려움이 있습니다. 나는 두 개의 노드로 분기를 모델로 한 시리얼 연결을 감지하기 위해 나는 다음과 같은 규칙을 작성했습니다 :누적 함수가 사실을 누적하지 않음
나는이 둘 이상있는 경우,이 것보다, 같은 시작 노드가 몇 가지 계산 할(defrule serial
?b1 <- (Branch (node2 ?n1) (resistance ?v1))
?b2 <- (Branch (node1 ?n1) (resistance ?v2) (node2 ?n3))
?c <- (accumulate (bind ?count 0)
(bind ?count (+ ?count 1))
?count
(Branch (node1 ?n1))
)
(test (eq ?c 1))
?c1 <- (accumulate (bind ?count1 0)
(bind ?count1 (+ ?count1 1))
?count1
(Branch (node2 ?n1))
)
(test (eq ?c1 1))
=>
(modify ?b1 (node2 ?n3) (resistance (+ ?v1 ?v2)))
(retract ?b2)
)
직렬 연결이 아닙니다. 불행히도이 카운트는 다음 분기에 대해 1을 반환합니다.
f-1 (MAIN::Branch (name AB) (node1 A) (node2 B) (resistance 2))
f-2 (MAIN::Branch (name BC) (node1 B) (node2 C) (resistance 2))
f-3 (MAIN::Branch (name BC) (node1 B) (node2 T) (resistance 5.0))
그리고 직렬 연결로 f-1과 f-2를 처리합니다. 이 문제에 대한 해결 방법이 있습니까?
필자가 작성한 코드의 문제점은 규칙이 작동하지 않아야한다는 것이다. 제 질문은 두 개의 분기가있을 때 노드 B가 1 개의 분기에 대해 node1이라는 이유입니다. 당신이 준 접근 방식을 시도 할 것입니다. – Sanja
이 규칙은 동일한 n1과 n2를 갖는 병렬 분기를 감지하지 않기 때문에 추가 이름 확인과 함께 주어진 코드를 사용하여 문제를 해결할 수있었습니다. 감사! – Sanja