///|
/// Continue a balanced solve from a coarse epsilon to a finer epsilon while
/// slightly changing the target histogram.
fn main {
let source = [0.31, 0.28, 0.41]
let initial_target = [0.11, 0.56, 0.33]
let target = [0.11, 0.53, 0.36]
let cost = [[5.13, 0.15, 4.65], [2.24, 3.79, 0.89], [6.44, 4.28, 2.27]]
match
@moonot.balanced_sinkhorn_with_warm_start(
source,
initial_target,
cost,
{ epsilon: 2.0, tolerance: 1.0e-9, max_iterations: 1000, },
None,
) {
Err(_) => println("transport solve failed")
Ok((coarse, seed)) => {
println("coarse epsilon iterations:")
println(coarse.iterations)
match
@moonot.balanced_sinkhorn_with_warm_start(
source,
target,
cost,
{ epsilon: 0.5, tolerance: 1.0e-9, max_iterations: 1000, },
Some(seed),
) {
Err(_) => println("transport solve failed")
Ok((fine, _)) => {
println("fine epsilon iterations with warm start:")
println(fine.iterations)
match
@moonot.balanced_sinkhorn(source, target, cost, {
epsilon: 0.5,
tolerance: 1.0e-9,
max_iterations: 1000,
}) {
Err(_) => println("transport solve failed")
Ok(cold) => {
println("fine epsilon iterations from a cold start:")
println(cold.iterations)
}
}
}
}
}
}
}