20 while (proci != lastproci) {
21 if (proci->first == proc)
38 bool so_far_so_good =
true;
50 #if ! defined(BCP_ONLY_LP_PROCESS_HANDLING_WORKS)
51 if (so_far_so_good && p.slaves.cg) {
52 cg = p.slaves.cg->get_free_proc();
57 so_far_so_good =
false;
61 if (so_far_so_good && p.slaves.vg) {
62 vg = p.slaves.vg->get_free_proc();
67 so_far_so_good =
false;
71 if (so_far_so_good && p.slaves.cp) {
73 cp = p.slaves.cp->get_free_proc();
95 if (so_far_so_good && p.slaves.vp) {
97 vp = p.slaves.vp->get_free_proc();
120 if (! so_far_so_good)
170 bool process_this =
true;
173 process_this =
false;
174 if (next_node->getTrueLB() >
176 process_this =
false;
177 if (next_node->getTrueLB() >
179 process_this =
false;
191 printf(
"TM: Pruning NODE %i LEVEL %i instead of sending it.\n",
192 next_node->
index(), next_node->getDepth());
204 TM: Moving NODE %i LEVEL %i into the next phase list \n\
205 instead of sending it.\n",
206 next_node->
index(), next_node->getDepth());
229 if (node_to_send->
send()) {
233 #ifdef BCP__DUMP_PROCINFO
234 #if (BCP__DUMP_PROCINFO == 1)
235 dump_procinfo(p,
"start_one_node()");
242 #ifdef BCP__DUMP_PROCINFO
243 #if (BCP__DUMP_PROCINFO == 1)
244 void dump_procinfo(
BCP_tm_prob& p,
const char* str)
246 printf(
"TM: ***** dump_procinfo from %s *********\n", str);
247 printf(
"TM: ********** Active nodes *********\n");
248 for (
int i = 0; i < p.slaves.lp->size(); ++i) {
250 printf(
"TM: %i, %i, %i\n",
253 printf(
"TM: %i, %i, %i\n",
257 printf(
"TM: ********** All nodes *********\n");
276 TM: couldn't start new node but there's a free LP ?!\n");
294 const int n = candidates.size();
295 const std::vector<CoinTreeNode*>& nodes = candidates.getNodes();
296 for (
int i = 0; i <
n; ++i) {
297 printf(
"%5i", dynamic_cast<BCP_tm_node*>(nodes[i])->index());
318 if (tmpar.
entry(static_cast<BCP_tm_par::chr_params>(i)) == 2) {
319 tmpar.
set_entry(static_cast<BCP_tm_par::chr_params>(i),
true);
321 tmpar.
set_entry(static_cast<BCP_tm_par::chr_params>(i),
false);
325 if (lppar.
entry(static_cast<BCP_lp_par::chr_params>(i)) == 2) {
326 lppar.
set_entry(static_cast<BCP_lp_par::chr_params>(i),
true);
328 lppar.
set_entry(static_cast<BCP_lp_par::chr_params>(i),
false);
332 if (cgpar.
entry(static_cast<BCP_cg_par::chr_params>(i)) == 2) {
333 cgpar.
set_entry(static_cast<BCP_cg_par::chr_params>(i),
true);
335 cgpar.
set_entry(static_cast<BCP_cg_par::chr_params>(i),
false);
368 fm = fm == -1 ? 192 * (1<<20) : fm;
Just a marker for the first CgVerb.
BCP_parameter_set< BCP_vg_par > vg
BCP_parameter_set< BCP_cg_par > cg
Just a marker for the first LpVerb.
std::map< int, BCP_tm_node * > active_nodes
A map from the process ids to the nodes (what they work on)
void clear()
Delete every entry.
Print out a message when the default version of an overridable method is executed.
Print out a message when the default version of an overridable method is executed.
Do not generate columns, but send back the node to the Tree Manager for processing in the next phase...
double granularity() const
Print information about nodes that are pruned by bound in the tree manager.
bool has_free_node_id() const
Decide if there is an id that can be returned for processin a node.
Print out a message when the default version of an overridable method is executed.
BCP_tm_node_status status
void BCP_tm_list_candidates(BCP_tm_prob &p)
char entry(const chr_params key) const
TM sends the description of a new search tree node.
iterator begin()
Return an iterator to the beginning of the object.
CoinSearchTreeManager candidate_list
BCP_vec< BCP_tm_node * > next_phase_nodes
a vector of nodes to be processed in the next phase
The maximum size of the memory heap the TS can use.
Indicates whether message passing is serial (all processes are on the same processor) or not...
Just a marker for the last TmVerb.
void push_back(const_reference x)
Append x to the end of the vector.
void BCP_tm_remove_vg(BCP_tm_prob &p, const int index)
static BCP_node_start_result BCP_tm_start_one_node(BCP_tm_prob &p)
void BCP_tm_remove_lp(BCP_tm_prob &p, const int index)
bool BCP_tm_assign_processes(BCP_tm_prob &p, BCP_tm_node *node)
BCP_vec< BCP_tm_node * > nodes_to_free
BCP_node_start_result BCP_tm_start_new_nodes(BCP_tm_prob &p)
void fint fint fint real fint real real real real real real real real real fint real fint * lp
void set_entry(const chr_params key, const char val)
int request_node_id()
Request an id for processing nodes.
BCP_node_start_result
This enumerative constant describes ...
BCP_parameter_set< BCP_tm_par > par
Print out a message when the default version of an overridable method is executed.
Verbosity flags for the tree manager.
void BCP_sanity_checks(BCP_tm_prob &p)
void BCP_print_memusage(BCP_tm_prob &p)
Just a marker for the last LpVerb.
Currently there isn't any error handling in BCP.
BCP_message_environment * msg_env
A class that holds the methods about how to pack things.
The maximum size of the memory heap the TM can use.
size_t size() const
Return the current number of entries.
iterator end()
Return an iterator to the end of the object.
Invoke "display_feasible_solution" user routine for the best feasible solution after the entire tree ...
The class BCP_vec serves the same purpose as the vector class in the standard template library...
void BCP_tm_remove_explored(BCP_tm_prob &p, BCP_tm_node *node)
BCP_scheduler lp_scheduler
members to measure how long it took to process the root node.
BCP_parameter_set< BCP_lp_par > lp
Print statistics: running time, tree size, best solution value.
Just a marker for the last CgVerb.
BCP_slave_params slave_pars
A flag that instructs BCP to be (almost) absolutely silent.
virtual bool alive(const int pid)=0
Test if the process given by the argument is alive or not.
BCP_column_generation current_phase_colgen
static void BCP_tm_free_nodes(BCP_tm_prob &p)
void BCP_tm_modify_pool_counters(BCP_tm_prob &p, BCP_tm_node *node)
BCP_vec< std::pair< int, int > >::iterator BCP_tm_identify_process(BCP_vec< std::pair< int, int > > &proclist, int proc)
bool send()
return true or false depending on whether the node was really sent out or it's still waiting for some...
char param(BCP_tm_par::chr_params key) const
BCP_parameter_set< BCP_ts_par > ts
static long BCP_free_mem()
void BCP_tm_remove_cg(BCP_tm_prob &p, const int index)
void BCP_check_parameters(BCP_tm_prob &p)