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