// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. #ifndef _BCP_MESSAGE_TAG_H #define _BCP_MESSAGE_TAG_H // This file is fully docified. /** This enumerative constant describes the message tags different processes of BCP understand. */ enum BCP_message_tag{ /**@name Messages between the Configurator and the Tree Manager. The Configurator is a stand-alone program that is able to communicate with the Tree Manager and instruct it to make changes in the machine configuration. At the moment there is a configurator for PVM only. */ /*@{*/ /** Configurator to TM: machine configuration has changed. TM will unpack the changes from the buffer and then apply them. See the possible changes in the documentation of the configurator in the Config directory. */ BCP_CONFIG_CHANGE = 1, // config -> TM /** TM to configurator: error occured while TM tried to implement the changes communicated by the configurator. */ BCP_CONFIG_ERROR = 2, // TM ->config /** TM to configurator: TM successfully finished implementing the changes communicated by the configurator. */ BCP_CONFIG_OK = 3, // TM ->config /** Configurator to all processes: are you the Tree Manager? */ BCP_ARE_YOU_TREEMANAGER = 4, // config -> all /** TM to configurator: I am the Tree Manager. */ BCP_I_AM_TREEMANAGER = 5, // TM ->config /*@}*/ /**@name Messages from any process to any other process These are the wildcards. */ /*@{*/ /** Used to indicate that there is no message in the buffer of a process. See \URL[BCP_buffer]{BCP_buffer.html}.) */ BCP_Msg_NoMessage, /** Used when receiving, message with any message tag will be received. */ BCP_Msg_AnyMessage, /** Used by the user to send a message to the user portion of the other process. Note that the other process will NOT be interrupted to process the message. Message processing will happen when that process decides to check for messages on its own. */ BCP_Msg_User, /*@}*/ /**@name Messages from the TM to TMS and back */ /*@{*/ BCP_Msg_NodeList, BCP_Msg_NodeListRequest, BCP_Msg_NodeListDelete, BCP_Msg_VarList, BCP_Msg_VarListRequest, BCP_Msg_VarListDelete, BCP_Msg_CutList, BCP_Msg_CutListRequest, BCP_Msg_CutListDelete, BCP_Msg_NodeListReply, BCP_Msg_NodeListRequestReply, BCP_Msg_NodeListDeleteReply, BCP_Msg_VarListReply, BCP_Msg_VarListRequestReply, BCP_Msg_VarListDeleteReply, BCP_Msg_CutListReply, BCP_Msg_CutListRequestReply, BCP_Msg_CutListDeleteReply, /*@}*/ /**@name Messages between any process and the Tree Manager */ /*@{*/ /** Any process to TM: a process has died. */ BCP_Msg_SomethingDied, /** Any process to TM or TM to any process: a new upper bound found. */ BCP_Msg_UpperBound, /*@}*/ /**@name Messages from the Tree Manager to any slave process */ /*@{*/ /** BCP has finished. The slave process receiving this message will send back statistics to the TM and then terminate. TM will wait for all other processes to terminate. */ BCP_Msg_FinishedBCP, // TM -> slaves /** The TM sends the process type to the process (LP, Cut Generator, etc.) */ BCP_Msg_ProcessType, // TM -> slaves /** The TM sends the appropriate parameters to the slave process. */ BCP_Msg_ProcessParameters, // TM -> slaves /** The TM sends the description of the core formulation to the slave process. */ BCP_Msg_CoreDescription, // TM -> slaves /** The TM sends the initial user packed information to the slave process. */ BCP_Msg_InitialUserInfo, // TM -> slaves /*@}*/ /**@name Messages from the Tree Manager to an LP process */ /*@{*/ /** The warmstart information at the end of the root */ BCP_Msg_WarmstartRoot, // TM -> LP /** TM sends the description of a new search tree node. */ BCP_Msg_ActiveNodeData, // TM -> LP /** TM warns an LP process that the second phase will start. (An LP process may use different branching, cut generation and pricing strategies in different phases.) */ BCP_Msg_NextPhaseStarts, // TM -> LP /** TM sends diving information. */ BCP_Msg_DivingInfo, // TM -> LP /** Send index set for cuts to be generated in the future. */ BCP_Msg_CutIndexSet, // TM -> LP /** Send index set for variables to be generated in the future. */ BCP_Msg_VarIndexSet, // TM -> LP /** Send a list of process ids the LP can use to do distributed strong branching */ BCP_Msg_ProcessList, // TM -> LP /*@}*/ /**@name Messages from an LP process to the Tree Manager */ /*@{*/ /**@name Sending a search tree node description */ /*@{*/ /** The node is discarded (fathomed). */ BCP_Msg_NodeDescription_Discarded, // LP -> TM /** The lower bound corresponding to the node is above the upper bound. The node will be saved for the next phase. */ BCP_Msg_NodeDescription_OverUB, // LP -> TM /** The node is infeasible. The node will be saved for the next phase. */ BCP_Msg_NodeDescription_Infeas, // LP -> TM /** The lower bound corresponding to the node is above the upper bound. The node is pruned (will not be saved for the next phase). */ BCP_Msg_NodeDescription_OverUB_Pruned, // LP -> TM /** The node is infeasible. The node is pruned (will not be saved for the next phase, compare above). */ BCP_Msg_NodeDescription_Infeas_Pruned, // LP -> TM /** In addition to the node description, branching information is sent as well so that the children of this node can be recreated. */ BCP_Msg_NodeDescriptionWithBranchingInfo, // LP -> TM /*@}*/ /** The message contains a new MIP feasible solution. */ BCP_Msg_FeasibleSolution, // LP -> TM /** The message contains the statistics the LP process collected. */ BCP_Msg_LpStatistics, // LP -> TM /** Request an index set for cuts to be generated. Empty message body. */ BCP_Msg_RequestCutIndexSet, // LP -> TM /** Request an index set for variables to be genarated. Empty message body. */ BCP_Msg_RequestVarIndexSet, // LP -> TM /** Request a list of process ids the LP can use to do distributed strong branching */ BCP_Msg_RequestProcessList, // LP -> TM /** An LP process (that is used as a strong branching node) indicates that it's finished. The message also contains data for pseudocost computation. */ BCP_Msg_SBnodeFinished, // LP -> TM /*@}*/ /**@name Messages from an LP process to a Cut Generator or Cut Pool process. */ /*@{*/ /**@name Message tags indicating how a solution to the LP relaxation is packed in the buffer. */ /*@{*/ /** Only primal variables currently at nonzero level. */ BCP_Msg_ForCG_PrimalNonzeros, // LP -> CG / CP /** Only primal variables currently at fractional level. */ BCP_Msg_ForCG_PrimalFractions, // LP -> CG / CP /** All primal variables. */ BCP_Msg_ForCG_PrimalFull, // LP -> CG / CP /** The user packed everything. */ BCP_Msg_ForCG_User, // LP -> CG / CP /*@}*/ /** The message contains cuts for the Cut Pool process. */ BCP_Msg_CutsToCutPool, // LP -> CP /*@}*/ /**@name Messages from an LP process to a Variable Generator or Variable Pool process */ /*@{*/ /**@name Message tags indicating how a solution to the LP relaxation is packed in the buffer. */ /*@{*/ /** Pack only dual variables currently at nonzero level. */ BCP_Msg_ForVG_DualNonzeros, // LP -> VG / VP /** Pack all dual variables. */ BCP_Msg_ForVG_DualFull, // LP -> VG / VP /** The user packed everything. */ BCP_Msg_ForVG_User, // LP -> VG / VP /*@}*/ /** The message contains variables for the Variable Pool process. */ BCP_Msg_VarsToVarPool, // LP -> VP /*@}*/ /**@name Messages from a Cut Genarator or Cut Pool process to the corresponding LP process */ /*@{*/ /** The message contains the description of a cut. */ BCP_Msg_CutDescription, // CG / CP -> LP /** No more (violated) cuts could be found. (Message body is empty.) */ BCP_Msg_NoMoreCuts, // CG / CP -> LP /*@}*/ /**@name Messages from a Variable Genarator or Variable Pool process to the corresponding LP process */ /*@{*/ /** The message contains the description of a variable. */ BCP_Msg_VarDescription, // VG / VP -> LP /** No more (improving) variables could be found. (Message body is empty.) */ BCP_Msg_NoMoreVars // VG / VP -> LP /*@}*/ // BCP_Msg_UserPacked, // BCP_Msg_NoMoreMessage }; #endif