void Mcmc::run(size_t kIterations) { /* Let user know what we are doing */ if ( generation == 0 ) std::cout << "Running MCMC simulation for " << kIterations << " iterations" << std::endl; else std::cout << "Appending " << kIterations << " iterations to previous MCMC simulation of " << generation << " iterations" << std::endl; if ( scheduleType == "single" ) { std::cout << "The simulator uses " << moves.size() << " different moves, with a" << std::endl; std::cout << "single move picked randomly per iteration" << std::endl; } else if ( scheduleType == "random" ) { std::cout << "The simulator uses " << moves.size() << " different moves in a random" << std::endl; std::cout << "move schedule with " << schedule->getNumberMovesPerIteration() << " moves per iteration" << std::endl; } else if ( scheduleType == "sequential" ) { std::cout << "The simulator uses " << moves.size() << " different moves in a sequential" << std::endl; std::cout << "move schedule with " << schedule->getNumberMovesPerIteration() << " moves per iteration" << std::endl; } // Initialize objects used in run initializeChain(); initializeMonitors(); if ( generation == 0 ) { // Monitor startMonitors(); monitor(0); } // reset the counters for the move schedules for (RbIterator<Move> it = moves.begin(); it != moves.end(); ++it) { it->resetCounters(); } // Run the chain for (int k=1; k<=kIterations; k++) { nextCycle(true); // Monitor monitor(generation); } }
/** * Reset the sampler. * We reset the counters of all moves. */ void HillClimber::reset( void ) { double movesPerIteration = 0.0; for (RbIterator<Move> it = moves.begin(); it != moves.end(); ++it) { it->resetCounters(); movesPerIteration += it->getUpdateWeight(); } }