77 #ifndef LEP_GENERATOR_H 78 #define LEP_GENERATOR_H 80 #include <LEP/mosp/config.h> 87 #include <LEDA/graph/graph.h> 88 #include <LEDA/core/random_source.h> 89 #include <LEDA/system/assert.h> 90 #include <LEDA/graph/node_map.h> 91 #include <LEDA/graph/edge_map.h> 92 #include <LEDA/core/list.h> 93 #include <LEDA/core/array.h> 95 #include <LEDA/graph.h> 96 #include <LEDA/random_source.h> 97 #include <LEDA/std/assert.h> 98 #include <LEDA/node_map.h> 99 #include <LEDA/edge_map.h> 100 #include <LEDA/list.h> 101 #include <LEDA/array.h> 139 leda::list<leda::node>& A,
140 leda::list<leda::node>& B,
141 leda::node_map<int>& capacity,
142 leda::edge_map<int>& rank
152 static const int default_seed = 13;
158 leda::random_source randomSource;
159 leda::random_source randomSourceI;
161 std::map<int, leda::node> ApplicantToNode;
162 std::map<int, leda::node> PostToNode;
164 void InitializeGraph( leda::graph& G,
165 leda::list<leda::node>& A,
166 leda::list<leda::node>& B,
167 leda::node_map<int>& capacity,
168 leda::edge_map<int>& rank );
171 virtual void GenerateEdges( leda::graph& G,
172 leda::list<leda::node>& A,
173 leda::list<leda::node>& B,
174 leda::node_map<int>& capacity,
175 leda::edge_map<int>& rank ) = 0;
213 assert( EdgeProbability >= 0.0 && EdgeProbability <= 1.0 );
227 assert( EdgeProbability >= 0.0 && EdgeProbability <= 1.0 );
236 virtual void GenerateEdges( leda::graph& G,
237 leda::list<leda::node>& A,
238 leda::list<leda::node>& B,
239 leda::node_map<int>& capacity,
240 leda::edge_map<int>& rank );
243 const double EdgeProbability;
247 bool notIncreaseRank(
int j );
322 virtual void GenerateEdges( leda::graph& G,
323 leda::list<leda::node>& A,
324 leda::list<leda::node>& B,
325 leda::node_map<int>& capacity,
326 leda::edge_map<int>& rank );
331 typedef std::set<int> Cluster;
332 typedef std::list< Cluster > Clustering;
334 Clustering PartitionPosts(
int n );
335 Clustering::const_iterator ChooseCluster(
const Clustering& c );
338 bool notIncreaseRank(
int j );
393 TieProbability( TieProp ), Capacity(capacity)
395 assert( EdgeProbability >= 0.0 && EdgeProbability <= 1.0 );
396 assert( TieProbability >= 0.0 && TieProbability <= 1.0 );
397 assert( Capacity >= 1 );
411 TieProbability( TieProp ), Capacity( capacity )
413 assert( EdgeProbability >= 0.0 && EdgeProbability <= 1.0 );
414 assert( TieProbability >= 0.0 && TieProbability <= 1.0 );
415 assert( Capacity >= 1 );
424 virtual void GenerateEdges( leda::graph& G,
425 leda::list<leda::node>& A,
426 leda::list<leda::node>& B,
427 leda::node_map<int>& capacity,
428 leda::edge_map<int>& rank );
432 const double EdgeProbability;
434 const double TieProbability;
440 void GetRandomSubset(
int n,
int k, leda::array<int>& a );
504 Capacity(capacity), Regions(regions), Lambda(lambda)
506 assert( Capacity >= 1 );
507 assert( Regions >= 1 );
508 assert( Lambda > 0.0 );
522 Capacity(capacity), Regions(regions), Lambda(lambda)
524 assert( Capacity >= 1 );
525 assert( Regions >= 1 );
526 assert( Lambda > 0.0 );
536 typedef std::set<int> Cluster;
537 typedef std::vector< Cluster > Region;
539 bool notIncreaseRank(
int j );
540 void CreateRegion( Region& R,
int& remainingPosts,
int postsPerRegion,
int& firstPostNumber );
541 void CreateRegions( std::vector<Region>& R,
int regions,
int posts );
542 int ChooseRegion( std::vector<Region>& R );
545 virtual void GenerateEdges( leda::graph& G,
546 leda::list<leda::node>& A,
547 leda::list<leda::node>& B,
548 leda::node_map<int>& capacity,
549 leda::edge_map<int>& rank );
560 #endif // LEP_GENERATOR_H
The main package namespace.
Definition: RANK_MAX_MATCHING.h:53
VSExponentialInstanceGenerator(int apps, int posts, double Density, double lambda, int seed)
Create a new generator.
Definition: generator.h:224
virtual ~StructuredInstanceGenerator()
Destructor.
int NumPosts() const
Definition: generator.h:146
RegionalInstanceGenerator(int apps, int posts, int capacity, int regions, double lambda)
Create a new generator.
Definition: generator.h:502
An fixed size "exponential" instance generator.
Definition: generator.h:290
FSExponentialInstanceGenerator(int apps, int posts, double lambda)
Create a new generator.
Definition: generator.h:299
FSExponentialInstanceGenerator(int apps, int posts, double lambda, int seed)
Create a new generator.
Definition: generator.h:311
RegionalInstanceGenerator(int apps, int posts, int capacity, int regions, double lambda, int seed)
Create a new generator.
Definition: generator.h:520
StructuredInstanceGenerator(int apps, int posts, int seed=default_seed)
Construct a structured random instance.
VSExponentialInstanceGenerator(int apps, int posts, double Density, double lambda)
Create a new generator.
Definition: generator.h:210
Regional instance generator.
Definition: generator.h:491
void GenerateGraph(leda::graph &G, leda::list< leda::node > &A, leda::list< leda::node > &B, leda::node_map< int > &capacity, leda::edge_map< int > &rank)
Generate a random structured instance.
void GenerateGML(std::ostream &o)
Generate a random structured instance in GML format.
An variable size "exponential" instance generator.
Definition: generator.h:200
int NumApplicants() const
Definition: generator.h:149
An instance generator class.
Definition: generator.h:112