BIE |
/home/weinberg/src/BIE/include/ParallelChains.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef ParallelChains_h 00004 #define ParallelChains_h 00005 00006 #include "Serializable.h" 00007 00008 00009 #include <LikelihoodComputation.h> 00010 #include <MHWidth.h> 00011 #include <MHWidthOne.h> 00012 #include <Simulation.h> 00013 #include <Chain.h> 00014 00015 namespace BIE { 00016 00017 class MixturePrior; 00018 00019 //+ CLICLASS ParallelChains SUPER Simulation 00105 class ParallelChains : public Simulation 00106 { 00107 00108 public: 00109 00112 00114 enum Algorithm { 00115 standard, 00116 hierarchical 00117 }; 00118 00120 enum Control { 00121 parallel, 00122 serial 00123 }; 00124 00126 enum Initial { 00127 user_supplied, 00128 prior_sampled 00129 }; 00130 00132 static Algorithm algo; 00133 00135 static Control cntrl; 00136 00138 static Initial initial; 00139 00141 static double swapprob; 00142 00144 static double apow; 00145 00147 static double tpow; 00148 00150 static int minmc; 00151 00153 static int state_iter; 00154 00156 00158 00159 //+ CLICONSTR int int int double MHWidth* BaseDataTree* Model* Integration* Converge* MixturePrior* LikelihoodComputation* MCAlgorithm* 00160 ParallelChains(int max, int ndim, int minmc_p, double maxT, 00161 MHWidth* width, 00162 BaseDataTree* d, 00163 Model* m, 00164 Integration* i, 00165 Converge* c, 00166 MixturePrior* mp, 00167 LikelihoodComputation* l, 00168 MCAlgorithm* mca); 00169 00170 //+ CLICONSTR int int int double MHWidth* BaseDataTree* Model* Integration* Converge* MixturePrior* LikelihoodComputation* MCAlgorithm* Simulation* 00171 ParallelChains(int max, int ndim, int minmc_p, double maxT, 00172 MHWidth* width, 00173 BaseDataTree* d, 00174 Model* m, 00175 Integration* i, 00176 Converge* c, 00177 MixturePrior* mp, 00178 LikelihoodComputation* l, 00179 MCAlgorithm* mca, 00180 Simulation *last); 00182 00184 virtual ~ParallelChains(); 00185 00187 00188 void NewState(int Mcur, vector<double>& w, vector< vector<double> >& p); 00189 void NewState(Chain& ch); 00190 void NewState(State& s); 00192 00194 virtual void Initialize(); 00195 00197 virtual void Reinitialize(MHWidth* width, MixturePrior *mp); 00198 00200 00201 //+ CLIMETHOD void SetAlgorithm int 00206 void SetAlgorithm(int); 00207 00208 //+ CLIMETHOD void SetControl int 00213 void SetControl(int); 00214 00215 //+ CLIMETHOD void SetInitial int 00220 void SetInitial(int); 00221 00222 //+ CLIMETHOD void SetTempExp double double 00226 void SetTempExp(double a, double t) { 00227 apow = a; 00228 tpow = t; 00229 } 00230 00232 00234 00235 //+ CLIMETHOD void SetNewWidths clivectord* 00237 void SetNewWidths(vector<double> *wid); 00238 //+ CLIMETHOD void SetNewWidths string 00240 void SetNewWidths(string wid); 00242 00245 00247 double GetValue(); 00248 00250 double GetPrior(); 00251 00253 double GetLikelihood(); 00254 00256 State GetState(); 00257 00259 virtual void ReportState(); 00260 00262 void PrintState() { chains[0].PrintState(); } 00263 00264 00267 virtual void PrintStepDiagnostic(); 00268 00271 virtual void PrintStateDiagnostic(); 00272 00274 vector<double> GetMixstat(void); 00275 00277 vector<double> GetSweepstat(void); 00278 00279 //+ CLIMETHOD void NewNumber int 00281 void NewNumber(int); 00282 00283 //+ CLIMETHOD void NewSwapProb double 00285 void NewSwapProb(double p) { swapprob = p; } 00286 00287 //+ CLIMETHOD void EnableLogging 00289 void EnableLogging() { caching = true; CreateChains(); } 00290 00292 void AdditionalInfo(); 00293 00295 00296 protected: 00297 00299 virtual void MCMethod(); 00300 00302 bool caching; 00303 00305 unsigned ncount; 00306 00308 00309 00310 double MaxT; 00312 00314 00315 00316 vector<unsigned char> update_flag; 00317 00319 vector<unsigned char> update_flag1; 00320 00322 vector<unsigned long> stat0; 00323 00325 vector<unsigned long> stat1; 00326 00328 vector<unsigned long> nstat0; 00329 00331 vector<unsigned long> nstat1; 00332 00334 vector<unsigned long> mstat0; 00335 00337 vector<unsigned long> mstat1; 00338 00340 int Ntot; 00342 00344 void CreateChains(); 00345 00347 00348 00350 void SampleNewState(int k); 00351 00353 void SampleNewStateParallel(int k); 00354 00356 void SampleNewStateSerial(int k); 00357 00359 vector<unsigned short> fail; 00360 00362 void NewStateSerialInit(); 00363 00365 void NewStateSerialStatus(); 00366 00368 00370 00371 00372 int swapnum; 00373 00375 int swaptry; 00377 00379 Uniform * unit; 00380 00382 00383 00384 void ResetChainStats(); 00386 void getChainCounts(); 00388 00390 bool chains_initialized; 00391 00393 vector<double> user_widths; 00394 00395 private: 00396 // 00397 // Save the RNG 00398 // 00399 template<class Archive> 00400 void post_save(Archive &ar, const unsigned int file_version) const { 00401 vector<Serializable*> s; 00402 s.push_back(BIEgen); 00403 ar << BOOST_SERIALIZATION_NVP(s); 00404 } 00405 // 00406 // Reassign pointer to fiducial chain and restore the RNG 00407 // 00408 template<class Archive> 00409 void post_load(Archive &ar, const unsigned int file_version) { 00410 vector<Serializable *>s; 00411 ar >> BOOST_SERIALIZATION_NVP(s); 00412 BIEgen = dynamic_cast<BIEACG*>(s[0]); 00413 chfid = &chains[0]; 00414 } 00415 00416 // AUTO GENERATED BY ../persistence/autopersist.py 00417 protected: 00418 ParallelChains() {} 00419 private: 00420 friend class boost::serialization::access; 00421 BOOST_SERIALIZATION_SPLIT_MEMBER(); 00422 00423 template<class Archive> 00424 void save(Archive & ar, const unsigned int version) const { 00425 this->pre_save(ar, version); 00426 try { 00427 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(Simulation); 00428 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00429 } 00430 try { 00431 ar << BOOST_SERIALIZATION_NVP(algo); 00432 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00433 } 00434 try { 00435 ar << BOOST_SERIALIZATION_NVP(cntrl); 00436 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00437 } 00438 try { 00439 ar << BOOST_SERIALIZATION_NVP(initial); 00440 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00441 } 00442 try { 00443 ar << BOOST_SERIALIZATION_NVP(swapprob); 00444 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00445 } 00446 try { 00447 ar << BOOST_SERIALIZATION_NVP(apow); 00448 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00449 } 00450 try { 00451 ar << BOOST_SERIALIZATION_NVP(tpow); 00452 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00453 } 00454 try { 00455 ar << BOOST_SERIALIZATION_NVP(minmc); 00456 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00457 } 00458 try { 00459 ar << BOOST_SERIALIZATION_NVP(state_iter); 00460 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00461 } 00462 try { 00463 ar << BOOST_SERIALIZATION_NVP(caching); 00464 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00465 } 00466 try { 00467 ar << BOOST_SERIALIZATION_NVP(ncount); 00468 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00469 } 00470 try { 00471 ar << BOOST_SERIALIZATION_NVP(MaxT); 00472 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00473 } 00474 try { 00475 ar << BOOST_SERIALIZATION_NVP(update_flag); 00476 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00477 } 00478 try { 00479 ar << BOOST_SERIALIZATION_NVP(update_flag1); 00480 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00481 } 00482 try { 00483 ar << BOOST_SERIALIZATION_NVP(stat0); 00484 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00485 } 00486 try { 00487 ar << BOOST_SERIALIZATION_NVP(stat1); 00488 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00489 } 00490 try { 00491 ar << BOOST_SERIALIZATION_NVP(nstat0); 00492 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00493 } 00494 try { 00495 ar << BOOST_SERIALIZATION_NVP(nstat1); 00496 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00497 } 00498 try { 00499 ar << BOOST_SERIALIZATION_NVP(mstat0); 00500 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00501 } 00502 try { 00503 ar << BOOST_SERIALIZATION_NVP(mstat1); 00504 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00505 } 00506 try { 00507 ar << BOOST_SERIALIZATION_NVP(Ntot); 00508 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00509 } 00510 try { 00511 ar << BOOST_SERIALIZATION_NVP(swapnum); 00512 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00513 } 00514 try { 00515 ar << BOOST_SERIALIZATION_NVP(swaptry); 00516 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00517 } 00518 try { 00519 ar << BOOST_SERIALIZATION_NVP(unit); 00520 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00521 } 00522 try { 00523 ar << BOOST_SERIALIZATION_NVP(chains_initialized); 00524 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00525 } 00526 try { 00527 ar << BOOST_SERIALIZATION_NVP(user_widths); 00528 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00529 } 00530 this->post_save(ar, version); 00531 } 00532 00533 template<class Archive> 00534 void load(Archive & ar, const unsigned int version) { 00535 this->pre_load(ar, version); 00536 try { 00537 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(Simulation); 00538 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00539 } 00540 try { 00541 ar >> BOOST_SERIALIZATION_NVP(algo); 00542 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00543 } 00544 try { 00545 ar >> BOOST_SERIALIZATION_NVP(cntrl); 00546 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00547 } 00548 try { 00549 ar >> BOOST_SERIALIZATION_NVP(initial); 00550 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00551 } 00552 try { 00553 ar >> BOOST_SERIALIZATION_NVP(swapprob); 00554 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00555 } 00556 try { 00557 ar >> BOOST_SERIALIZATION_NVP(apow); 00558 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00559 } 00560 try { 00561 ar >> BOOST_SERIALIZATION_NVP(tpow); 00562 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00563 } 00564 try { 00565 ar >> BOOST_SERIALIZATION_NVP(minmc); 00566 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00567 } 00568 try { 00569 ar >> BOOST_SERIALIZATION_NVP(state_iter); 00570 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00571 } 00572 try { 00573 ar >> BOOST_SERIALIZATION_NVP(caching); 00574 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00575 } 00576 try { 00577 ar >> BOOST_SERIALIZATION_NVP(ncount); 00578 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00579 } 00580 try { 00581 ar >> BOOST_SERIALIZATION_NVP(MaxT); 00582 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00583 } 00584 try { 00585 ar >> BOOST_SERIALIZATION_NVP(update_flag); 00586 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00587 } 00588 try { 00589 ar >> BOOST_SERIALIZATION_NVP(update_flag1); 00590 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00591 } 00592 try { 00593 ar >> BOOST_SERIALIZATION_NVP(stat0); 00594 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00595 } 00596 try { 00597 ar >> BOOST_SERIALIZATION_NVP(stat1); 00598 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00599 } 00600 try { 00601 ar >> BOOST_SERIALIZATION_NVP(nstat0); 00602 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00603 } 00604 try { 00605 ar >> BOOST_SERIALIZATION_NVP(nstat1); 00606 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00607 } 00608 try { 00609 ar >> BOOST_SERIALIZATION_NVP(mstat0); 00610 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00611 } 00612 try { 00613 ar >> BOOST_SERIALIZATION_NVP(mstat1); 00614 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00615 } 00616 try { 00617 ar >> BOOST_SERIALIZATION_NVP(Ntot); 00618 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00619 } 00620 try { 00621 ar >> BOOST_SERIALIZATION_NVP(swapnum); 00622 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00623 } 00624 try { 00625 ar >> BOOST_SERIALIZATION_NVP(swaptry); 00626 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00627 } 00628 try { 00629 ar >> BOOST_SERIALIZATION_NVP(unit); 00630 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00631 } 00632 try { 00633 ar >> BOOST_SERIALIZATION_NVP(chains_initialized); 00634 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00635 } 00636 try { 00637 ar >> BOOST_SERIALIZATION_NVP(user_widths); 00638 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00639 } 00640 this->post_load(ar, version); 00641 } 00642 00643 00644 }; 00645 00646 } 00647 BIE_CLASS_TYPE_INFO(BIE::ParallelChains) 00648 BIE_CLASS_EXPORT_KEY(BIE::ParallelChains) 00649 #endif Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:10 2010 by
|