Merge lp:~verifydtapn-contributers/verifydtapn/CutOptimization into lp:verifydtapn

Proposed by Peter Gjøl Jensen
Status: Merged
Approved by: Jiri Srba
Approved revision: 279
Merged at revision: 278
Proposed branch: lp:~verifydtapn-contributers/verifydtapn/CutOptimization
Merge into: lp:verifydtapn
Diff against target: 163 lines (+8/-78)
5 files modified
src/DiscreteVerification/DataStructures/NonStrictMarkingBase.cpp (+6/-12)
src/DiscreteVerification/VerificationTypes/LivenessSearch.cpp (+1/-32)
src/DiscreteVerification/VerificationTypes/LivenessSearch.hpp (+0/-1)
src/DiscreteVerification/VerificationTypes/ReachabilitySearch.cpp (+1/-32)
src/DiscreteVerification/VerificationTypes/ReachabilitySearch.hpp (+0/-1)
To merge this branch: bzr merge lp:~verifydtapn-contributers/verifydtapn/CutOptimization
Reviewer Review Type Date Requested Status
Mathias Grund Sørensen Approve
Jiri Srba Approve
Jakob Taankvist Approve
verifydtapn-contributers Pending
Review via email: mp+157861@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jakob Taankvist (jakob-taankvist) :
review: Approve
Revision history for this message
Jiri Srba (srba) :
review: Approve
Revision history for this message
Jiri Srba (srba) wrote :

Btw. this gives about 5% speedup in verification time.

Revision history for this message
Mathias Grund Sørensen (mathias.grund) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/DiscreteVerification/DataStructures/NonStrictMarkingBase.cpp'
2--- src/DiscreteVerification/DataStructures/NonStrictMarkingBase.cpp 2013-03-17 14:00:48 +0000
3+++ src/DiscreteVerification/DataStructures/NonStrictMarkingBase.cpp 2013-04-09 12:42:25 +0000
4@@ -263,18 +263,10 @@
5 std::cout << "Before cut: " << *this << std::endl;
6 #endif
7 for(PlaceList::iterator place_iter = this->places.begin(); place_iter != this->places.end(); place_iter++){
8- //remove dead tokens
9- if (place_iter->place->GetType() == TAPN::Dead) {
10- for(TokenList::iterator token_iter = place_iter->tokens.begin(); token_iter != place_iter->tokens.end(); token_iter++){
11- if(token_iter->getAge() > place_iter->place->GetMaxConstant()){
12- token_iter->remove(token_iter->getCount());
13- }
14- }
15- }
16 //set age of too old tokens to max age
17 int count = 0;
18- for(TokenList::iterator token_iter = place_iter->tokens.begin(); token_iter != place_iter->tokens.end(); token_iter++){
19- if(token_iter->getAge() > place_iter->place->GetMaxConstant()){
20+ for(TokenList::iterator token_iter = place_iter->tokens.begin(); token_iter != place_iter->tokens.end(); token_iter++) {
21+ if(token_iter->getAge() > place_iter->place->GetMaxConstant()){ // this will also removed dead tokens
22 TokenList::iterator beginDelete = token_iter;
23 if(place_iter->place->GetType() == TAPN::Std){
24 for(; token_iter != place_iter->tokens.end(); token_iter++){
25@@ -285,8 +277,10 @@
26 break;
27 }
28 }
29- Token t(place_iter->place->GetMaxConstant()+1,count);
30- this->AddTokenInPlace(*place_iter, t);
31+ if(count){
32+ Token t(place_iter->place->GetMaxConstant()+1,count);
33+ this->AddTokenInPlace(*place_iter, t);
34+ }
35 }
36 this->CleanUp();
37 #ifdef DEBUG
38
39=== modified file 'src/DiscreteVerification/VerificationTypes/LivenessSearch.cpp'
40--- src/DiscreteVerification/VerificationTypes/LivenessSearch.cpp 2013-03-25 14:03:05 +0000
41+++ src/DiscreteVerification/VerificationTypes/LivenessSearch.cpp 2013-04-09 12:42:25 +0000
42@@ -105,7 +105,7 @@
43 }
44
45 bool LivenessSearch::addToPW(NonStrictMarking* marking, NonStrictMarking* parent){
46- cut(marking);
47+ marking->cut();
48 marking->SetParent(parent);
49 unsigned int size = marking->size();
50
51@@ -138,37 +138,6 @@
52 return false;
53 }
54
55-void LivenessSearch::cut(NonStrictMarking* m){
56- for(PlaceList::iterator place_iter = m->places.begin(); place_iter != m->places.end(); place_iter++){
57- const TimedPlace& place = tapn->GetPlace(place_iter->place->GetIndex());
58- //remove dead tokens
59- if (place_iter->place->GetType() == Dead) {
60- for(TokenList::iterator token_iter = place_iter->tokens.begin(); token_iter != place_iter->tokens.end(); token_iter++){
61- if(token_iter->getAge() > place.GetMaxConstant()){
62- token_iter->remove(token_iter->getCount());
63- }
64- }
65- }
66- //set age of too old tokens to max age
67- int count = 0;
68- for(TokenList::iterator token_iter = place_iter->tokens.begin(); token_iter != place_iter->tokens.end(); token_iter++){
69- if(token_iter->getAge() > place.GetMaxConstant()){
70- TokenList::iterator beginDelete = token_iter;
71- if(place.GetType() == Std){
72- for(; token_iter != place_iter->tokens.end(); token_iter++){
73- count += token_iter->getCount();
74- }
75- }
76- m->RemoveRangeOfTokens(*place_iter, beginDelete, place_iter->tokens.end());
77- break;
78- }
79- }
80- Token t(place.GetMaxConstant()+1,count);
81- m->AddTokenInPlace(*place_iter, t);
82- }
83- m->CleanUp();
84-}
85-
86 void LivenessSearch::printStats(){
87 std::cout << " discovered markings:\t" << pwList->discoveredMarkings << std::endl;
88 std::cout << " explored markings:\t" << pwList->Size()-pwList->Explored() << std::endl;
89
90=== modified file 'src/DiscreteVerification/VerificationTypes/LivenessSearch.hpp'
91--- src/DiscreteVerification/VerificationTypes/LivenessSearch.hpp 2013-03-25 14:03:05 +0000
92+++ src/DiscreteVerification/VerificationTypes/LivenessSearch.hpp 2013-04-09 12:42:25 +0000
93@@ -46,7 +46,6 @@
94 vector<NonStrictMarking*> getPossibleNextMarkings(const NonStrictMarking& marking);
95 bool addToPW(NonStrictMarking* marking, NonStrictMarking* parent);
96 bool isDelayPossible(NonStrictMarking& marking);
97- void cut(NonStrictMarking* m);
98
99 protected:
100 int validChildren;
101
102=== modified file 'src/DiscreteVerification/VerificationTypes/ReachabilitySearch.cpp'
103--- src/DiscreteVerification/VerificationTypes/ReachabilitySearch.cpp 2013-03-25 14:03:05 +0000
104+++ src/DiscreteVerification/VerificationTypes/ReachabilitySearch.cpp 2013-04-09 12:42:25 +0000
105@@ -79,7 +79,7 @@
106 }
107
108 bool ReachabilitySearch::addToPW(NonStrictMarking* marking, NonStrictMarking* parent){
109- cut(marking);
110+ marking->cut();
111 marking->SetParent(parent);
112
113 unsigned int size = marking->size();
114@@ -109,37 +109,6 @@
115 return false;
116 }
117
118-void ReachabilitySearch::cut(NonStrictMarking* m){
119- for(PlaceList::iterator place_iter = m->places.begin(); place_iter != m->places.end(); place_iter++){
120- const TimedPlace& place = tapn->GetPlace(place_iter->place->GetIndex());
121- //remove dead tokens
122- if (place_iter->place->GetType() == Dead) {
123- for(TokenList::iterator token_iter = place_iter->tokens.begin(); token_iter != place_iter->tokens.end(); token_iter++){
124- if(token_iter->getAge() > place.GetMaxConstant()){
125- token_iter->remove(token_iter->getCount());
126- }
127- }
128- }
129- //set age of too old tokens to max age
130- int count = 0;
131- for(TokenList::iterator token_iter = place_iter->tokens.begin(); token_iter != place_iter->tokens.end(); token_iter++){
132- if(token_iter->getAge() > place.GetMaxConstant()){
133- TokenList::iterator beginDelete = token_iter;
134- if(place.GetType() == Std){
135- for(; token_iter != place_iter->tokens.end(); token_iter++){
136- count += token_iter->getCount();
137- }
138- }
139- m->RemoveRangeOfTokens(*place_iter, beginDelete, place_iter->tokens.end());
140- break;
141- }
142- }
143- Token t(place.GetMaxConstant()+1,count);
144- m->AddTokenInPlace(*place_iter, t);
145- }
146- m->CleanUp();
147-}
148-
149 void ReachabilitySearch::printStats(){
150 std::cout << " discovered markings:\t" << pwList->discoveredMarkings << std::endl;
151 std::cout << " explored markings:\t" << pwList->Size()-pwList->Explored() << std::endl;
152
153=== modified file 'src/DiscreteVerification/VerificationTypes/ReachabilitySearch.hpp'
154--- src/DiscreteVerification/VerificationTypes/ReachabilitySearch.hpp 2013-03-25 14:03:05 +0000
155+++ src/DiscreteVerification/VerificationTypes/ReachabilitySearch.hpp 2013-04-09 12:42:25 +0000
156@@ -47,7 +47,6 @@
157 vector<NonStrictMarking*> getPossibleNextMarkings(const NonStrictMarking& marking);
158 bool addToPW(NonStrictMarking* marking, NonStrictMarking* parent);
159 bool isDelayPossible(NonStrictMarking& marking);
160- void cut(NonStrictMarking* marking);
161
162 protected:
163 int validChildren;

Subscribers

People subscribed via source and target branches