2017-02-24 12 views
2

DdManagerには、x, y, x', y'という変数があり、BDDはxyで作成されています。 は、今私は、すなわち、x'y'によって構築された、同一のBDDを取得し、y'x'からxyを変更したいです。BDDの変数をCUDDパッケージで置き換えるにはどうすればよいですか?

CUDDパッケージを使用してこれを取得するにはどうすればよいですか?私はモデル検査アルゴリズムを実装したいときにこの問題に遭遇しました。私はこの操作を実装する方法を知りたいか、シンボリックモデル検査アルゴリズムを誤解しているかどうかを知りたいですか? ありがとうございます!

答えて

2

これは、機能Cudd_bddSwapVariablesで行います。

  1. BDDマネージャ
  2. あなたが他の人によって、変数を置き換えたいBDD:それは次のパラメータを取得します。
  3. (またCudd_bddNewVarを返すBDDノードによって表される)の変数の第1のアレイ
  4. 変数
  5. 交換されている変数の数の二番目の配列。

自分で配列を割り当てて解放する必要があります。 package ddに含まれているCUDDにCythonバインディングを使用して変数置換の

+0

はご回答いただきありがとうございます!私は文書を読んで、この機能を試してみましたが失敗しました。あなたの応答を読んだ後、私はもう一度やり直します。おそらく私は前に間違ったパラメータを設定しています。ありがとう〜 – HelloWorld

0

例:

from dd import cudd 

bdd = cudd.BDD() # instantiate a shared BDD manager 
bdd.declare("x", "y", "x'", "y'") 
u = bdd.add_expr("x \/ y") # create the BDD for the disjunction of x and y 
rename = dict(x="x'", y="y'") 
v = bdd.let(rename, u) # substitution of x' for x and y' for y 
s = bdd.to_expr(v) 
>>> s 
"ite(x', TRUE, y')" 

# another way to confirm the result is as expected 
v_ = bdd.add_expr("x' \/ y'") 
assert v == v_ 
関連する問題