mirror of
https://github.com/aljazceru/lnd-manageJ.git
synced 2026-01-28 02:14:40 +01:00
@@ -46,17 +46,20 @@ class ArcInitializer {
|
||||
int endNode = pubkeyToIntegerMapping.getMappedInteger(edge.endNode());
|
||||
|
||||
long quantizedLowerBound = quantize(edgeWithLiquidityInformation.availableLiquidityLowerBound());
|
||||
addArcForKnownLiquidity(edge, startNode, endNode, quantizedLowerBound);
|
||||
int remainingPieces = addArcForKnownLiquidity(edge, startNode, endNode, quantizedLowerBound);
|
||||
if (remainingPieces == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
Coins upperBound = edgeWithLiquidityInformation.availableLiquidityUpperBound();
|
||||
long quantizedUpperBound = quantize(upperBound);
|
||||
long uncertainButPossibleLiquidity = quantizedUpperBound - quantizedLowerBound;
|
||||
long capacityPiece = uncertainButPossibleLiquidity / piecewiseLinearApproximations;
|
||||
long capacityPiece = uncertainButPossibleLiquidity / remainingPieces;
|
||||
if (capacityPiece == 0) {
|
||||
return;
|
||||
}
|
||||
long unitCost = quantize(maximumCapacity) / uncertainButPossibleLiquidity;
|
||||
for (int i = 1; i <= piecewiseLinearApproximations; i++) {
|
||||
for (int i = 1; i <= remainingPieces; i++) {
|
||||
int arcIndex = minCostFlow.addArcWithCapacityAndUnitCost(
|
||||
startNode,
|
||||
endNode,
|
||||
@@ -67,12 +70,13 @@ class ArcInitializer {
|
||||
}
|
||||
}
|
||||
|
||||
private void addArcForKnownLiquidity(Edge edge, int startNode, int endNode, long quantizedLowerBound) {
|
||||
private int addArcForKnownLiquidity(Edge edge, int startNode, int endNode, long quantizedLowerBound) {
|
||||
if (quantizedLowerBound <= 0) {
|
||||
return;
|
||||
return piecewiseLinearApproximations;
|
||||
}
|
||||
int arcIndex = minCostFlow.addArcWithCapacityAndUnitCost(startNode, endNode, quantizedLowerBound, 0);
|
||||
edgeMapping.put(arcIndex, edge);
|
||||
return piecewiseLinearApproximations - 1;
|
||||
}
|
||||
|
||||
private Coins getMaximumCapacity(Collection<EdgeWithLiquidityInformation> edgesWithLiquidityInformation) {
|
||||
|
||||
@@ -108,6 +108,13 @@ class ArcInitializerTest {
|
||||
|
||||
@Test
|
||||
void adds_uncertain_liquidity_as_second_arc() {
|
||||
ArcInitializer arcInitializer = new ArcInitializer(
|
||||
minCostFlow,
|
||||
integerMapping,
|
||||
edgeMapping,
|
||||
QUANTIZATION,
|
||||
2
|
||||
);
|
||||
arcInitializer.addArcs(Set.of(edgeWithLiquidityInformation));
|
||||
assertThat(minCostFlow.getUnitCost(1)).isEqualTo(1);
|
||||
assertThat(minCostFlow.getCapacity(1)).isEqualTo(75);
|
||||
@@ -123,7 +130,7 @@ class ArcInitializerTest {
|
||||
5
|
||||
);
|
||||
arcInitializer.addArcs(Set.of(edgeWithLiquidityInformation));
|
||||
assertThat(minCostFlow.getNumArcs()).isEqualTo(6);
|
||||
assertThat(minCostFlow.getNumArcs()).isEqualTo(5);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -159,7 +166,7 @@ class ArcInitializerTest {
|
||||
integerMapping,
|
||||
edgeMapping,
|
||||
10,
|
||||
QUANTIZATION
|
||||
2
|
||||
);
|
||||
arcInitializer.addArcs(Set.of(edgeWithLiquidityInformation));
|
||||
// one arc for the known liquidity (25 / 10 = 2), 100 / 10 - 2 = 8 remaining
|
||||
@@ -173,7 +180,7 @@ class ArcInitializerTest {
|
||||
integerMapping,
|
||||
edgeMapping,
|
||||
20,
|
||||
5
|
||||
6
|
||||
);
|
||||
arcInitializer.addArcs(Set.of(edgeWithLiquidityInformation));
|
||||
// one arc for the known liquidity (25 / 20 = 1), 100 / 20 - 1 = 4 remaining: 4 < 5, no additional arc added
|
||||
|
||||
Reference in New Issue
Block a user