removed dependency on array_t
This commit is contained in:
@@ -19,20 +19,20 @@ int correctPosition(int index,variable v, DdNode * node,int posBVar);
|
||||
|
||||
|
||||
|
||||
DdNode * retFunction(DdManager * mgr,array_t *expression, array_t *v)
|
||||
DdNode * retFunction(DdManager * mgr,expr expression, variables v)
|
||||
/* given an expression term1+term2+...+termn, returns the BDD that implements that function */
|
||||
{
|
||||
array_t * term;
|
||||
term term1;
|
||||
DdNode * tNode, * tmp, *tmp1;
|
||||
int i;
|
||||
|
||||
i=0;
|
||||
tNode=Cudd_ReadLogicZero(mgr);
|
||||
Cudd_Ref(tNode);
|
||||
while(i<array_n(expression))
|
||||
while(i<expression.nTerms)
|
||||
{
|
||||
term=array_fetch(array_t * ,expression,i);
|
||||
tmp=retTerm(mgr,term,v);
|
||||
term1=expression.terms[i];
|
||||
tmp=retTerm(mgr,term1,v);
|
||||
Cudd_Ref(tmp);
|
||||
tmp1=Cudd_bddOr(mgr,tNode,tmp);
|
||||
Cudd_Ref(tmp1);
|
||||
@@ -43,7 +43,7 @@ DdNode * retFunction(DdManager * mgr,array_t *expression, array_t *v)
|
||||
return tNode;
|
||||
}
|
||||
|
||||
DdNode * retTerm(DdManager * mgr,array_t *term, array_t * v)
|
||||
DdNode * retTerm(DdManager * mgr,term t, variables v)
|
||||
/* given a term V1=v1 and V2=v2 ... Vn=vn, returns the BDD that implements that function */
|
||||
{
|
||||
factor f;
|
||||
@@ -53,9 +53,9 @@ DdNode * retTerm(DdManager * mgr,array_t *term, array_t * v)
|
||||
i=0;
|
||||
fNode=Cudd_ReadOne(mgr);
|
||||
Cudd_Ref(fNode);
|
||||
while (i<array_n(term))
|
||||
while (i<t.nFact)
|
||||
{
|
||||
f=array_fetch(factor, term, i);
|
||||
f=t.factors[i];
|
||||
tmp=retFactor(mgr,f,v);
|
||||
Cudd_Ref(tmp);
|
||||
tmp1= Cudd_bddAnd(mgr,fNode,tmp);
|
||||
@@ -67,7 +67,7 @@ DdNode * retTerm(DdManager * mgr,array_t *term, array_t * v)
|
||||
return fNode;
|
||||
}
|
||||
|
||||
DdNode * retFactor(DdManager * mgr, factor f, array_t * vars)
|
||||
DdNode * retFactor(DdManager * mgr, factor f, variables vars)
|
||||
/* given a factor V=v, returns the BDD that implements that function */
|
||||
{
|
||||
int varIndex;
|
||||
@@ -76,19 +76,19 @@ DdNode * retFactor(DdManager * mgr, factor f, array_t * vars)
|
||||
int bit;
|
||||
variable v;
|
||||
DdNode * node, *booleanVar, * tmp;
|
||||
array_t * booleanVars;
|
||||
DdNode ** booleanVars;
|
||||
|
||||
|
||||
varIndex=f.var;
|
||||
value=f.value;
|
||||
v=array_fetch(variable, vars, varIndex);
|
||||
v=vars.varar[varIndex];
|
||||
booleanVars=v.booleanVars;
|
||||
i=v.nBit-1;
|
||||
node=Cudd_ReadOne(mgr);
|
||||
Cudd_Ref(node);
|
||||
/* booelan var with index 0 in v.booleanVars is the most significant */
|
||||
do {
|
||||
booleanVar=array_fetch(DdNode *,booleanVars,i);
|
||||
booleanVar=booleanVars[i];
|
||||
bit=value & 01;
|
||||
if (bit)
|
||||
{
|
||||
@@ -111,7 +111,7 @@ DdNode * retFactor(DdManager * mgr, factor f, array_t * vars)
|
||||
|
||||
|
||||
|
||||
double Prob(DdNode *node, array_t * vars,array_t * bVar2mVar, GHashTable * nodes)
|
||||
double Prob(DdNode *node, variables vars, GHashTable * nodes)
|
||||
/* compute the probability of the expression rooted at node
|
||||
nodes is used to store nodes for which the probability has alread been computed
|
||||
so that it is not recomputed
|
||||
@@ -129,7 +129,7 @@ so that it is not recomputed
|
||||
if (Cudd_IsConstant(node))
|
||||
{
|
||||
value=node->type.value;
|
||||
return value;
|
||||
return value;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -141,10 +141,10 @@ so that it is not recomputed
|
||||
}
|
||||
else
|
||||
{
|
||||
mVarIndex=array_fetch(int,bVar2mVar,index);
|
||||
v=array_fetch(variable,vars,mVarIndex);
|
||||
mVarIndex=vars.bVar2mVar[index];
|
||||
v=vars.varar[mVarIndex];
|
||||
nBit=v.nBit;
|
||||
res=ProbBool(node,0,nBit,0,v,vars,bVar2mVar,nodes);
|
||||
res=ProbBool(node,0,nBit,0,v,vars,nodes);
|
||||
key=(DdNode **)malloc(sizeof(DdNode *));
|
||||
*key=node;
|
||||
rp=(double *)malloc(sizeof(double));
|
||||
@@ -156,22 +156,22 @@ so that it is not recomputed
|
||||
}
|
||||
|
||||
double ProbBool(DdNode *node, int bits, int nBit,int posBVar,variable v,
|
||||
array_t * vars,array_t * bVar2mVar, GHashTable * nodes)
|
||||
variables vars, GHashTable * nodes)
|
||||
/* explores a group of binary variables making up the multivalued variable v */
|
||||
{
|
||||
DdNode *T,*F;
|
||||
double p,res;
|
||||
array_t * probs;
|
||||
|
||||
double * probs;
|
||||
|
||||
probs=v.probabilities;
|
||||
if (nBit==0)
|
||||
{
|
||||
if (bits>=array_n(probs))
|
||||
if (bits>=v.nVal)
|
||||
return 0;
|
||||
else
|
||||
{
|
||||
p=array_fetch(double,probs,bits);
|
||||
res=p*Prob(node,vars,bVar2mVar,nodes);
|
||||
p=probs[bits];
|
||||
res=p*Prob(node,vars,nodes);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -183,16 +183,16 @@ array_t * vars,array_t * bVar2mVar, GHashTable * nodes)
|
||||
F = node->type.kids.E;
|
||||
bits=bits<<1;
|
||||
|
||||
res=ProbBool(T,bits+1,nBit-1,posBVar+1,v,vars,bVar2mVar,nodes)+
|
||||
ProbBool(F,bits,nBit-1,posBVar+1,v,vars,bVar2mVar,nodes);
|
||||
res=ProbBool(T,bits+1,nBit-1,posBVar+1,v,vars,nodes)+
|
||||
ProbBool(F,bits,nBit-1,posBVar+1,v,vars,nodes);
|
||||
return res;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
bits=bits<<1;
|
||||
res=ProbBool(node,bits+1,nBit-1,posBVar+1,v,vars,bVar2mVar,nodes)+
|
||||
ProbBool(node,bits,nBit-1,posBVar+1,v,vars,bVar2mVar,nodes);
|
||||
res=ProbBool(node,bits+1,nBit-1,posBVar+1,v,vars,nodes)+
|
||||
ProbBool(node,bits,nBit-1,posBVar+1,v,vars,nodes);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -204,6 +204,6 @@ currently explored by ProbBool */
|
||||
{
|
||||
DdNode * bvar;
|
||||
|
||||
bvar=array_fetch(DdNode *,v.booleanVars,posBVar);
|
||||
bvar=v.booleanVars[posBVar];
|
||||
return bvar->index==index;
|
||||
}
|
||||
|
Reference in New Issue
Block a user