363 #include <sys/resource.h> 381 unsigned long random_seed = 0;
386 volatile sig_atomic_t
CTRL_C =
false;
389 #ifndef HOST_NAME_MAX 390 const size_t HOST_NAME_MAX = 256;
392 char hostname[HOST_NAME_MAX];
395 std::thread::id main_thread_id = std::this_thread::get_id();
414 Fleet(std::string brief) : app{brief}, done(
false) {
416 app.add_option(
"--seed", random_seed,
"Seed the rng (0 is no seed)");
417 app.add_option(
"--steps",
FleetArgs::steps,
"Number of MCMC or MCTS search steps to run");
423 app.add_option(
"-n,--threads",
FleetArgs::nthreads,
"Number of threads for parallel search");
425 app.add_option(
"--restart",
FleetArgs::restart,
"If we don't improve after this many, restart a chain");
435 app.add_option(
"-T,--time",
FleetArgs::timestring,
"Stop (via CTRL-C) after this much time (takes smhd as seconds/minutes/hour/day units)");
457 if(not done) completed();
465 static void fleet_interrupt_handler(
int signum) {
466 if(signum == SIGINT) {
469 else if(signum == SIGHUP) {
477 void add_option(std::string c, T& var, std::string description ) {
478 app.add_option(c, var, description);
481 void add_flag(std::string c, T& var, std::string description ) {
482 app.add_flag(c, var, description);
485 int initialize(
int argc,
char** argv) {
488 app.parse(argc, argv);
492 signal(SIGINT, Fleet::fleet_interrupt_handler);
493 signal(SIGHUP, Fleet::fleet_interrupt_handler);
496 setpriority(PRIO_PROCESS, 0, 5);
507 gethostname(hostname, HOST_NAME_MAX);
510 char tmp[64]; sprintf(tmp,
"md5sum /proc/%d/exe", getpid());
512 COUT "# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ENDL;
513 COUT "# Running Fleet on " << hostname <<
" with PID=" << getpid() <<
" by user " << getenv(
"USER") <<
" at " << datestring() ENDL;
514 COUT "
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ENDL; 527 COUT "# \t --seed=" << random_seed
ENDL;
528 COUT "# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ENDL;
534 CERR "# Warning: you haven not specified --time or --steps so this will run forever or until CTRL-C." ENDL;
544 auto elapsed_seconds = time_since(start_time) / 1000.0;
546 COUT "# Elapsed time:" TAB elapsed_seconds <<
" seconds " ENDL;
564 COUT "# Fleet completed at " << datestring() ENDL;
unsigned long burn
Definition: FleetArgs.h:14
unsigned long inner_runtime
Definition: FleetArgs.h:25
unsigned long print
Definition: FleetArgs.h:33
std::atomic< uintmax_t > global_sample_count(0)
std::string tree_path
Definition: FleetArgs.h:38
unsigned long inner_thin
Definition: FleetArgs.h:27
#define TAB
Definition: IO.h:19
std::atomic< uintmax_t > depth_exceptions(0)
double explore
Definition: FleetArgs.h:19
std::string system_exec(const char *cmd)
Definition: Miscellaneous.h:11
const std::string FLEET_VERSION
Definition: Fleet.h:369
unsigned long ntop
Definition: FleetArgs.h:15
std::atomic< uintmax_t > enumeration_steps(0)
std::string inner_timestring
Definition: FleetArgs.h:29
std::string timestring
Definition: FleetArgs.h:28
volatile sig_atomic_t CTRL_C
size_t partition_depth
Definition: FleetArgs.h:22
int print_header
Definition: FleetArgs.h:17
std::atomic< uintmax_t > posterior_calls(0)
std::atomic< uintmax_t > vm_ops(0)
unsigned long inner_restart
Definition: FleetArgs.h:26
#define CERR
Definition: IO.h:23
std::atomic< uintmax_t > beam_steps(0)
size_t nchains
Definition: FleetArgs.h:21
#define ENDL
Definition: IO.h:21
void seed(unsigned long s)
Seed only if s is nonzero.
Definition: Rng.h:56
This is a thread_local rng whose first object is used to see others (in other threads). This way, we can have thread_local rngs that all are seeded deterministcally in Fleet via –seed=X.
std::string output_path
Definition: FleetArgs.h:39
std::string input_path
Definition: FleetArgs.h:37
unsigned long inner_steps
Definition: FleetArgs.h:13
size_t nthreads
Definition: FleetArgs.h:20
unsigned long top_print_best
Definition: FleetArgs.h:35
unsigned long runtime
Definition: FleetArgs.h:24
#define COUT
Definition: IO.h:24
unsigned long steps
Definition: FleetArgs.h:12
time_t convert_time(const std::string &s)
Give a timepoint for the current time.
Definition: Timing.h:79
unsigned long restart
Definition: FleetArgs.h:31
This class has all the information for running MCMC or MCTS in a little package. It defaultly constru...
unsigned long thin
Definition: FleetArgs.h:32