Ticket #38 (closed enhancement: wontfix)
Improving bisimulation engine.
| Reported by: | ivan.zapreev | Owned by: | ivan.zapreev |
|---|---|---|---|
| Priority: | major | Milestone: | MRMC future |
| Component: | Bisimulation Engine | Version: | 1.2.2 |
| Keywords: | Cc: | nguyen, christinajansen |
Description
Implement David Jansen's suggestions for lumping:
Based on the thesis of Tim, I can see the following some optimizations of the lumping implementation and perhaps some changes in MRMC that won't affect its efficiency in other parts, but still improve the lumping:
- Figure 3.1 on page 31: Memory savings are possible by
- Replacing the list of blocks by a dynamically-growing array of blocks [e. g. a list of arrays of, say, 512 blocks each]. (saves almost 8B per block, if the number of blocks is large.)
- Saving the flags of blocks more efficient. (saves 3.75B per block.)
- Replacing the double-linked list of states by a single-linked list. (saves 4B per state.) Needs a simple, fast trick for deletion of a state from a list.
- Replacing the array of pointers to states plus the pointers from each state to its block by an array that contains, for each state, a pointer to its block. (saves 4B per state.)
In total, I estimate that this will reduce MRMC memory usage during lumping by about 20%. These optimizations will not affect timing behavior much (except via reduced swapping).
- By organizing the (sparse) transition matrix in columns instead of in rows, we can implement the lumping algorithm more efficiently (page 33,but-last paragraph: looking up $Q(s_i,s_j)$ will then take constant time, not $O(\log n)$), while matrix-vector multiplications can be executed with the same efficiency as now (but in a different order).
Change History
Note: See
TracTickets for help on using
tickets.

