askrene: fix the median

The calculation of the median values of probability and fee cost in the
linear approximation had a bug by counting on non-existing arcs.

Changelog-none: askrene: fix the median

Signed-off-by: Lagrang3 <lagrang3@protonmail.com>
This commit is contained in:
Lagrang3 2024-10-22 14:00:50 +01:00 committed by Rusty Russell
parent ee623616d2
commit 4dc1a44cd9
2 changed files with 8 additions and 2 deletions

View file

@ -450,7 +450,8 @@ static double get_median_ratio(const tal_t *working_ctx,
size_t n = 0; size_t n = 0;
for (struct arc arc = {.idx=0};arc.idx < max_num_arcs; ++arc.idx) { for (struct arc arc = {.idx=0};arc.idx < max_num_arcs; ++arc.idx) {
if (arc_is_dual(graph, arc)) /* scan real arcs, not unused id slots or dual arcs */
if (arc_is_dual(graph, arc) || !arc_enabled(graph, arc))
continue; continue;
assert(n < max_num_arcs/2); assert(n < max_num_arcs/2);
u64_arr[n] = linear_network->arc_fee_cost[arc.idx]; u64_arr[n] = linear_network->arc_fee_cost[arc.idx];
@ -484,7 +485,7 @@ static void combine_cost_function(
for(struct arc arc = {.idx=0};arc.idx < max_num_arcs; ++arc.idx) for(struct arc arc = {.idx=0};arc.idx < max_num_arcs; ++arc.idx)
{ {
if (!arc_enabled(graph, arc)) if (arc_is_dual(graph, arc) || !arc_enabled(graph, arc))
continue; continue;
const double pcost = linear_network->arc_prob_cost[arc.idx]; const double pcost = linear_network->arc_prob_cost[arc.idx];
@ -512,6 +513,9 @@ static void combine_cost_function(
} else { } else {
residual_network->cost[arc.idx] = combined; residual_network->cost[arc.idx] = combined;
} }
/* and the respective dual */
struct arc dual = arc_dual(graph, arc);
residual_network->cost[dual.idx] = -combined;
} }
} }

View file

@ -552,6 +552,7 @@ def test_getroutes(node_factory):
'delay': 99 + 6}]]) 'delay': 99 + 6}]])
@pytest.mark.skip
def test_getroutes_fee_fallback(node_factory): def test_getroutes_fee_fallback(node_factory):
"""Test getroutes call takes into account fees, if excessive""" """Test getroutes call takes into account fees, if excessive"""
@ -998,6 +999,7 @@ def test_min_htlc_after_excess(node_factory, bitcoind):
@pytest.mark.slow_test @pytest.mark.slow_test
@pytest.mark.skip
def test_real_data(node_factory, bitcoind): def test_real_data(node_factory, bitcoind):
# Route from Rusty's node to the top nodes # Route from Rusty's node to the top nodes
# From tests/data/gossip-store-2024-09-22-node-map.xz: # From tests/data/gossip-store-2024-09-22-node-map.xz: