Fleet  0.0.9
Inference in the LOT
Inference Directory Reference
Directory dependency graph for Inference:
src/Inference

Directories

directory  MCMC
 
directory  MCTS
 

Files

file  Batch.h [code]
 
file  BeamSearch.h [code]
 This is an implementation of beam search that maintains a priority queue of partial states and attempts to find a program with the lowest posterior score. To do this, we choose a node to expand based on its prior plus N_REPS samples of its likelihood, computed by filling in its children at random. This stochastic heuristic is actually inadmissable (in A* terms) since it usually overestimates the cost. As a result, it usually makes sense to run at a pretty high temperature, corresponding to a downweighting of the likelihood, and making the heuristic more likely to be admissable.
 
file  Control.h [code]
 This class has all the information for running MCMC or MCTS in a little package. It defaultly constructs (via Control()) to read these from FleetArgs, which are a bunch of variables set by Fleet::initialize from the command line. This makes it especially convenient to call with command line arguments, but others can be specified as well.
 
file  EnumerationInference.h [code]
 
file  HillClimbing.h [code]
 This cute kind of inference keeps a body of N top hypotheses, and successively proposes to them using standard proposals. When it hasn't improved in ctl.restart steps, it will restart (resample). Note that this really should use ctl.restart>0, or else you just climb up one hill. NOTE: We could propose propotional to each hypothesis' posterior, but it doesn't matter much because the best gets most probability mass (that's why we don't store more than n=1 defaultly)
 
file  MPIInferenceInterface.h [code]
 
file  PriorInference.h [code]
 Inference by sampling from the prior – doesn't tend to work well, but might be a useful baseline.
 
file  SampleStreams.h [code]
 
file  ThreadedInferenceInterface.h [code]
 This manages multiple threads for running inference. This requires a subclass to define run_thread, which is what each individual thread should do. All threads can then be called with run(Control, Args... args), which copies the control for each thread (setting threads=1) and then passes the args arguments onward.