Bcp 1.4.4
Loading...
Searching...
No Matches
BCP_problem_core.hpp
Go to the documentation of this file.
1// Copyright (C) 2000, International Business Machines
2// Corporation and others. All Rights Reserved.
3#ifndef _BCP_PROBLEM_CORE_H
4#define _BCP_PROBLEM_CORE_H
5
6// This file is fully docified.
7
8#include "BCP_vector.hpp"
9#include "BCP_matrix.hpp"
10#include "BCP_buffer.hpp"
11#include "BCP_enum.hpp"
12#include "BCP_obj_change.hpp"
13
14//#############################################################################
15
16class BCP_var_core;
17class BCP_cut_core;
18class BCP_indexed_pricing_list;
19
20class BCP_buffer;
21
23
24//#############################################################################
25
30
31class BCP_problem_core{
32private:
37 inline void clear();
39 BCP_problem_core(const BCP_problem_core&);
41 BCP_problem_core& operator=(const BCP_problem_core&);
43public:
56public:
66 BCP_lp_relax*& m) : vars(), cuts(), matrix(m) {
67 vars.swap(v);
68 cuts.swap(c);
69 m = 0;
70 }
71
74
78 inline size_t varnum() const { return vars.size(); }
80 inline size_t cutnum() const { return cuts.size(); }
82
86 void pack(BCP_buffer& buf) const; // *INLINE ?*
88 void unpack(BCP_buffer& buf); // *INLINE ?*
90};
91
92//#############################################################################
93
94// The following class holds the change in the core. It may be WrtParent,
95// WrtCore or Explicit. In the latter case indices is empty.
96
115
116class BCP_problem_core_change{
117private:
121 inline void clear();
124 BCP_problem_core_change(const BCP_problem_core_change&); // disabled
126
127public:
159
160public:
171
176 int bcutnum, BCP_cut_set& cuts);
177
185 BCP_problem_core_change& ocore,
186 BCP_problem_core_change& ncore);
187
190
191 /* Default assignment operator is OK. */
192
194
198 inline BCP_storage_t storage() const { return _storage; }
201 inline size_t varnum() const { return var_ch.size(); }
204 inline size_t cutnum() const { return cut_ch.size(); }
206
211 BCP_problem_core_change& operator=(const BCP_problem_core& core);
212
220 void ensure_explicit(const BCP_problem_core_change& expl_core);
221
228 void make_wrtcore_if_shorter(const BCP_problem_core_change& orig_core);
229
232 void swap(BCP_problem_core_change& other);
233
250 void update(const BCP_problem_core_change& expl_core,
251 const BCP_problem_core_change& core_change);
253
257 int pack_size() const;
259 void pack(BCP_buffer& buf) const;
261 void unpack(BCP_buffer& buf);
263};
264
265#endif
BCP_storage_t
This enumerative constant describes how to store certain data for a search tree node.
Definition BCP_enum.hpp:84
@ BCP_Storage_WrtCore
The data stored is with respect to the original description of the base problem (as was given by the ...
Definition BCP_enum.hpp:94
This class describes the message buffer used for all processes of BCP.
Core cuts are the cuts that always stay in the LP formulation.
Definition BCP_cut.hpp:195
This class is just a collection of pointers to cuts with a number of methods to manipulate these cuts...
Definition BCP_cut.hpp:279
This class is the internal representation of a branching object.
An object of type BCP_lp_relax holds the description of an lp relaxation.
BCP_problem_core_change(BCP_storage_t storage, BCP_problem_core_change &ocore, BCP_problem_core_change &ncore)
Create a core change describing the changes from old_bc</node> to new_bc.
void swap(BCP_problem_core_change &other)
Swap the contents of the current core change with that of other.
void update(const BCP_problem_core_change &expl_core, const BCP_problem_core_change &core_change)
Update the current change according to core_change.
void ensure_explicit(const BCP_problem_core_change &expl_core)
If the current storage is not already explicit then replace it with an explicit description of the co...
void pack(BCP_buffer &buf) const
Pack the core change into the buffer.
BCP_vec< int > var_pos
The positions of the core variables (in the vars member of \URL[BCP_problem_core]{BCP_problem_core....
BCP_storage_t storage() const
Return the storage type.
BCP_vec< BCP_obj_change > var_ch
The new lb/ub/status triplet for each variable for which any of those three have changed.
BCP_problem_core_change(BCP_storage_t store=BCP_Storage_WrtCore)
This constructor creates a core change with the given storage.
size_t cutnum() const
Return the number of changed cuts (the length of the array cut_ch).
BCP_vec< int > cut_pos
The positions of the core cuts (in the cuts member of \URL[BCP_problem_core]{BCP_problem_core....
BCP_storage_t _storage
Describes how the change is stored.
BCP_problem_core_change & operator=(const BCP_problem_core &core)
Set the core change description to be an explicit description (in the form of a change) of the given ...
BCP_vec< BCP_obj_change > cut_ch
The new lb/ub/status triplet for each cut for which any of those three have changed.
int pack_size() const
Return the buffer size needed to pack the data in the core change.
void make_wrtcore_if_shorter(const BCP_problem_core_change &orig_core)
Replace the current explicitly stored core change with one stored with respect to the explicitly stor...
void unpack(BCP_buffer &buf)
Unpack the core change data from the buffer.
size_t varnum() const
Return the number of changed variables (the length of the array var_ch).
~BCP_problem_core_change()
The destructor deletes all data members.
BCP_problem_core_change(int bvarnum, BCP_var_set &vars, int bcutnum, BCP_cut_set &cuts)
This constructor creates an Explicit core change description.
This class describes the core of the MIP problem, the variables/cuts in it as well as the matrix corr...
size_t cutnum() const
Return the number of cuts in the core.
BCP_problem_core(BCP_vec< BCP_var_core * > &v, BCP_vec< BCP_cut_core * > &c, BCP_lp_relax *&m)
This constructor "takes over" the arguments.
void unpack(BCP_buffer &buf)
Unpack the contents of the core description from the buffer.
void pack(BCP_buffer &buf) const
Pack the contents of the core description into the buffer.
BCP_vec< BCP_cut_core * > cuts
A vector of pointers to the cuts in the core of the problem.
BCP_problem_core()
The default constructor creates an empty core description: no variables/cuts and an empty matrix.
BCP_vec< BCP_var_core * > vars
A vector of pointers to the variables in the core of the problem.
size_t varnum() const
Return the number of variables in the core.
~BCP_problem_core()
The desctructor deletes all data members.
BCP_lp_relax * matrix
A pointer to the constraint matrix corresponding to the core variables and cuts.
Core variables are the variables that always stay in the LP formulation.
Definition BCP_var.hpp:230
This class is just a collection of pointers to variables with a number of methods to manipulate these...
Definition BCP_var.hpp:316
The class BCP_vec serves the same purpose as the vector class in the standard template library.