lsst.meas.modelfit  15.0-3-g150fc43+8
AdaptiveImportanceSampler.h
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 /*
3  * LSST Data Management System
4  * Copyright 2008-2013 LSST Corporation.
5  *
6  * This product includes software developed by the
7  * LSST Project (http://www.lsst.org/).
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the LSST License Statement and
20  * the GNU General Public License along with this program. If not,
21  * see <http://www.lsstcorp.org/LegalNotices/>.
22  */
23 
24 #ifndef LSST_MEAS_MODELFIT_AdaptiveImportanceSampler_h_INCLUDED
25 #define LSST_MEAS_MODELFIT_AdaptiveImportanceSampler_h_INCLUDED
26 
27 #include <map>
28 
29 #include "lsst/pex/config.h"
30 #include "lsst/afw/table/Schema.h"
33 
34 namespace lsst { namespace meas { namespace modelfit {
35 
42 public:
43  LSST_CONTROL_FIELD(nSamples, int, "Number of Monte Carlo samples to draw");
44  LSST_CONTROL_FIELD(nUpdateSteps, int, "Number of Expectation-Maximization update iterations");
45  LSST_CONTROL_FIELD(tau1, double, "Damping parameter for E-M update (see Mixture::updateEM)");
46  LSST_CONTROL_FIELD(tau2, double, "Damping parameter for E-M update (see Mixture::updateEM)");
48  targetPerplexity, double,
49  "Minimum value for normalized perplexity after this iteration; if the actual value is less "
50  "than this, this iteration will be repeated up to maxRepeat times until the target is met. "
51  "In addition, if any previous iteration meets this target, this iteration will be skipped."
52  );
54  maxRepeat, int,
55  "Maximum number of times this iteration will be repeated to meet the perplexityTarget"
56  );
57 
59  nSamples(2000), nUpdateSteps(2), tau1(1E-4), tau2(0.5), targetPerplexity(1.0), maxRepeat(0)
60  {}
61 };
62 
71 public:
72 
84  afw::table::Schema & sampleSchema,
87  bool doSaveIterations=false
88  );
89 
90  void run(
91  SamplingObjective const & objective,
92  PTR(Mixture) proposal,
93  afw::table::BaseCatalog & samples
94  ) const override;
95 
96  double computeNormalizedPerplexity(afw::table::BaseCatalog const & samples) const;
97 
98  double computeEffectiveSampleSizeFraction(afw::table::BaseCatalog const & samples) const;
99 
100 private:
101  bool _doSaveIterations;
102  PTR(afw::math::Random) _rng;
104  afw::table::Key<Scalar> _weightKey;
105  afw::table::Key<Scalar> _objectiveKey;
106  afw::table::Key<Scalar> _proposalKey;
108  afw::table::Key<int> _iterCtrlKey;
109  afw::table::Key<int> _iterRepeatKey;
110 };
111 
112 }}} // namespace lsst::meas::modelfit
113 
114 #endif // !LSST_MEAS_MODELFIT_AdaptiveImportanceSampler_h_INCLUDED
double tau2
"Damping parameter for E-M update (see Mixture::updateEM)" ;
double tau1
"Damping parameter for E-M update (see Mixture::updateEM)" ;
#define PTR(...)
#define LSST_CONTROL_FIELD(NAME, TYPE, DOC)
STL class.
Sampler class that performs Monte Carlo sampling, while iteratively updating the analytic distributio...
Control object for one iteration of adaptive importance sampling.
int maxRepeat
"Maximum number of times this iteration will be repeated to meet the perplexityTarget" ; ...
def run(suite, exit=True)
int nUpdateSteps
"Number of Expectation-Maximization update iterations" ;
double targetPerplexity
"Minimum value for normalized perplexity after this iteration; if the actual value is less " "than th...
int nSamples
"Number of Monte Carlo samples to draw" ;