Closed bkj closed 6 years ago
Yes, a chain graph is an extreme case and the absolute "worst" graph configuration for SnapVX. This is due to the underlying ADMM algorithm, which diffuses information between neighbors in the graph at each step. This takes n-1 steps (for n total nodes) to go from one edge of the chain to another, which means it often takes a long long time to converge. So UseADMM=True will almost always be slower than a serialized solution (aka: UseADMM=False) on chain graph problems.
I think the different solutions between the two is because of the stopping criteria in SnapVX being too lenient (when UseADMM = True). If you replace "gvx.Solve(UseADMM=False, Verbose=True)" with "gvx.Solve(UseADMM=False, Verbose=True, epsAbs = 0.001, epsRel = 0.001)", then the solutions should be much more closely matched, though it will unfortunately take even longer to converge than before...
OK -- makes sense. Thanks!
I'm getting very different results w/
UseADMM=True
vsUseADMM=False
on a fairly small problem -- wondering if someone here might be able to help me understand the source of the difference.With
UseADMM=False
, I get the following results in ~ 1 second:With
UseADMM=True
, it runs for ~ a minute and returns:The former is much closer to what I was expecting than the latter. Any thoughts on what's going on here? The graph is just a chain -- is that some kind of extreme case for the ADMM solver?
Thanks