00001 /*===========================================================================* 00002 * This file is part of the Abstract Library for Parallel Search (ALPS). * 00003 * * 00004 * ALPS is distributed under the Common Public License as part of the * 00005 * COIN-OR repository (http://www.coin-or.org). * 00006 * * 00007 * Authors: * 00008 * * 00009 * Yan Xu, Lehigh University * 00010 * Ted Ralphs, Lehigh University * 00011 * * 00012 * Conceptual Design: * 00013 * * 00014 * Yan Xu, Lehigh University * 00015 * Ted Ralphs, Lehigh University * 00016 * Laszlo Ladanyi, IBM T.J. Watson Research Center * 00017 * Matthew Saltzman, Clemson University * 00018 * * 00019 * * 00020 * Copyright (C) 2001-2007, Lehigh University, Yan Xu, and Ted Ralphs. * 00021 *===========================================================================*/ 00022 00023 #ifndef AlpsModel_h 00024 #define AlpsModel_h 00025 00026 #include <string> 00027 00028 #include "CoinError.hpp" 00029 00030 #include "AlpsKnowledge.h" 00031 #include "AlpsTreeNode.h" 00032 #include "AlpsParams.h" 00033 00034 class AlpsKnowledgeBroker; 00035 00036 class AlpsModel : public AlpsKnowledge { 00037 00038 private: 00039 00040 AlpsModel(const AlpsModel&); 00041 AlpsModel& operator=(const AlpsModel&); 00042 00043 protected: 00044 00046 AlpsKnowledgeBroker *broker_; 00047 00049 std::string dataFile_; 00050 00052 AlpsParams * AlpsPar_; 00053 00054 public: 00055 00057 AlpsModel() : 00058 broker_(NULL), 00059 AlpsPar_(new AlpsParams) { setType(AlpsKnowledgeTypeModel); } 00060 00062 virtual ~AlpsModel() { delete AlpsPar_; } 00063 00065 AlpsKnowledgeBroker *getKnowledgeBroker() { return broker_; } 00066 00068 void setKnowledgeBroker(AlpsKnowledgeBroker *b) { broker_ = b; } 00069 00071 inline std::string getDataFile() const { return dataFile_; } 00072 00074 inline void setDataFile(std::string infile) { dataFile_ = infile; } 00075 00077 AlpsParams * AlpsPar() { return AlpsPar_; } 00078 00080 virtual void readInstance(const char* dateFile) { 00081 throw CoinError("readInstance() is not defined.", "readData", 00082 "AlpsModel"); 00083 } 00084 00086 virtual void readParameters(const int argnum, const char * const * arglist); 00087 00089 void writeParameters(std::ostream& outstream) const; 00090 00093 virtual bool setupSelf() { return true; } 00094 00096 virtual void preprocess() {} 00097 00099 virtual void postprocess() {} 00100 00102 virtual AlpsTreeNode * createRoot() { 00103 throw CoinError("createRoot is not defined.", "createRoot", 00104 "AlpsModel"); 00105 } 00106 00108 virtual void modelLog() {} 00109 00111 virtual void nodeLog(AlpsTreeNode *node, bool force); 00112 00113 //------------------------------------------------------ 00114 // For parallel. 00115 //------------------------------------------------------ 00116 00118 AlpsReturnStatus encodeAlps(AlpsEncoded *encoded) const; 00119 00121 AlpsReturnStatus decodeAlps(AlpsEncoded &encoded); 00122 00124 virtual void decodeToSelf(AlpsEncoded& encoded) {} 00125 00127 virtual void registerKnowledge() { /* Default does nothing */ } 00128 00130 virtual void sendGeneratedKnowledge() { /* Default does nothing */ } 00131 00133 virtual void receiveGeneratedKnowledge() { /* Default does nothing */ } 00134 00137 virtual AlpsEncoded* packSharedKnowlege() { 00138 /* Default does nothing */ 00139 AlpsEncoded* encoded = NULL; 00140 return encoded; 00141 } 00142 00144 virtual void unpackSharedKnowledge(AlpsEncoded&) 00145 { /* Default does nothing */ } 00146 }; 00147 #endif