Summary: | Implement sweep line method | ||
---|---|---|---|
Product: | UPPAAL | Reporter: | Gerd Behrmann <behrmann> |
Component: | Engine | Assignee: | Gerd Behrmann <behrmann> |
Status: | RESOLVED FIXED | ||
Severity: | enhancement | CC: | martijnh |
Priority: | P1 | ||
Version: | unspecified | ||
Hardware: | All | ||
OS: | All | ||
Architecture: |
Description
Gerd Behrmann
2004-11-18 11:50:26 CET
Prototype implementation has been checked in, although we need more work for alternative search orders and the generalised sweep line method (with non-monotonic progress measures). An implementation of the generalised sweep line method has been in CVS for some time. The main thing missing is type checking of the progress measures. Type checking has now been implemented and the sweepline method is enabled by default. A problem remaining is related to the use of the storage architecture (bug 30): By default, the discrete storage classes do not deallocate memory until the storage is freed. With the sweep line method, this means that they might hold onto a lot of memory that they could just as well be freed. Also, with current implementation of the sweepline method, storage instances are not shared between states with different progress values, not sharing is reduced. Finally, choosing a progress measure with *many* different values causes the exploration to become very slow and use a lot of memory due to the large number of state sets that will be allocated. The issue with storage not deallocating memory has been fixed by deallocating empty state sets whenever the sweepline is advanced. This also solves the problem with excessive memory usage when using a progress measure that yields many different progress values. It does however not add sharing between state set instances and it does not solve the problem that using a progress measure with *many* values is very slow (a factor of 150 slower in my test). Increasing priority. We should try to get this in before 3.6 alpha 2. This feature is more or less ready, but I need to check the code to see if anything is missing and create a few test cases. I have updated the sweepline implementation. The new implementation shares one stateset between all frontiers, thus potentially reducing memory consumption. There are still some issues: E.g. at the moment all states in a frontier are locked even when not on the waiting list. Thus they cannot be freed. However, as an inital implementation of the sweepline method, the current version is good enough. I will resolve the bug as fixed. Further improvements should be documented in new bugs. |