A workflow that I recently used when provided with an medium quality OD matrix and higher-quality counting data was as a follows:
- od2trips using the matrix
- assignment with duaIterate.py to find traffic equilibrium
- (iterative) adaptation to counts:
- running routeSampler.py with:
- the counting data
- the equilibrium routes as input
- with option --init-intput.remove-overflow (this mostly preserves the input but clones/removes some of the existing routes to match counts)
- with option --min-count X (where X is a bit lower than the average number of induction loops (edgeCount locations) passed by a route (this prevents fulfilling counts with only short routes)
- running duaIterate.py to make sure the added routes are in equilibrium
In my case 2 manual iterations of routeSampler and duaIterate were sufficient to have equilibrium routes that matched counts. Due to the nature of the algorithm, most of the original matrix was preserved.
Your experience may vary depending on how much the matrix and the counts are in agreement with each other.
(The other tools such as flowrouter and dfrouter have the same problem with jam-counts). Cadyts is probably more suitable for heavily jammed counts.
regards,
Jakob