@@ -154,35 +154,6 @@ def encode_domain(self, domain):
154
154
return self .encode_domain_InfluenceGraph (domain )
155
155
raise TypeError (f"I don't know what to do with { type (domain )} " )
156
156
157
- def encode_BooleanFunction (self , n , f , ensure_dnf = True ):
158
- def clauses_of_dnf (f ):
159
- if f == self .ba .FALSE :
160
- return [False ]
161
- if f == self .ba .TRUE :
162
- return [True ]
163
- if isinstance (f , boolean .OR ):
164
- return f .args
165
- else :
166
- return [f ]
167
- def literals_of_clause (c ):
168
- def make_literal (l ):
169
- if isinstance (l , boolean .NOT ):
170
- return (l .args [0 ].obj , - 1 )
171
- else :
172
- return (l .obj , 1 )
173
- lits = c .args if isinstance (c , boolean .AND ) else [c ]
174
- return map (make_literal , lits )
175
- facts = []
176
- if ensure_dnf :
177
- f = self .ba .dnf (f ).simplify ()
178
- for cid , c in enumerate (clauses_of_dnf (f )):
179
- if isinstance (c , bool ):
180
- facts .append (clingo .Function ("constant" , symbols (n , s2v (c ))))
181
- else :
182
- for m , v in literals_of_clause (c ):
183
- facts .append (clingo .Function ("clause" , symbols (n , cid + 1 , m , v )))
184
- return facts
185
-
186
157
def encode_domain_BooleanNetworksEnsemble (self , bns ):
187
158
preds = set ()
188
159
facts = []
@@ -199,12 +170,8 @@ def encode_domain_BooleanNetworksEnsemble(self, bns):
199
170
200
171
def encode_domain_BooleanNetwork (self , bn ):
201
172
self .ba = bn .ba
202
- facts = []
203
- facts .append (asp .Function ("nbnode" , symbols (len (bn ))))
204
- for n , f in bn .items ():
205
- facts .append (clingo .Function ("node" , symbols (n )))
206
- facts += self .encode_BooleanFunction (n , f , ensure_dnf = False )
207
- return facts
173
+ return [bn .asp_of_bn () + "\n " +
174
+ str (asp .Function ("nbnode" , symbols (len (bn ))))]
208
175
209
176
def encode_domain_InfluenceGraph (self , pkn ):
210
177
self .load_template_domain ()
@@ -273,6 +240,13 @@ def load_template_eval(self):
273
240
"eval(X,N,-1) :- eval(X,N,C,-1): clause(N,C,_,_); clause(N,_,_,_), mcfg(X,_,_)" ,
274
241
"eval(X,N,V) :- clamped(X,N,V)" ,
275
242
"eval(X,N,V) :- constant(N,V), mcfg(X,_,_), not clamped(X,N,_)" ,
243
+
244
+ "eval(X,N,V) :- evalbdd(X,N,V), node(N), not clamped(X,N,_)" ,
245
+ "evalbdd(X,V,V) :- mcfg(X,_,_), V=(-1;1)" ,
246
+ "evalbdd(X,B,V) :- bdd(B,N,_,HI), mcfg(X,N,1), evalbdd(X,HI,V)" ,
247
+ "evalbdd(X,B,V) :- bdd(B,N,LO,_), mcfg(X,N,-1), evalbdd(X,LO,V)" ,
248
+ "evalbdd(X,B,V) :- mcfg(X,_,_), bdd(B,V)" ,
249
+
276
250
"mcfg(X,N,V) :- ext(X,N,V)" ,
277
251
]
278
252
self .push (rules )
0 commit comments