363 #include <filesystem> 364 #include <sys/resource.h> 372 #include <sys/syslimits.h> 373 #include <mach-o/dyld.h> 389 unsigned long random_seed = 0;
394 std::atomic<bool>
CTRL_C =
false;
397 #ifndef HOST_NAME_MAX 398 const size_t HOST_NAME_MAX = 256;
400 char hostname[HOST_NAME_MAX];
403 std::thread::id main_thread_id = std::this_thread::get_id();
422 Fleet(std::string brief) : app{brief}, done(
false) {
424 app.add_option(
"-S,--seed", random_seed,
"Seed the rng (0 is no seed)");
425 app.add_option(
"-s,--steps",
FleetArgs::steps,
"Number of MCMC or MCTS search steps to run");
429 app.add_option(
"-p,--print",
FleetArgs::print,
"Print out every this many");
431 app.add_option(
"-n,--threads",
FleetArgs::nthreads,
"Number of threads for parallel search");
433 app.add_option(
"--restart",
FleetArgs::restart,
"If we don't improve after this many, restart a chain");
441 app.add_option(
"-T,--time",
FleetArgs::timestring,
"Stop (via CTRL-C) after this much time (takes smhd as seconds/minutes/hour/day units)");
470 if(not done) completed();
478 static void fleet_interrupt_handler(
int signum) {
479 if(signum == SIGINT) {
482 else if(signum == SIGHUP) {
490 void add_option(std::string c, T& var, std::string description ) {
491 app.add_option(c, var, description);
494 void add_flag(std::string c, T& var, std::string description ) {
495 app.add_flag(c, var, description);
498 int initialize(
int argc,
char** argv) {
501 app.parse(argc, argv);
505 std::signal(SIGINT, Fleet::fleet_interrupt_handler);
506 std::signal(SIGHUP, Fleet::fleet_interrupt_handler);
509 setpriority(PRIO_PROCESS, 0, 5);
528 gethostname(hostname, HOST_NAME_MAX);
531 char path[PATH_MAX+1];
532 uint32_t size =
sizeof(path);
533 _NSGetExecutablePath(path, &size);
534 char tmp[128]; sprintf(tmp,
"md5sum %s", path);
538 char tmp[128]; sprintf(tmp,
"md5sum /proc/%d/exe", getpid());
541 std::filesystem::path cwd = std::filesystem::current_path();
542 std::string exc =
system_exec(tmp); exc.erase(exc.length()-1);
544 print(
"# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
545 print(
"# Running Fleet on " + std::string(hostname) +
" with PID=" +
str(getpid()) +
" by user " + getenv(
"USER") +
" at " + datestring());
546 print(
"# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
548 print(
"# Executable checksum: ", exc);
549 print(
"# Path:", cwd.string() );
550 print(
"# Run options: ");
551 for(
int a=0;a<argc;a++) {
552 print(
"#\t", argv[a]);
554 print(
"# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
560 CERR "# Warning: you haven not specified --time or --steps so this will run forever or until CTRL-C." ENDL;
570 auto elapsed_seconds = time_since(start_time) / 1000.0;
572 COUT "# Elapsed time:" TAB elapsed_seconds <<
" seconds " ENDL;
590 COUT "# Fleet completed at " << datestring() ENDL;
unsigned long burn
Definition: FleetArgs.h:14
int omp_threads
Definition: FleetArgs.h:43
unsigned long inner_runtime
Definition: FleetArgs.h:26
unsigned long print
Definition: FleetArgs.h:34
std::atomic< uintmax_t > global_sample_count(0)
std::string tree_path
Definition: FleetArgs.h:40
unsigned long inner_thin
Definition: FleetArgs.h:28
#define TAB
Definition: IO.h:19
std::atomic< uintmax_t > depth_exceptions(0)
double explore
Definition: FleetArgs.h:19
bool print_proposals
Definition: FleetArgs.h:36
std::string system_exec(const char *cmd)
Definition: Miscellaneous.h:11
size_t chainsthreads
Definition: FleetArgs.h:22
const std::string FLEET_VERSION
Definition: Fleet.h:377
unsigned long ntop
Definition: FleetArgs.h:15
std::atomic< uintmax_t > enumeration_steps(0)
std::string inner_timestring
Definition: FleetArgs.h:30
std::string str(BindingTree *t)
Definition: BindingTree.h:195
std::string timestring
Definition: FleetArgs.h:29
volatile sig_atomic_t CTRL_C
size_t partition_depth
Definition: FleetArgs.h:23
void print(FIRST f, ARGS... args)
Lock output_lock and print to std:cout.
Definition: IO.h:53
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:27
#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:60
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:41
std::string input_path
Definition: FleetArgs.h:39
unsigned long inner_steps
Definition: FleetArgs.h:13
bool top_print_best
Definition: FleetArgs.h:37
size_t nthreads
Definition: FleetArgs.h:20
unsigned long runtime
Definition: FleetArgs.h:25
#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:32
This class has all the information for running MCMC or MCTS in a little package. It defaultly constru...
unsigned long thin
Definition: FleetArgs.h:33