00001
00002
00003 #ifndef _BCP_TM_FUNCTIONS_H
00004 #define _BCP_TM_FUNCTIONS_H
00005
00006 #include <utility>
00007
00008 #include "BCP_string.hpp"
00009 #include "BCP_vector.hpp"
00010 #include "BCP_message_tag.hpp"
00011 #include "BCP_parameters.hpp"
00012 #include "BCP_enum_tm.hpp"
00013
00014 #define BCP__DUMP_PROCINFO 0
00015
00016 class BCP_proc_id;
00017 class BCP_buffer;
00018 class BCP_tm_prob;
00019 class BCP_lp_prob;
00020 class BCP_cg_prob;
00021 class BCP_vg_prob;
00022 class BCP_tm_node;
00023 class BCP_var;
00024 class BCP_cut;
00025 class BCP_problem_core;
00026 class BCP_problem_core_change;
00027 class BCP_tm_node;
00028 class BCP_var_set_change;
00029 class BCP_cut_set_change;
00030 class USER_packing;
00031
00032
00033
00034 void
00035 BCP_tm_parse_command_line(BCP_tm_prob& p,
00036 const int argnum, const char* const * arglist);
00037
00038
00039 bool BCP_tm_do_one_phase(BCP_tm_prob& p);
00040 BCP_problem_core* BCP_tm_create_core(BCP_tm_prob& p);
00041 BCP_tm_node* BCP_tm_create_root(BCP_tm_prob& p);
00042 void BCP_tm_tasks_before_new_phase(BCP_tm_prob& p);
00043
00044
00045
00046 void BCP_tm_trim_tree_wrapper(BCP_tm_prob& p, const bool between_phases);
00047 void BCP_tm_remove_explored(BCP_tm_prob& p, BCP_tm_node* node);
00048
00049
00050
00051 void BCP_tm_idle_processes(BCP_tm_prob& p);
00052 void BCP_tm_stop_processes(BCP_tm_prob& p);
00053 void BCP_tm_start_processes(BCP_tm_prob& p);
00054 bool BCP_tm_test_machine(BCP_tm_prob& p);
00055 void BCP_tm_modify_pool_counters(BCP_tm_prob& p, BCP_tm_node* node);
00056 void BCP_tm_remove_lp(BCP_tm_prob& p, const int index);
00057 void BCP_tm_remove_cg(BCP_tm_prob& p, const int index);
00058 void BCP_tm_remove_vg(BCP_tm_prob& p, const int index);
00059 void BCP_tm_notify_about_new_phase(BCP_tm_prob& p);
00060 void BCP_tm_notify_processes(BCP_tm_prob& p);
00061 void BCP_tm_distribute_core(BCP_tm_prob& p);
00062 void BCP_tm_distribute_user_info(BCP_tm_prob& p);
00063 void BCP_tm_unpack_priced_root(BCP_tm_prob& p, BCP_buffer& buf);
00064 void BCP_tm_free_procs_of_node(BCP_tm_prob& p, BCP_tm_node* node);
00065
00066
00067
00068 void BCP_tm_send_node(BCP_tm_prob& p, const BCP_tm_node* node,
00069 const BCP_message_tag msgtag);
00070
00071
00072
00073 BCP_vec<int>* BCP_tm_unpack_noncore_vars(USER_packing& user,
00074 BCP_buffer& buf,
00075 BCP_var_set_change& var_ch,
00076 BCP_vec<BCP_var*>& varlist);
00077 BCP_vec<int>* BCP_tm_unpack_noncore_cuts(USER_packing& user,
00078 BCP_buffer& buf,
00079 BCP_cut_set_change& cut_ch,
00080 BCP_vec<BCP_cut*>& cutlist);
00081
00082 void BCP_tm_unpack_node_with_branching_info(BCP_tm_prob& p, BCP_buffer& buf);
00083 BCP_tm_node* BCP_tm_unpack_node_no_branching_info(BCP_tm_prob& p,
00084 BCP_buffer& buf);
00085
00086
00087 BCP_vec< std::pair<BCP_proc_id*, int> >::iterator
00088 BCP_tm_identify_process(BCP_vec< std::pair<BCP_proc_id*, int> >& proclist,
00089 BCP_proc_id* proc);
00090 bool BCP_tm_assign_processes(BCP_tm_prob& p, BCP_tm_node* node);
00091 BCP_node_start_result BCP_tm_start_new_nodes(BCP_tm_prob& p);
00092 void BCP_tm_list_candidates(BCP_tm_prob& p);
00093 void BCP_check_parameters(BCP_tm_prob& p);
00094 void BCP_sanity_checks(BCP_tm_prob& p);
00095
00096
00097
00098 void BCP_tm_save_root_cuts(BCP_tm_prob* tm);
00099 void BCP_tm_wrapup(BCP_tm_prob* tm, BCP_lp_prob* lp,
00100 BCP_cg_prob* cg, BCP_vg_prob* vg, bool final_stat);
00101
00102 #ifdef BCP__DUMP_PROCINFO
00103 #if (BCP__DUMP_PROCINFO == 1)
00104 void dump_procinfo(BCP_tm_prob& p, const char* str);
00105 #endif
00106 #endif
00107
00108 #endif