Я работаю над сокращением электрической цепи и испытываю трудности с последовательным подключением. Я смоделировал ветку с двумя узлами, и для обнаружения последовательного соединения я написал следующее правило:
(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 как последовательное соединение. Есть ли обходной путь для этой проблемы?