[HN Gopher] Negative-weight single-source shortest paths in near...
       ___________________________________________________________________
        
       Negative-weight single-source shortest paths in near-linear time
        
       Author : Anon84
       Score  : 110 points
       Date   : 2023-01-22 16:41 UTC (6 hours ago)
        
 (HTM) web link (arxiv.org)
 (TXT) w3m dump (arxiv.org)
        
       | gregfjohnson wrote:
       | How does this compare to the classic Bellman-Ford algorithm and
       | subsequent improvements by Yen and Bannister&Eppstein?
        
         | Sniffnoy wrote:
         | I mean, the runtimes are right there in the abstract; this is
         | pretty easy to compare. Bellman-Ford takes time Theta(|V||E|),
         | and as best I can tell the improvements you mention don't
         | change that, they're just constant-factor improvements. As
         | opposed to this algorithm being O(|E|*log(|V|)^8*log(W)), where
         | W is the largest absolute value of a negative edge.
         | 
         | The abstract of this paper even compare the runtime to the
         | state of the art, and what it compares to isn't Bellman-Ford or
         | the improvements you mention; there had already been asymptotic
         | improvements on those.
        
       | xiphias2 wrote:
       | Another paper with no open source implementation :(
       | 
       | I loved it that it's possible (just like the min cost flow
       | improvements), but it's just too long for me to understand and
       | implement it.
        
       | vsskanth wrote:
       | Not very knowledgeable but are there any implications for path
       | planning for self driving cars ?
        
         | extropy wrote:
         | For most use cases shortest path is super simple and fast
         | problem on modern PCs. So might be useful on extra large
         | synthetic networks. Neural nets?, Trading logs?, Image
         | processing?
         | 
         | Also negative weights are rare in real life applications. And
         | def not in what you would consider normal path planning.
        
         | repsilat wrote:
         | For path finding heuristic methods give "sub-linear" time
         | usually (if you have a pre-processed unchanging network with
         | random access and amortize its construction over many queries).
         | A-star is the old school one, but folks use fancier methods
         | today. In a server farm linear time is too slow, basically.
         | 
         | Interestingly, on a vehicle just doing Dijkstra's for within-
         | city pathfinding is probably fine though if you've optimised
         | the constant factors down. Likely no negative costs.
        
         | throw827474737 wrote:
         | None, very irrelevant and where it applies very minor problem
         | vs all the others ;)
        
       | dataflow wrote:
       | What are some applications of this problem (SSSP with negative-
       | weight edges)? This looks awesome but I'm not sure where I would
       | want to use it.
        
         | DropPanda wrote:
         | One application of negative weights in a cost graph could be
         | energy consumption for battery electric vehicles. Downhill,
         | regenerative breaking can result in a net increase of battery
         | charge.
        
       | bertman wrote:
       | Quanta article about the paper, discussion from 3 days ago:
       | 
       | https://news.ycombinator.com/item?id=34439701
        
         | [deleted]
        
       | oh_sigh wrote:
       | Is there an intuitive explanation for how a log^8 ends up in the
       | algorithm? Why not log^4 or 16?
        
       | sitkack wrote:
       | Can someone ELI12? How big of a deal is this for real world
       | applications?
       | 
       | Presentation by Aaron Bernstein (coauthor) on the paper
       | https://www.youtube.com/watch?v=Bpw3yqWT_d0
       | 
       | Presentation by Danupon Nanongkai (coauthor) on the paper
       | https://www.youtube.com/watch?v=awvBpvlbG1M
       | 
       | Implementation in Java https://github.com/nevingeorge/Negative-
       | Weight-SSSP
        
         | tylerhou wrote:
         | No comment on how useful this is for real world applications.
         | But here is a technique of the algorithm. Most of my knowledge
         | is from CS 270, where this was taught last week. (The course
         | notes are public, the lecture is not.)
         | https://cs270.org/spring23/lec/
         | 
         | A naive attempt at adapting Dijkstra's to graphs with negative
         | weight edges is to add a constant bias to every edge weight to
         | make all weights positive, then run Dijkstra's. But that
         | doesn't work because it changes the ordering of paths (wrt.
         | cost) if their lengths differ. A path with length one will have
         | its cost increased by B, while a path with length 100 will have
         | its length increased by 100 * B. If the length-100 path was
         | cheaper before adding the bias, after adding it bias it can be
         | more expensive. So path ordering is not preserved.
         | 
         | But that idea, modified slightly, is not too far off a
         | technique that works. Instead of adding a weight to each edge,
         | the technique is to add a weight to each vertex (call this
         | phi(v)) and modify each edge (u, v)'s weight to w(u, v) +
         | phi(u) - phi(v). It turns out that modifying each edge's weight
         | in this way preserves the ordering of paths that start from s
         | and end at t. Consider a path s -> a -> b -> t; its new weight
         | under w_phi is:                 w(s, a) + phi(s) - phi(a) +
         | w(a, b) + phi(a) - phi(b) +       w(b, t) + phi(b) - phi(t)
         | = phi(s) + w(s, a) + w(a, b) + w(b, t) - phi(t)
         | 
         | Notice how phi(a) and phi(b) cancel each other out. In other
         | words, any path from s to t's weight will be changed by
         | _exactly_ phi(s) - phi(t), which is a constant! Therefore, the
         | ordering of paths under cost is preserved under this new weight
         | function (weights modified by phi).
         | 
         | This technique, called "price functions" is not novel -- it has
         | been known from the 70's. The paper's main contribution is how
         | to discover price functions very efficiently. The main way the
         | paper does this as follows: first, decompose the graph into
         | smaller strongly connected components (SCCs) whose paths have a
         | "low" number of negative edge weight graphs by removing some
         | small subset of edges (low diameter decomposition, or LDD).
         | Second, recursively find a phi function that makes all edges in
         | the interiors of these SCCs have positive weight. Third, modify
         | that phi (since phis compose additively) for the DAG induced by
         | the SCC decomposition: "fixup" weights of edges that cross from
         | one SCC into another. Finally, modify that phi again to account
         | for the edges that were removed from the graph. (This last part
         | is usually "slow," but it turns out that it is fast because of
         | the LDD algorithm tends to only remove a small number of edges
         | in any path.)
         | 
         | Glossed over a lot of things, and probably not completely
         | accurate -- see the lecture notes or the paper for the real
         | analysis.
        
         | hammock wrote:
         | This article helped me (I'm not a math guy at all, just a quick
         | learner)
         | 
         | https://algs4.cs.princeton.edu/44sp/
         | 
         | Read the top section then the first answer in the Q&A at the
         | bottom.
         | 
         | Basically the problem is to find the least-cost (shortest) path
         | across a graph of nodes from point a to point b, but the best
         | algorithm we have (Djikstra's) runs in exponential time in the
         | worst case when there are some negative edge weights (see
         | context below). This guy found an algorithm that runs must
         | faster, in near-linear time.
         | 
         | Context that is helpful is to think of edge weights not as
         | distances, but as time or cost (this allows negative weights).
         | Imagine a process workflow or something.
         | 
         | Another helpful context that emerges from this is "negative
         | cycle" which is an endless loop of negative weight edges
         | (therefore asking an algorithm to find the "shortest" lowest
         | weight path from one point to another that includes that cycle
         | will fail). You can have negative weights without negative
         | cycles though
        
           | ithinkso wrote:
           | > but the best algorithm we have (Djikstra's) runs in
           | exponential time in the worst case
           | 
           | Dijkstra doesn't handle negative weights so in that case you
           | can use Ford-Bellman. It's slower than Dijkstra but far from
           | exponential - O(VE) or something like that.
        
             | [deleted]
        
             | hammock wrote:
             | > Dijkstra doesn't handle negative weights
             | 
             | I took this straight from the Q&A I referenced in my link:
             | 
             |  _Q. Does Dijkstra 's algorithm work with negative weights?
             | A. Yes and no. There are two shortest paths algorithms
             | known as Dijkstra's algorithm, depending on whether a
             | vertex can be enqueued on the priority queue more than
             | once. When the weights are nonnegative, the two versions
             | coincide (as no vertex will be enqueued more than once).
             | The version implemented in DijkstraSP.java (which allows a
             | vertex to be enqueued more than once) is correct in the
             | presence of negative edge weights (but no negative cycles)
             | but its running time is exponential in the worst case. _
        
               | thaumasiotes wrote:
               | > The version implemented in DijkstraSP.java (which
               | allows a vertex to be enqueued more than once) is correct
               | in the presence of negative edge weights (but no negative
               | cycles)
               | 
               | This is a strange parenthetical. No shortest-path
               | algorithm can be correct in the presence of a negative
               | cycle; the concept of "shortest path" does not apply to
               | such a graph.
        
               | ghusbands wrote:
               | I suspect it's to make clear to the peanut gallery that
               | there is indeed a valid shortest path in the tests they
               | were doing.
        
           | munchler wrote:
           | Wouldn't a negative cycle be a good thing? You could drive
           | the total cost down as low as you want before exiting the
           | loop.
        
             | londons_explore wrote:
             | Yes, but the 'lowest' cost path is then travel to cycle, go
             | round loop infinity times, and then go to destination.
        
             | vecter wrote:
             | Negative cycles are bad for the exact reason you said. Not
             | "bad" from the perspective of "let's lower the cost as much
             | as possible", but "bad" from the perspective that it
             | violates certain assumptions of Dikjstra's algorithm which
             | leads it to produce incorrect results.
             | 
             | When have a negative weight cycle, you can drive down the
             | cost to be arbitrarily low by running through that cycle as
             | many times as you'd like. What does "shortest path" or
             | "lowest cost path" mean in this context then?
             | 
             | More info:
             | https://stackoverflow.com/questions/13159337/why-doesnt-
             | dijk...
        
               | sitkack wrote:
               | I have seen this in video games where there is some
               | resource that respawns too quickly and the players just
               | end up cycling back to the powerup every n-seconds. Easy
               | to get stuck in a local minimum.
        
             | kzrdude wrote:
             | It creates a new situation you'll have to handle. If it's
             | assumed the shortest path is finite, how many steps should
             | it maximally take, etc? In many problem settings a negative
             | cycle would indicate the model is broken, and you'd want to
             | know that.
        
           | sitkack wrote:
           | The video presentation from the author is approachable even
           | for a non-domain expert. It looks like this has pretty broad
           | applicability to applications in chemical processes,
           | scheduling, logistics (pick ups and drop offs along the
           | route), re-fueling, etc.
           | 
           | I think @DropPanda gave a great example of regenerative
           | charging in an EV.
           | 
           | In the video the author does use cost/price-function
           | terminology.
           | 
           | Djikstra doesn't handle negative weights, Bellman-Ford is
           | optimal for positive edge only. This apparently is also
           | easier to parallelize.
           | 
           | The Quanta article mentioned below is _excellent_
           | https://www.quantamagazine.org/finally-a-fast-algorithm-
           | for-...
        
             | spritefs wrote:
             | > Bellman-Ford is optimal for positive edge only.
             | 
             | ???
             | 
             | CLRS says it takes negative weight edges (just no negative
             | cycles) and does it in O(VE). I have no idea where you're
             | getting this from
        
           | rhn_mk1 wrote:
           | What are negative weights good for?
        
             | hammock wrote:
             | Imagine a step in a process that saves you cost/time
             | (negative edge weight) if you do it at one point, but adds
             | cost/time (positive edge weight) if you do it at a
             | different point
        
             | wjholden wrote:
             | An interesting use case is if you want to need to apply
             | graph algorithms to a problem where edges multiply instead
             | of adding. Just take the log of the multiplier and now your
             | multiplication problem is addition.
             | 
             | For example, suppose you cannot exchange the US dollar for
             | the Russian ruble. You have to go through some path such as
             | USD -> EUR -> RUB. Of all possible paths, which one gives
             | you the most favorable exchange? You can use Bellman-Ford
             | to find out.
        
               | thaumasiotes wrote:
               | > For example, suppose you cannot exchange the US dollar
               | for the Russian ruble. You have to go through some path
               | such as USD -> EUR -> RUB. Of all possible paths, which
               | one gives you the most favorable exchange?
               | 
               | Why is it necessary to assume I can't exchange dollars
               | directly for rubles? If that is possible, wouldn't I
               | still want whatever path has the most favorable exchange
               | rate?
        
               | [deleted]
        
           | rcme wrote:
           | It doesn't seem like the shortest path on a graph with
           | negative cycles would be defined for any algorithm.
        
             | hammock wrote:
             | Right
        
               | tejtm wrote:
               | "single source shortest acyclic path" would be the
               | closest term that could make sense
        
       | rhelz wrote:
       | If you want to interview for any job at an FPGA company, please
       | read this paper first :-). I majorly blew an interview question
       | which this paper would have helped me ace.
        
         | jldugger wrote:
         | Interesting, I'm not sure I see the link. Is SSSP relevant in
         | programming FPGAs optimally?
        
       | gigatexal wrote:
       | I really do need to up my maths game so I can take advantage of
       | all these papers and their new and novel solutions to things like
       | this. Otherwise I'll have to wait until someone throws it into a
       | library :(
        
         | bee_rider wrote:
         | They look to have distilled things down to a pair of Algorithms
         | in pseudocode, if you want to take a swing at implementation-
         | for-understanding.
        
         | evouga wrote:
         | Well, this is a very interesting theoretical breakthrough, but
         | it remains to be seen how it benchmarks in practice. The
         | constant and log factors might be steep for practical inputs.
        
       ___________________________________________________________________
       (page generated 2023-01-22 23:00 UTC)