47# include <gsl/gsl_rng.h>
48# include <gsl/gsl_randist.h>
68 std::unique_ptr<Net>
net;
87 const double & density)
100 for (
int k = 0;
k < num_arcs; ++
k)
105 if (
arcs.search(src, tgt) !=
nullptr)
109 this->net->insert_arc(src, tgt, cap);
141 <<
"Rank sigma " + std::to_string(
rank_sigma) +
" less than 0";
143 <<
"Rank sigma " + std::to_string(
rank_sigma) +
" greater than 1";
151 curr_rank.access(
k) = this->net->insert_node();
166 <<
"forward density less than backward density";
168 <<
"forward density out of range";
170 <<
"backward density out of range";
172 const size_t &
N =
rank.size();
179 for (
int i = 1; i <
N - 1; ++i)
228 return this->net.release();
Exception handling system with formatted messages for Aleph-w.
#define ah_domain_error_if(C)
Throws std::domain_error if condition holds.
size_t size() const noexcept
Count the number of elements of the list.
Index for fast arc lookup by its endpoint nodes.
void create_ranks(const size_t num_ranks, const size_t num_nodes_by_rank, const double &rank_sigma)
void connect_ranks(size_t src_idx_rank, size_t tgt_idx_rank, const double &cap_mean, const double &cap_sigma, const double &density)
void create_forward_arcs_in_rank(size_t curr_rank_idx, const double &cap_mean, const double &cap_sigma, const double &forward_density)
void create_backward_arcs_in_rank(const size_t curr_rank_idx, const double &cap_mean, const double &cap_sigma, const double &backward_density)
Random_Network_Flow(const unsigned int seed=time(nullptr))
std::unique_ptr< Net > net
void create_arcs(const double &cap_mean, const double &cap_sigma, const double &forward_density, const double &backward_density)
After created ranks and their nodes, this routine creates the arcs.
DynArray< DynArray< Node * > > rank
Net * operator()(const size_t num_ranks, const size_t num_nodes_by_rank, const double &rank_sigma=0.2, const double &cap_mean=100, const double &cap_sigma=0.9, const double &forward_density=0.3, const double &backward_density=0.01)
The number of nodes per rank is determined by a distribution normal with half num_nodes_by_rank and s...
DynArray< Graph::Arc * > arcs
DynList< T > maps(const C &c, Op op)
Classic map operation.
Flow network implemented with adjacency lists.
void reset()
Reset all arc flows to zero.
Lazy and scalable dynamic array implementation.
Dynamic set implementations based on balanced binary search trees.
Arc indexing for fast lookup by endpoint nodes.
Maximum flow minimum cost network algorithms.