Skip to content

Commit

Permalink
avg live bounds wip
Browse files Browse the repository at this point in the history
  • Loading branch information
joostjager committed Jan 27, 2025
1 parent d0b4f5a commit f726a8e
Showing 1 changed file with 36 additions and 25 deletions.
61 changes: 36 additions & 25 deletions lightning/src/routing/scoring.rs
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,34 @@ impl ChannelLiquidities {
Self(new_hash_map())
}

fn merge(&mut self, other: Self) {
fn time_passed(&mut self, duration_since_epoch: Duration, decay_params: ProbabilisticScoringDecayParameters) {
self.0.retain(|_scid, liquidity| {
liquidity.min_liquidity_offset_msat =
liquidity.decayed_offset(liquidity.min_liquidity_offset_msat, duration_since_epoch, decay_params);
liquidity.max_liquidity_offset_msat =
liquidity.decayed_offset(liquidity.max_liquidity_offset_msat, duration_since_epoch, decay_params);
liquidity.last_updated = duration_since_epoch;

// TODO: Call decay multiple times.
let elapsed_time =
duration_since_epoch.saturating_sub(liquidity.offset_history_last_updated);
if elapsed_time > decay_params.historical_no_updates_half_life {
let half_life = decay_params.historical_no_updates_half_life.as_secs_f64();
if half_life != 0.0 {
liquidity.liquidity_history.decay_buckets(elapsed_time.as_secs_f64() / half_life);
liquidity.offset_history_last_updated = duration_since_epoch;
}
}
liquidity.min_liquidity_offset_msat != 0 || liquidity.max_liquidity_offset_msat != 0 ||
liquidity.liquidity_history.has_datapoints()
});
}

fn merge(&mut self, mut other: Self, duration_since_epoch: Duration, decay_params: ProbabilisticScoringDecayParameters) {
// Decay both set of scores to make them comparable.
self.time_passed(duration_since_epoch, decay_params);
other.time_passed(duration_since_epoch, decay_params);

for (id, item) in other.0 {
match self.0.get_mut(&id) {
None => { self.0.insert(id, item); },
Expand Down Expand Up @@ -899,8 +926,8 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ProbabilisticScorer<G, L> whe
}

/// Merge external channel liquidity data into the internal state.
pub fn merge(&mut self, other: ChannelLiquidities) {
self.channel_liquidities.merge(other);
pub fn merge(&mut self, other: ChannelLiquidities, duration_since_epoch: Duration) {
self.channel_liquidities.merge(other, duration_since_epoch, self.decay_params);
}

#[cfg(test)]
Expand Down Expand Up @@ -1125,9 +1152,12 @@ impl ChannelLiquidity {
}

fn merge(&mut self, other: &Self) {
self.liquidity_history.merge(&other.liquidity_history);
// Take average for min/max liquidity offsets.
self.min_liquidity_offset_msat = (self.min_liquidity_offset_msat + other.min_liquidity_offset_msat) / 2;
self.max_liquidity_offset_msat = (self.max_liquidity_offset_msat + other.max_liquidity_offset_msat) / 2;

// TODO: Merge other fields.
// Merge historical liquidity data.
self.liquidity_history.merge(&other.liquidity_history);
}

/// Returns a view of the channel liquidity directed from `source` to `target` assuming
Expand Down Expand Up @@ -1659,26 +1689,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ScoreUpdate for Probabilistic
}

fn time_passed(&mut self, duration_since_epoch: Duration) {
let decay_params = self.decay_params;
self.channel_liquidities.retain(|_scid, liquidity| {
liquidity.min_liquidity_offset_msat =
liquidity.decayed_offset(liquidity.min_liquidity_offset_msat, duration_since_epoch, decay_params);
liquidity.max_liquidity_offset_msat =
liquidity.decayed_offset(liquidity.max_liquidity_offset_msat, duration_since_epoch, decay_params);
liquidity.last_updated = duration_since_epoch;

let elapsed_time =
duration_since_epoch.saturating_sub(liquidity.offset_history_last_updated);
if elapsed_time > decay_params.historical_no_updates_half_life {
let half_life = decay_params.historical_no_updates_half_life.as_secs_f64();
if half_life != 0.0 {
liquidity.liquidity_history.decay_buckets(elapsed_time.as_secs_f64() / half_life);
liquidity.offset_history_last_updated = duration_since_epoch;
}
}
liquidity.min_liquidity_offset_msat != 0 || liquidity.max_liquidity_offset_msat != 0 ||
liquidity.liquidity_history.has_datapoints()
});
self.channel_liquidities.time_passed(duration_since_epoch, self.decay_params);
}
}

Expand Down

0 comments on commit f726a8e

Please sign in to comment.