Camargue
separator.hpp
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5 
6 #ifndef CMR_SEPARATOR_H
7 #define CMR_SEPARATOR_H
8 
9 #include "active_tour.hpp"
10 #include "process_cuts.hpp"
11 #include "datagroups.hpp"
12 #include "karp.hpp"
13 #include "graph.hpp"
14 #include "hypergraph.hpp"
15 
16 #include <memory>
17 #include <vector>
18 
19 namespace CMR {
20 
22 namespace Sep {
23 
25 class Separator {
26 public:
28  Separator(const std::vector<Graph::Edge> &core_edges_,
29  const LP::ActiveTour &active_tour_,
30  Data::SupportGroup &suppdata,
31  Data::KarpPartition &kpart, int seed);
32 
33  bool segment_sep();
34  bool fast2m_sep();
35  bool blkcomb_sep();
36  bool exact2m_sep();
37 
38  bool simpleDP_sep();
39 
40  bool connect_sep();
41  bool exsub_sep();
42 
43  bool pool_sep(ExternalCuts &EC);
44  bool tighten_pool(ExternalCuts &EC);
45  bool consec1_sep(ExternalCuts &EC);
46  bool pool_tour_tight(ExternalCuts &EC);
47 
48  bool local_sep(int chunk_sz, bool sphere);
49 
50  LPcutList &segment_q() { return seg_q; }
51  LPcutList &fastblossom_q() { return fast2m_q; }
52  LPcutList &blockcomb_q() { return blkcomb_q; }
53 
54  CutQueue<ex_blossom> &exblossom_q() { return ex2m_q; }
55  CutQueue<dominoparity> &simpleDP_q() { return dp_q; }
56 
57  LPcutList &connect_cuts_q() { return connect_q; }
58  LPcutList &exact_sub_q() { return exsub_q; }
59 
60  LPcutList &cutpool_q() { return pool_q; }
61  LPcutList &consec1_q() { return con1_q; }
62 
63  LPcutList &local_cuts_q() { return local_q; }
64 
66  bool filter_primal = true;
67 
68  bool verbose = false;
69 
70 private:
71  void set_TG();
72 
73  const std::vector<Graph::Edge> &core_edges;
74  const LP::ActiveTour &active_tour;
75  Data::SupportGroup &supp_data;
76  Data::KarpPartition &karp_part;
77 
78  TourGraph TG;
79 
80  std::vector<int> perm_elist;
81 
82  const int random_seed;
83 
84  LPcutList seg_q;
85  LPcutList fast2m_q;
86  LPcutList blkcomb_q;
87 
88  CutQueue<ex_blossom> ex2m_q;
90 
91  LPcutList connect_q;
92  LPcutList exsub_q;
93 
94  LPcutList pool_q;
95  LPcutList con1_q;
96 
97  LPcutList local_q;
98 };
99 
100 }
101 }
102 
103 #endif
Support graph data for an LP solution.
Definition: datagroups.hpp:174
Separator(const std::vector< Graph::Edge > &core_edges_, const LP::ActiveTour &active_tour_, Data::SupportGroup &suppdata, Data::KarpPartition &kpart, int seed)
Construct a Separator using problem data.
Definition: separator.cpp:29
Representing cuts outside the LP solver.
Header for classes/structures/functions to work with graphs.
Management of Concorde lpcut_in linked list.
Definition: cc_lpcuts.hpp:56
The external storage of a collection of HyperGraph cuts in a Relaxation.
Definition: hypergraph.hpp:126
Data group structures.
void set_TG()
Construct the TourGraph TG.
Definition: separator.cpp:49
Class template for queue of cuts in some form.
Definition: process_cuts.hpp:30
bool filter_primal
The desired filter_primal value for ConcordeSeparator inheritors.
Definition: separator.hpp:66
Karp partitions of TSP instances.
Information about the active tour in a CoreLP.
Definition: active_tour.hpp:30
Structures for storing and processing cuts.
Management of basic separation routines.
Definition: separator.hpp:25
The namespace for this project.
Definition: abc_nodesel.hpp:20
Class for computing and storing Karp partitions.
Definition: karp.hpp:30
Monitoring the active tour in the solution process.
Wrapper to Concorde CCtsp_lpgraph for pricing cuts at tours.
Definition: cc_lpcuts.hpp:28