// ----------------------------------------------------------- public static void main(String[] args) { try { Options.verbose = true; // DEBUG for (int i = 0; i < args.length; i++) { Automata agv = AutomataIO.loadXML(args[i]); long time = System.currentTimeMillis(); BDDAutomata ba = new BDDAutomata(agv); DisjunctivePartitions part = new DisjunctivePartitions(ba); DisjunctiveSearch ds = new DisjunctiveSearch(part); int initial = BDDAutomataHelper.getI(ba); int x = ds.forward(initial); double states = BDDAutomataHelper.countStates(ba, x); part.cleanup(); ds.cleanup(); ba.cleanup(); time = System.currentTimeMillis() - time; System.out.println("Found " + states + " states in " + args[i] + " in " + time + "ms."); } } catch (Exception exx) { exx.printStackTrace(); } }
public int forward(int bdd_initial) { int qkk, qk = manager.ref(bdd_initial); do { qkk = qk; int next = image(qk); qk = manager.orTo(qk, next); manager.deref(next); } while (qkk != qk); return qk; }
public int image(int from) { int cube = manager.getBDDCubeS(); Permutation perm = manager.getPermSp2S(); int sum = 0; for (int i = 0; i < dp.getSize(); i++) { int tmp = manager.ref(manager.relProd(from, dp.getBDDTWave(i), cube)); sum = manager.orTo(sum, tmp); manager.deref(tmp); } int next = manager.ref(manager.replace(sum, perm)); manager.deref(sum); return next; }