Ich mag würde BDD für die folgende Boolesche Funktion erstellen:CUDD Summe von Produkten Booleschen Ausdruck
F = (A'B'C'D') OR (A'B C) OR (C' D') OR (A)
ich nur F = (A'B'C'D')
mit dem folgenden Code erstellen zu verwaltende aber wie andere Produktterme an die bestehenden BDD hinzufügen?
int main (int argc, char *argv[])
{
char filename[30];
DdManager *gbm; /* Global BDD manager. */
gbm = Cudd_Init(0,0,CUDD_UNIQUE_SLOTS,CUDD_CACHE_SLOTS,0); /* Initialize a new BDD manager. */
DdNode *bdd, *var, *tmp_neg, *tmp;
int i;
bdd = Cudd_ReadOne(gbm); /*Returns the logic one constant of the manager*/
Cudd_Ref(bdd); /*Increases the reference count of a node*/
for (i = 3; i >= 0; i--) {
var = Cudd_bddIthVar(gbm,i); /*Create a new BDD variable*/
tmp_neg = Cudd_Not(var); /*Perform NOT boolean operation*/
tmp = Cudd_bddAnd(gbm, tmp_neg, bdd); /*Perform AND boolean operation*/
Cudd_Ref(tmp);
Cudd_RecursiveDeref(gbm,bdd);
bdd = tmp;
}
bdd = Cudd_BddToAdd(gbm, bdd);
print_dd (gbm, bdd, 2,4);
sprintf(filename, "./bdd/graph.dot");
write_dd(gbm, bdd, filename);
Cudd_Quit(gbm);
return 0;
}
Muss ich eine andere Schleife verwenden, um 'conj0' zu' conj3' zu erstellen? Können Sie einen Beispielcode angeben, um 'conj0' und' conj1' zu erstellen? Vielen Dank! – husna