pub struct NetworkSimplex<F, C> {
n: usize,
edges: Vec<Edge<F, C>>,
lowers: Vec<F>,
dss: Vec<F>,
bucket_size: Option<usize>,
minor_limit: Option<usize>,
}Fields§
§n: usize§edges: Vec<Edge<F, C>>§lowers: Vec<F>§dss: Vec<F>§bucket_size: Option<usize>§minor_limit: Option<usize>Implementations§
Source§impl<F, C> NetworkSimplex<F, C>
impl<F, C> NetworkSimplex<F, C>
Sourcepub fn new(n: usize) -> Self
pub fn new(n: usize) -> Self
Examples found in repository?
crates/library_checker/src/graph/min_cost_b_flow.rs (line 8)
5pub fn min_cost_b_flow(reader: impl Read, writer: impl Write) {
6 prepare_io!(reader, writer);
7 sc!(n, m, b: [i64; iter n]);
8 let mut ns = NetworkSimplex::<i64, i128>::new(n);
9 for (i, b) in b.enumerate() {
10 ns.add_demand_supply(i, b);
11 }
12 sc!(edges: [(usize, usize, i64, i64, i128); iter m]);
13 for (s, t, l, u, c) in edges {
14 ns.add_edge(s, t, l, u, c);
15 }
16 let sol = ns.solve_minimize();
17 if let Some(sol) = sol {
18 pp!(@lf sol.cost, @it sol.potentials, @it sol.flows);
19 } else {
20 pp!("infeasible");
21 }
22}Sourcepub fn add_demand(&mut self, vid: usize, demand: F)
pub fn add_demand(&mut self, vid: usize, demand: F)
Add demand
Sourcepub fn add_supply(&mut self, vid: usize, supply: F)
pub fn add_supply(&mut self, vid: usize, supply: F)
Add supply
Sourcepub fn add_demand_supply(&mut self, vid: usize, ds: F)
pub fn add_demand_supply(&mut self, vid: usize, ds: F)
Add demand/supply (positive for supply, negative for demand)
Examples found in repository?
crates/library_checker/src/graph/min_cost_b_flow.rs (line 10)
5pub fn min_cost_b_flow(reader: impl Read, writer: impl Write) {
6 prepare_io!(reader, writer);
7 sc!(n, m, b: [i64; iter n]);
8 let mut ns = NetworkSimplex::<i64, i128>::new(n);
9 for (i, b) in b.enumerate() {
10 ns.add_demand_supply(i, b);
11 }
12 sc!(edges: [(usize, usize, i64, i64, i128); iter m]);
13 for (s, t, l, u, c) in edges {
14 ns.add_edge(s, t, l, u, c);
15 }
16 let sol = ns.solve_minimize();
17 if let Some(sol) = sol {
18 pp!(@lf sol.cost, @it sol.potentials, @it sol.flows);
19 } else {
20 pp!("infeasible");
21 }
22}Sourcepub fn add_edge(&mut self, from: usize, to: usize, lower: F, upper: F, cost: C)
pub fn add_edge(&mut self, from: usize, to: usize, lower: F, upper: F, cost: C)
Add edge with lower/upper capacity and cost
Examples found in repository?
crates/library_checker/src/graph/min_cost_b_flow.rs (line 14)
5pub fn min_cost_b_flow(reader: impl Read, writer: impl Write) {
6 prepare_io!(reader, writer);
7 sc!(n, m, b: [i64; iter n]);
8 let mut ns = NetworkSimplex::<i64, i128>::new(n);
9 for (i, b) in b.enumerate() {
10 ns.add_demand_supply(i, b);
11 }
12 sc!(edges: [(usize, usize, i64, i64, i128); iter m]);
13 for (s, t, l, u, c) in edges {
14 ns.add_edge(s, t, l, u, c);
15 }
16 let sol = ns.solve_minimize();
17 if let Some(sol) = sol {
18 pp!(@lf sol.cost, @it sol.potentials, @it sol.flows);
19 } else {
20 pp!("infeasible");
21 }
22}pub fn set_bucket_size(&mut self, size: usize)
pub fn set_minor_limit(&mut self, limit: usize)
Sourcepub fn solve_minimize(self) -> Option<NetworkSimplexSolution<F, C>>
pub fn solve_minimize(self) -> Option<NetworkSimplexSolution<F, C>>
Examples found in repository?
crates/library_checker/src/graph/min_cost_b_flow.rs (line 16)
5pub fn min_cost_b_flow(reader: impl Read, writer: impl Write) {
6 prepare_io!(reader, writer);
7 sc!(n, m, b: [i64; iter n]);
8 let mut ns = NetworkSimplex::<i64, i128>::new(n);
9 for (i, b) in b.enumerate() {
10 ns.add_demand_supply(i, b);
11 }
12 sc!(edges: [(usize, usize, i64, i64, i128); iter m]);
13 for (s, t, l, u, c) in edges {
14 ns.add_edge(s, t, l, u, c);
15 }
16 let sol = ns.solve_minimize();
17 if let Some(sol) = sol {
18 pp!(@lf sol.cost, @it sol.potentials, @it sol.flows);
19 } else {
20 pp!("infeasible");
21 }
22}Trait Implementations§
Auto Trait Implementations§
impl<F, C> Freeze for NetworkSimplex<F, C>
impl<F, C> RefUnwindSafe for NetworkSimplex<F, C>
impl<F, C> Send for NetworkSimplex<F, C>
impl<F, C> Sync for NetworkSimplex<F, C>
impl<F, C> Unpin for NetworkSimplex<F, C>
impl<F, C> UnsafeUnpin for NetworkSimplex<F, C>
impl<F, C> UnwindSafe for NetworkSimplex<F, C>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more