annotate src/sbdd/BDDSatisfier.java @ 62:c392bd59155f

あきらかに、exists はバグってるね。
author kono
date Thu, 10 Jan 2008 02:29:42 +0900
parents 4102a550bd52
children 80db395eeb30
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
1 package sbdd;
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
2
55
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
3 import java.util.LinkedList;
49
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
4
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
5
55
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
6 import verifier.Backtrack;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
7 import lite.BDDSolver;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
8 import lite.Continuation;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
9 import lite.ITLNodeFactory;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
10 import lite.ITLNodeFactoryInterface;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
11 import lite.ITLNodeParser;
49
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
12 import lite.ITLSatisfier;
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
13 import lite.ITLSolver;
55
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
14 import lite.Next;
49
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
15
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
16 public class BDDSatisfier extends ITLSatisfier {
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
17
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
18
55
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
19 public ITLNodeParser<ITLSolver> p;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
20 public SBDDFactory sf;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
21
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
22 public LinkedList<SBDDEntry> queue;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
23 public SBDDSet state;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
24
49
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
25 /**
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
26 *
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
27 */
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
28 private static final long serialVersionUID = 1L;
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
29
55
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
30
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
31 public void init() {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
32 lf = new ITLNodeFactory();
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
33 p = new ITLNodeParser<ITLSolver>((ITLNodeFactoryInterface<ITLSolver>) lf);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
34 sf = new SBDDFactory();
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
35 // empty = ITLNodeFactory.emptySolver;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
36 // empty = SBDDFactory.emptySolver;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
37 empty = lf.emptyNode();
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
38 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
39
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
40 public BDDSatisfier() {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
41 init();
49
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
42 lf = new SBDDFactory();
55
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
43 true_ = SBDDFactory.trueSolver;
58
4102a550bd52 *** empty log message ***
kono
parents: 56
diff changeset
44 state = sf.set();
4102a550bd52 *** empty log message ***
kono
parents: 56
diff changeset
45 state.getEntry(SBDDFactory.trueSolver).expanded = true;
4102a550bd52 *** empty log message ***
kono
parents: 56
diff changeset
46 state.getEntry(SBDDFactory.falseSolver).expanded = true;
4102a550bd52 *** empty log message ***
kono
parents: 56
diff changeset
47 state.getEntry(SBDDFactory.emptySolver).expanded = true;
49
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
48 }
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
49
55
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
50 public void showAllNext(String s) {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
51 ITLSolver n = p.parse(s);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
52 BDDSolver b = n.toSBDD(sf);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
53 System.out.println(b);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
54 develop(b, new Print());
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
55 // System.out.println(sf.hash);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
56 System.out.println();
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
57 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
58
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
59 class Print implements Next {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
60 public ITLSolver next(ITLSatisfier sat, Continuation next, ITLSolver value) throws Backtrack {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
61 System.out.println(" "+sat.choicePoint()+" -> "+value);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
62 throw sat.backtrack;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
63 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
64 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
65
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
66
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
67 public void showVerify(String s) {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
68 ITLSolver n = p.parse(s);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
69 BDDSolver b = n.toSBDD(sf);
56
57259d2b9484 *** empty log message ***
kono
parents: 55
diff changeset
70 System.out.println(s);
55
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
71 verify(b);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
72 // System.out.println(sf.hash);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
73 System.out.println();
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
74 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
75
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
76
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
77 class AllNext implements Next {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
78 public ITLSolver next(ITLSatisfier sat, Continuation next, ITLSolver value) throws Backtrack {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
79 System.out.print(" "+sat.choicePoint()+" -> "+value);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
80 if (value!=null) {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
81 SBDDEntry e = state.getEntry(value);
58
4102a550bd52 *** empty log message ***
kono
parents: 56
diff changeset
82 if (e.expanded) {
55
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
83 // skip
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
84 } else {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
85 queue.add(e);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
86 System.out.print("!");
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
87 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
88 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
89 System.out.println();
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
90 throw sat.backtrack;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
91 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
92 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
93
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
94 public void verify(ITLSolver n) {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
95 queue = new LinkedList<SBDDEntry>();
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
96 AllNext allNext = new AllNext();
56
57259d2b9484 *** empty log message ***
kono
parents: 55
diff changeset
97 SBDDEntry b = state.getEntry(n);
62
c392bd59155f あきらかに、exists はバグってるね。
kono
parents: 58
diff changeset
98 this.clear(); // if not empty something wrong
58
4102a550bd52 *** empty log message ***
kono
parents: 56
diff changeset
99 if (b.expanded) {
4102a550bd52 *** empty log message ***
kono
parents: 56
diff changeset
100 // already checked
4102a550bd52 *** empty log message ***
kono
parents: 56
diff changeset
101 System.out.println(" already checked.");
4102a550bd52 *** empty log message ***
kono
parents: 56
diff changeset
102 return;
4102a550bd52 *** empty log message ***
kono
parents: 56
diff changeset
103 }
56
57259d2b9484 *** empty log message ***
kono
parents: 55
diff changeset
104 queue.add(b);
55
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
105 for(SBDDEntry e;(e = queue.poll())!=null; ) {
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
106 if (e.expanded) continue;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
107 e.expanded = true;
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
108 System.out.println(e.key+"->");
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
109 develop(e.key, allNext);
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
110 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
111 }
99abe1d8fe69 small example works.
kono
parents: 51
diff changeset
112
49
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
113
6213620eb992 *** empty log message ***
kono
parents:
diff changeset
114 }