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); }