Brief description of class still missing. More...
#include <ImportanceSampling.h>
Public Member Functions | |
| void | generate (int ns=5000, int nw=2) |
| ImportanceSampling () | |
| bool | importModels (QString fileName, bool strict=true) |
| bool | openReport (const QString &fileName) |
| void | setForward (AbstractForward *forward) |
| void | setSeed (int seed) |
| ~ImportanceSampling () | |
Brief description of class still missing.
Full description of class still missing
| void DinverCore::ImportanceSampling::generate | ( | int | ns = 5000, |
| int | nw = 2 |
||
| ) |
References DinverCore::ReportWriter::addModel(), QGpCoreTools::ConsoleProgress::begin(), DinverCore::ModelSet::count(), DinverCore::VoronoiNavigator::currentAxis(), QGpCoreTools::ConsoleProgress::end(), DinverCore::Parameter::getGridLimits(), DinverCore::VoronoiNavigator::incrementAxis(), DinverCore::VoronoiNavigator::intersections(), DinverCore::Parameter::isFussy(), DinverCore::AbstractForward::isFussyOk(), DinverCore::ModelSet::model(), DinverCore::AbstractForward::parameterSpace(), DinverCore::PdfCurve::randomValue(), SAFE_UNINITIALIZED, QGpCoreTools::ConsoleProgress::setCaption(), DinverCore::VoronoiNavigator::setCurrentAxis(), DinverCore::VoronoiNavigator::setCurrentCell(), DinverCore::VoronoiNavigator::setCurrentPoint(), DinverCore::Parameter::setGridValue(), QGpCoreTools::AbstractProgress::setValue(), DinverCore::VoronoiNavigator::setValue(), sOut(), QGpCoreTools::tr(), DinverCore::UniqueRandom::uniform(), DinverCore::AbstractForward::valueChanged(), DinverCore::RealSpace::variableParameter(), DinverCore::RealSpace::variableParameterCount(), and DinverCore::AbstractForward::writeReport().
Referenced by DinverCore::BatchRun::importanceSampling().
{
RealSpace& parameterSpace=_forward->parameterSpace();
int ndVar=parameterSpace.variableParameterCount();
ScaledModels scaledModels(_models, scales());
VoronoiNavigator nav(&scaledModels);
// Start sampling from any random model
int modelIndex=_randomGenerator->uniform(0, _models->count()-1);
nav.setCurrentPoint(modelIndex);
const int * m=_models->model(modelIndex);
for(int i=0; i < ndVar; i++) {
parameterSpace.variableParameter(i)->setGridValue(m[i]);
}
_forward->valueChanged();
ConsoleProgress progress;
progress.setCaption(tr("Generating models"));
progress.begin();
int nStep=ndVar * nw;
double xMin, xMax;
SAFE_UNINITIALIZED(xMin,0);
SAFE_UNINITIALIZED(xMax,0);
int cellIndex;
double v;
PdfCurve pdf;
QTextStream sOut(stdout);
for(int is=0;is<ns;is++) {
progress.setValue(is);
nav.setCurrentAxis(ndVar-1);
for(int iStep=0;iStep < nStep;iStep++ ) {
//nav.printCurrentPoint();
//nav.checkCurrentPoint();
nav.incrementAxis();
Parameter * p=parameterSpace.variableParameter(nav.currentAxis());
p->getGridLimits(xMin, xMax);
//if(iStep==14 || iStep==31) {
//sOut << "#" << xMin << " " << xMax << " " << p->gridValue(1480) << " " << p->gridValue(1540) << endl;
//}
pdf=nav.intersections(xMin, xMax);
//if(iStep==14 || iStep==31) {
//sOut << "#" << p->name() << endl;
//pdf.printCumulative(*_models, *p);
//pdf.toStream(sOut, *_models);
//}
if(p->isFussy()) { // Parameters tagged as fussy need a validation of the random value
do {
v=pdf.randomValue(*_randomGenerator, *_models, cellIndex);
p->setGridValue(v);
// Some parametrizations may need some updates before proceeding
_forward->valueChanged(p);
} while( !_forward->isFussyOk(p));
nav.setValue(v);
} else {
v=pdf.randomValue(*_randomGenerator, *_models, cellIndex);
nav.setValue(v);
p->setGridValue(v);
_forward->valueChanged(p); // Some parametrizations may need some updates before proceeding
}
nav.setCurrentCell(cellIndex);
}
_report->addModel(0.0, _parameterSpaceChecksum, parameterSpace);
_forward->writeReport(_report);
}
progress.end(ns);
}
| bool DinverCore::ImportanceSampling::importModels | ( | QString | fileName, |
| bool | strict = true |
||
| ) |
References fileName, DinverCore::ModelSet::importModels(), and DinverCore::AbstractForward::parameterSpace().
Referenced by DinverCore::BatchRun::importanceSampling().
{
return _models->importModels(_forward->parameterSpace(), fileName, strict);
}
| bool DinverCore::ImportanceSampling::openReport | ( | const QString & | fileName | ) |
Initialize report. Can be called at any time.
References QGpCoreTools::endl(), DinverCore::ReportWriter::open(), and QGpCoreTools::tr().
Referenced by DinverCore::BatchRun::importanceSampling().
| void DinverCore::ImportanceSampling::setForward | ( | AbstractForward * | forward | ) |
References DinverCore::RealSpace::checksum(), DinverCore::AbstractForward::parameterSpace(), and DinverCore::RealSpace::variableParameterCount().
Referenced by DinverCore::BatchRun::importanceSampling().
{
ASSERT(!_forward);
_forward=forward;
RealSpace& parameterSpace=_forward->parameterSpace();
_parameterSpaceChecksum=parameterSpace.checksum();
// With importance sampling, misfit is never computed, used the smallest misfit vector: 1
_models=new ModelSet(parameterSpace.variableParameterCount(), 1);
}
| void DinverCore::ImportanceSampling::setSeed | ( | int | seed | ) |
Referenced by DinverCore::BatchRun::importanceSampling().
{
delete _randomGenerator;
_randomGenerator=new UniqueRandom(seed);
}