Brief description of class still missing. More...
#include <BatchRun.h>
Public Member Functions | |
BatchRun (QObject *parent=0) | |
bool | importanceSampling (int ns, int seed, QString baseFileName, QString fileName, ReportWriter::Action reportAction) |
bool | neighborhoodOptimization (int ns0, int ns, int nr, int expectedBestModelCount, double maximumSavedMisfit, QString fileName, ReportWriter::Action reportAction) |
bool | setParameters (const QString ¶mFile) |
bool | setTargets (const QString &targetFile) |
bool | snoopOptimization (int seed, QString fileName, ReportWriter::Action reportAction) |
~BatchRun () |
Brief description of class still missing.
Full description of class still missing
DinverCore::BatchRun::BatchRun | ( | QObject * | parent = 0 | ) |
bool DinverCore::BatchRun::importanceSampling | ( | int | ns, |
int | seed, | ||
QString | baseFileName, | ||
QString | fileName, | ||
ReportWriter::Action | reportAction | ||
) |
References QGpCoreTools::endl(), DinverCore::ImportanceSampling::generate(), DinverCore::ImportanceSampling::importModels(), DinverCore::ReportWriter::initReport(), DinverCore::ImportanceSampling::openReport(), DinverCore::ImportanceSampling::setForward(), DinverCore::ImportanceSampling::setSeed(), QGpCoreTools::tr(), and TRACE.
Referenced by modeImportanceSampling().
{ TRACE; AbstractForward * forward=createForward(); if(!forward) return false; ImportanceSampling is; is.setForward(forward); is.setSeed(seed); if(!ReportWriter::initReport(fileName, tr("Starting inversion run"), reportAction)) { App::stream() << tr("Run not started") << endl; return false; } if(!is.openReport(fileName)) { App::stream() << tr("Error opening output report %1").arg(fileName) << endl; return false; } if(!is.importModels(baseFileName)) { App::stream() << tr("Error opening output report %1").arg(fileName) << endl; return false; } is.generate(ns); return true; }
bool DinverCore::BatchRun::neighborhoodOptimization | ( | int | ns0, |
int | ns, | ||
int | nr, | ||
int | expectedBestModelCount, | ||
double | maximumSavedMisfit, | ||
QString | fileName, | ||
ReportWriter::Action | reportAction | ||
) |
References DinverCore::ReportWriter::Append, DinverCore::RealSpace::checksum(), QGpCoreTools::endl(), DinverCore::ModelRepository::importModels(), DinverCore::ReportWriter::initReport(), LOCAL_POINTER, DinverCore::Generator::MonteCarlo, DinverCore::Generator::Neighborhood, DinverCore::ModelRepository::openReport(), DinverCore::AbstractForward::parameterSpace(), DinverCore::ModelRepository::printActiveModels(), DinverCore::ModelRepository::setForward(), DinverCore::ModelRepository::setMaximumBestModelCount(), DinverCore::ModelRepository::setMaximumModelCount(), DinverCore::ModelRepository::setMaximumQueueLength(), DinverCore::ModelRepository::setMaximumSavedMisfit(), DinverCore::ModelRepository::setStorage(), DinverCore::ModelRepository::start(), QGpCoreTools::tr(), TRACE, DinverCore::ModelRepository::validModelCount(), DinverCore::RealSpace::variableParameterCount(), and DinverCore::ModelRepository::wait().
Referenced by modeNeighborhoodOptimization().
{ TRACE; AbstractForward * forward=createForward(); LOCAL_POINTER(AbstractForward, forward); if(!forward) return false; ModelRepository rep; rep.setForward(forward); rep.setStorage(); rep.setMaximumSavedMisfit(maximumSavedMisfit); rep.setMaximumBestModelCount(expectedBestModelCount); rep.setMaximumQueueLength(100); if(!ReportWriter::initReport(fileName, tr("Starting inversion run"), reportAction)) { App::stream() << tr("Run not started") << endl; return false; } if(reportAction==ReportWriter::Append) { rep.importModels(fileName, true); } if(!rep.openReport(fileName)) { App::stream() << tr("Error opening output report %1").arg(fileName) << endl; return false; } App::stream() << tr("\n---------------------- Starting at ") << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") << "\n\n" << tr(" Num samples Monte-Carlo =%1\n").arg(ns0) << tr(" Num samples Neighborhood =%1\n").arg(ns) << tr(" Num cells to resample =%1\n").arg(nr) << tr(" Num cells to resample =%1\n").arg(nr) << tr(" Num of walks before accepting model =%1\n").arg(2) << tr(" Max reject ratio before cell give up=%1\n").arg(0.9) << tr(" Dimension of parameter space =%1\n").arg(forward->parameterSpace().variableParameterCount()) << tr(" Parameterization checksum =%1\n").arg(forward->parameterSpace().checksum()) << tr(" Total number of models =%1\n").arg(rep.validModelCount()+ns0+ns) << tr(" Model file =%1\n").arg(fileName) << endl; QTime chrono; chrono.start(); rep.setMaximumModelCount(ns0); if(!rep.start(Thread::idealThreadCount(), Generator::MonteCarlo)) { App::stream() << tr("Error in initialization of first model (Monte-Carlo)") << endl; return false; } rep.wait(); int monteCarloTime=chrono.elapsed(); rep.setMaximumModelCount(ns); if(!rep.start(Thread::idealThreadCount(), Generator::Neighborhood)) { App::stream() << tr("Error in initialization of first model (Neighborhood)") << endl; return false; } rep.wait(); int neighborhoodTime=chrono.elapsed()-monteCarloTime; // Time report: App::stream() << tr("\nGlobal timing report\n" "--------------\n") << endl; App::stream() << tr("Monte-Carlo generation: %1 ms (%2 models/s)").arg(monteCarloTime).arg(1000.0*ns0/monteCarloTime) << endl; App::stream() << tr("Neighborhood generation: %1 ms (%2 models/s)").arg(neighborhoodTime).arg(1000.0*ns/neighborhoodTime) << endl; rep.printActiveModels(); return true; }
bool DinverCore::BatchRun::setParameters | ( | const QString & | paramFile | ) |
References DinverCore::dinverCore, QGpCoreTools::endl(), DinverCore::DinverInterface::isValid(), DinverCore::XMLDinverContext::Parameters, DinverCore::DinverCoreObject::plugin(), QGpCoreTools::tr(), TRACE, QGpCoreTools::XMLHeader::xml_restoreFile(), and DinverCore::DinverInterface::xmlSupport().
Referenced by modeImportanceSampling(), modeNeighborhoodOptimization(), and modeSnoopOptimization().
{ TRACE; if(!dinverCore->plugin() || !dinverCore->plugin()->isValid()) { App::stream() << tr("No plugin selected or not a valid plugin (check versions)") << endl; return false; } if(!dinverCore->plugin()->xmlSupport()) { App::stream() << tr("Plugin does not support importation of parameters from XML") << endl; return false; } XMLDinverContext dinverContext(XMLDinverContext::Parameters); XMLDinver dinver; XMLDinverHeader hdr(&dinver); return hdr.xml_restoreFile(paramFile, &dinverContext)==XMLClass::NoError; }
bool DinverCore::BatchRun::setTargets | ( | const QString & | targetFile | ) |
References DinverCore::dinverCore, QGpCoreTools::endl(), DinverCore::DinverInterface::isValid(), DinverCore::DinverCoreObject::plugin(), DinverCore::XMLDinverContext::Targets, QGpCoreTools::tr(), TRACE, QGpCoreTools::XMLHeader::xml_restoreFile(), and DinverCore::DinverInterface::xmlSupport().
Referenced by modeNeighborhoodOptimization(), and modeSnoopOptimization().
{ TRACE; if(!dinverCore->plugin() || !dinverCore->plugin()->isValid()) { App::stream() << tr("No plugin selected or not a valid plugin (check versions)") << endl; return false; } if(!dinverCore->plugin()->xmlSupport()) { App::stream() << tr("Plugin does not support importation of targets from XML") << endl; return false; } XMLDinverContext dinverContext(XMLDinverContext::Targets); XMLDinver dinver; XMLDinverHeader hdr(&dinver); return hdr.xml_restoreFile(targetFile, &dinverContext)==XMLClass::NoError; }
bool DinverCore::BatchRun::snoopOptimization | ( | int | seed, |
QString | fileName, | ||
ReportWriter::Action | reportAction | ||
) |
References DinverCore::GridSnoop::checksum(), QGpCoreTools::endl(), DinverCore::ReportWriter::initReport(), DinverCore::GridSnoop::openReport(), DinverCore::GridSnoop::optimization(), DinverCore::GridSnoop::setForward(), DinverCore::GridSnoop::setSeed(), DinverCore::GridSnoop::setThreadCount(), DinverCore::GridSnoop::sleep(), QGpCoreTools::tr(), TRACE, DinverCore::GridSnoop::variableParameterCount(), and DinverCore::GridSnoop::wake().
Referenced by modeSnoopOptimization().
{ TRACE; AbstractForward * forward=createForward(); if(!forward) return false; // Though random generator can generate its own seed from time if seed is null, // it's better to generate it here for proper reporting to user if(seed==0) { seed=rand(); } GridSnoop gs; gs.setForward(forward); gs.setSeed(seed); gs.wake(); if(!ReportWriter::initReport(fileName, tr("Starting inversion run"), reportAction)) { App::stream() << tr("Run not started") << endl; delete forward; return false; } //if(reportAction==ReportWriter::Append) { // na.importModels(fileName, true); //} if(!gs.openReport(fileName)) { App::stream() << tr("Error opening output report %1").arg(fileName) << endl; delete forward; return false; } if(!gs.setThreadCount(Thread::idealThreadCount())) { App::stream() << tr("Error in initialization of first model") << endl; return false; } App::stream() << tr("\n---------------------- Starting at ") << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") << "\n\n" << tr(" Random seed =%1\n\n").arg(seed) << tr(" Dimension of parameter space =%1\n").arg(gs.variableParameterCount()) << tr(" Parameterization checksum =%1\n").arg(gs.checksum()) << tr(" Model file =%1\n").arg(fileName) << endl; if(! gs.optimization()) { return false; } //gs.timeReport(); gs.sleep(); return true; }