2017-11-29 2 views
0

Ich arbeite an der Reduzierung der elektrischen Schaltung und Schwierigkeiten mit der seriellen Verbindung. Ich habe Zweig modellierte mit zwei Knoten, und um serielle Verbindung zu erfassen, habe ich folgende Regel geschrieben:Akkumulieren Funktion akkumuliert nicht Tatsache

(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) 
    ) 

ich zählen will, wie viele Zweige gleiche Ausgangsknoten haben, wenn es mehr als eine ist, als dies keine serielle Verbindung. Leider gibt diese Zählung 1 für folgende Zweige 1 zurück:

und behandelt f-1 und f-2 als serielle Verbindung. Gibt es eine Problemumgehung für dieses Problem?

Antwort

1

Die Regel feuert nicht für die Menge AB, BC und BT, und ich nehme an, es sollte nicht, da B verbindet mit C und T. Und ich denke, ein Knoten, der beseitigt werden kann, darf nicht mehr als einen Vorgänger haben und nicht mehr als ein Nachfolger. Deshalb schlage ich diese Regel vor:

(defrule myserial 
    ?b1 <- (Branch (node1 ?n1) (node2 ?n2) (resistance ?v1)) 
    ?b2 <- (Branch (node1 ?n2) (node2 ?n3) (resistance ?v2)) 
    (not (Branch (node1 ~?n1) (node2 ?n2))) 
    (not (Branch (node1 ?n2) (node2 ~?n3))) 
=> 
    (modify ?b1 (node2 ?n3) (resistance (+ ?v1 ?v2))) 
    (retract ?b2) 
) 
+0

Problem mit Code, den ich geschrieben habe, ist, dass Regel feuert, und es sollte nicht feuern. Meine Frage war, warum es zählt, dass Knoten B Knoten 1 für 1 Zweig ist, wenn es zwei Zweige gibt. Ich werde versuchen dir näher zu kommen. – Sanja

+0

Ich habe es geschafft, ein Problem mit dem angegebenen Code zu lösen, mit zusätzlicher Namensüberprüfung, da diese Regel parallele Zweige nicht erkennt, die das gleiche haben? N1 und? N2. Vielen Dank! – Sanja

Verwandte Themen