FOX/ObjCryst++
1.10.X (development)
|
Base object for Monte-Carlo Global Optimization methods. More...
Public Member Functions | |
MonteCarloObj (const string name="") | |
Constructor. | |
MonteCarloObj (const bool internalUseOnly) | |
Constructor. More... | |
virtual | ~MonteCarloObj () |
Destructor. | |
void | SetAlgorithmSimulAnnealing (const AnnealingSchedule scheduleTemp, const REAL tMax, const REAL tMin, const AnnealingSchedule scheduleMutation=ANNEALING_CONSTANT, const REAL mutMax=16., const REAL mutMin=.125, const long nbTrialRetry=0, const REAL minCostRetry=0.) |
Set the refinement method to simulated Annealing. More... | |
void | SetAlgorithmParallTempering (const AnnealingSchedule scheduleTemp, const REAL tMax, const REAL tMin, const AnnealingSchedule scheduleMutation=ANNEALING_CONSTANT, const REAL mutMax=16., const REAL mutMin=.125) |
Set the refinement method to Parallel Tempering. More... | |
virtual void | Optimize (long &nbSteps, const bool silent=false, const REAL finalcost=0, const REAL maxTime=-1) |
Launch optimization (a single run) for N steps. More... | |
virtual void | MultiRunOptimize (long &nbCycle, long &nbSteps, const bool silent=false, const REAL finalcost=0, const REAL maxTime=-1) |
Launch optimization for multiple runs of N steps. More... | |
void | RunSimulatedAnnealing (long &nbSteps, const bool silent=false, const REAL finalcost=0, const REAL maxTime=-1) |
void | RunParallelTempering (long &nbSteps, const bool silent=false, const REAL finalcost=0, const REAL maxTime=-1) |
void | RunRandomLSQMethod (long &nbCycle) |
virtual void | XMLOutput (ostream &os, int indent=0) const |
Output a description of the object in XML format to a stream. More... | |
virtual void | XMLInput (istream &is, const XMLCrystTag &tag) |
Input in XML format from a stream, restoring the set of refined objects and the associated cost functions. More... | |
virtual const string | GetClassName () const |
Get the name for this class type. | |
LSQNumObj & | GetLSQObj () |
Access to the builtin LSQ optimization object. | |
const LSQNumObj & | GetLSQObj () const |
Access to the builtin LSQ optimization object. | |
virtual void | InitLSQ (const bool useFullPowderPatternProfile=true) |
Prepare mLSQ for least-squares refinement during the global optimization. More... | |
Public Member Functions inherited from ObjCryst::OptimizationObj | |
OptimizationObj (const string name="") | |
Constructor. | |
virtual | ~OptimizationObj () |
Destructor. | |
virtual void | RandomizeStartingConfig () |
Randomize starting configuration. More... | |
void | FixAllPar () |
Fix all parameters. | |
void | SetParIsFixed (const string &parName, const bool fix) |
Fix one parameter. | |
void | SetParIsFixed (const RefParType *type, const bool fix) |
Fix one family of parameters. | |
void | UnFixAllPar () |
UnFix All parameters. | |
void | SetParIsUsed (const string &parName, const bool use) |
Set a parameter to be used. | |
void | SetParIsUsed (const RefParType *type, const bool use) |
Set a family of parameters to be used. | |
void | SetLimitsRelative (const string &parName, const REAL min, const REAL max) |
Change the relative limits for a parameter from its name. | |
void | SetLimitsRelative (const RefParType *type, const REAL min, const REAL max) |
Change the relative limits for a family of parameter. | |
void | SetLimitsAbsolute (const string &parName, const REAL min, const REAL max) |
Change the absolute limits for a parameter from its name. | |
void | SetLimitsAbsolute (const RefParType *type, const REAL min, const REAL max) |
Change the absolute limits for a family of parameter. | |
virtual REAL | GetLogLikelihood () const |
The optimized (minimized, actually) function. More... | |
void | StopAfterCycle () |
Stop after the current cycle. USed for interactive refinement. | |
virtual void | DisplayReport () |
Show report to the user during refinement. Used for GUI update. | |
void | AddRefinableObj (RefinableObj &) |
Add a refined object. All sub-objects are also added. | |
RefinableObj & | GetFullRefinableObj (const bool rebuild=true) |
Get the RefinableObj with all the parameters from all refined objects. More... | |
const string & | GetName () const |
Get the name for this object. | |
void | SetName (const string &) |
Set the name for this object. | |
virtual void | Print () const |
Print some information about this object. | |
void | RestoreBestConfiguration () |
Restore the Best configuration. | |
bool | IsOptimizing () const |
Are we busy optimizing ? | |
void | TagNewBestConfig () |
During a global optimization, tell all objects that the current config is the latest "best" config. | |
REAL | GetLastOptimElapsedTime () const |
Get the elapsed time (in seconds) during the last optimization. | |
MainTracker & | GetMainTracker () |
Get the MainTracker. | |
const MainTracker & | GetMainTracker () const |
Get the MainTracker. | |
RefObjOpt & | GetXMLAutoSaveOption () |
const RefObjOpt & | GetXMLAutoSaveOption () const |
const REAL & | GetBestCost () const |
Access to current best cost. | |
REAL & | GetBestCost () |
Access to current best cost. | |
virtual void | BeginOptimization (const bool allowApproximations=false, const bool enableRestraints=false) |
Begin optimization for all objects. | |
virtual void | EndOptimization () |
End optimization for all objects. | |
virtual long & | NbTrialPerRun () |
Number of trial per run. | |
virtual const long & | NbTrialPerRun () const |
Number of trial per run. | |
Protected Member Functions | |
virtual void | NewConfiguration (const RefParType *type=gpRefParTypeObjCryst) |
Make a random change in the configuration. More... | |
virtual void | InitOptions () |
Initialization of options. | |
Protected Member Functions inherited from ObjCryst::OptimizationObj | |
void | PrepareRefParList () |
virtual void | UpdateDisplay () |
Update Display (if any display is available), when a new 'relevant' configuration is reached. More... | |
void | BuildRecursiveRefObjList () |
(Re)build OptimizationObj::mRecursiveRefinedObjList, if an object has been added or modified. More... | |
Protected Attributes | |
RefObjOpt | mGlobalOptimType |
Method used for the global optimization. More... | |
REAL | mCurrentCost |
Current value of the cost function. | |
RefObjOpt | mSaveTrackedData |
Option to save the evolution of tracked data (cost functions, likelihhod, individual parameters,...) | |
REAL | mTemperature |
Current temperature for annealing. | |
REAL | mTemperatureMax |
Beginning temperature for annealing. | |
REAL | mTemperatureMin |
Lower temperature. | |
RefObjOpt | mAnnealingScheduleTemp |
Schedule for the annealing. | |
REAL | mTemperatureGamma |
Gamma for the 'gamma' temperature schedule. | |
REAL | mMutationAmplitude |
Mutation amplitude. More... | |
REAL | mMutationAmplitudeMax |
Mutation amplitude at the beginning of the optimization. | |
REAL | mMutationAmplitudeMin |
Mutation amplitude at the end of the optimization. | |
RefObjOpt | mAnnealingScheduleMutation |
Schedule for the annealing. | |
REAL | mMutationAmplitudeGamma |
Gamma for the 'gamma' Mutation amplitude schedule. | |
long | mNbTrialRetry |
Number of trials before testing if we are below the given minimum cost. More... | |
REAL | mMinCostRetry |
Cost to reach unless an automatic randomization and retry is done. | |
LSQNumObj | mLSQ |
Least squares object. | |
RefObjOpt | mAutoLSQ |
Option to run automatic least-squares refinements. | |
Protected Attributes inherited from ObjCryst::OptimizationObj | |
RefinableObj | mRefParList |
The refinable par list used during refinement. More... | |
string | mName |
Name of the GlobalOptimization object. | |
string | mSaveFileName |
File name where refinement info is saved (NOT USED so far...) | |
long | mNbTrialPerRun |
Number of trial per run, to be saved/restored in XML output. | |
long | mNbTrial |
Number of trials so far. | |
REAL | mBestCost |
Best value of the cost function so far. | |
long | mBestParSavedSetIndex |
Index of the 'best' saved parameter set. | |
unsigned long | mContext |
The current 'context', in the case the optimization is run in different parallel contexts. | |
map< unsigned long, map< const RefinableObj *, LogLikelihoodStats > > | mvContextObjStats |
Statistics for each context (mutable for dynamic update during optimization) | |
map< const RefinableObj *, DynamicObjWeight > | mvObjWeight |
Weights for each objects in each context (mutable for dynamic update during optimization) | |
std::vector< pair< long, REAL > > | mvSavedParamSet |
List of saved parameter sets. More... | |
bool | mIsOptimizing |
True if a refinement is being done. For multi-threaded environment. | |
bool | mStopAfterCycle |
If true, then stop at the end of the cycle. Used in multi-threaded environment. | |
ObjRegistry< RefinableObj > | mRefinedObjList |
The refined objects. | |
ObjRegistry< RefinableObj > | mRecursiveRefinedObjList |
The refined objects, recursively including all sub-objects. More... | |
RefObjOpt | mXMLAutoSave |
Periodic save of complete environment as an xml file. | |
REAL | mLastOptimTime |
The time elapsed after the last optimization, in seconds. | |
MainTracker | mMainTracker |
MainTracker object to track the evolution of cost functions, likelihood, and individual parameters. More... | |
Base object for Monte-Carlo Global Optimization methods.
The algorithm is quite simple, whith two type of optimizations, either simulated Annealing or Parallel Tempering, the latter being recommanded for most real-world optimizations.
Definition at line 336 of file GlobalOptimObj.h.
ObjCryst::MonteCarloObj::MonteCarloObj | ( | const bool | internalUseOnly | ) |
Constructor.
Using internalUseOnly=true will avoid registering the the object to any registry, and thus (for example) no display will be created, nor will this object be automatically be saved.
Definition at line 433 of file GlobalOptimObj.cpp.
|
virtual |
Prepare mLSQ for least-squares refinement during the global optimization.
useFullPowderPatternProfile | if true, the refinement will use the full profile version of powder patterns, otherwise only the integrated powder pattern will be used (faster). |
Definition at line 2089 of file GlobalOptimObj.cpp.
|
virtual |
Launch optimization for multiple runs of N steps.
nbCycle | the number of runs (cycles) to perform. The structure is randomized at the beginning of each cycle. If nbCycle==-1, this will run indefinitely. The nbCycle parameter is decreased after each run. |
nbSteps | the number of steps to go. This number is modified (decreases!) as the refinement goes on. |
silent | : if true, absolutely no message should be printed (except debugging) |
finalcost | the optimization will stop if overall cost fallse below this value |
maxTime | the optimization will stop after the given number of seconds has been spent optimizing (ignored if <0). |
Implements ObjCryst::OptimizationObj.
Definition at line 576 of file GlobalOptimObj.cpp.
|
protectedvirtual |
Make a random change in the configuration.
This just generates a new configuration with random changes (according to current parameters). The new configuration is not tested in this function vs temperature: this should be done in the OptimizationObj::Optimize() function, which also chooses whether to revert to the previous configuration.
Random moves are made by the objects and not by this function, because the new configuration can be specific (like, for example, permutations between some of the parameters (atoms)).
type | can be used to restrict the move to a given category of parameters. |
Definition at line 2024 of file GlobalOptimObj.cpp.
|
virtual |
Launch optimization (a single run) for N steps.
nbSteps | the number of steps to go. This number is modified (decreases!) as the refinement goes on. |
silent | : if true, absolutely no message should be printed (except debugging) |
finalcost | the optimization will stop if overall cost fallse below this value |
maxTime | the optimization will stop after the given number of seconds has been spent optimizing (ignored if <0). |
Implements ObjCryst::OptimizationObj.
Definition at line 499 of file GlobalOptimObj.cpp.
void ObjCryst::MonteCarloObj::RunParallelTempering | ( | long & | nbSteps, |
const bool | silent = false , |
||
const REAL | finalcost = 0 , |
||
const REAL | maxTime = -1 |
||
) |
Do a single Parallel Tempering run. This is called by Optimize(...) and MultiRunOptimize(), which must also prepare the optimization (PrepareRefParList(), etc..).
Definition at line 1147 of file GlobalOptimObj.cpp.
void ObjCryst::MonteCarloObj::RunSimulatedAnnealing | ( | long & | nbSteps, |
const bool | silent = false , |
||
const REAL | finalcost = 0 , |
||
const REAL | maxTime = -1 |
||
) |
Do a single simulated annealing run. This is called by Optimize(...) and MultiRunOptimize(), which must also prepare the optimization (PrepareRefParList(), etc..).
Definition at line 718 of file GlobalOptimObj.cpp.
void ObjCryst::MonteCarloObj::SetAlgorithmParallTempering | ( | const AnnealingSchedule | scheduleTemp, |
const REAL | tMax, | ||
const REAL | tMin, | ||
const AnnealingSchedule | scheduleMutation = ANNEALING_CONSTANT , |
||
const REAL | mutMax = 16. , |
||
const REAL | mutMin = .125 |
||
) |
Set the refinement method to Parallel Tempering.
The refinement begins at max and finishes at min temperature.
scheduleTemp | temperature schedule |
tMax,tMin | Max and Min temperatures. See AnnealingSchedule. |
scheduleMutation | the mutation schedule. For each new configuration, the variation of each refinable parameter is less than its RefinablePar::GlobalOptimStep(), multiplied by the current mutation amplitude. By default this mutation is equal to 1., but making bigger steps can be a good idea at the beginning of the refinement. Thus you can choose a schedule for the amplitude, exactly like for the temperature. |
mutMax,mutMin | Max and Min mutation amplitudes. |
Definition at line 481 of file GlobalOptimObj.cpp.
void ObjCryst::MonteCarloObj::SetAlgorithmSimulAnnealing | ( | const AnnealingSchedule | scheduleTemp, |
const REAL | tMax, | ||
const REAL | tMin, | ||
const AnnealingSchedule | scheduleMutation = ANNEALING_CONSTANT , |
||
const REAL | mutMax = 16. , |
||
const REAL | mutMin = .125 , |
||
const long | nbTrialRetry = 0 , |
||
const REAL | minCostRetry = 0. |
||
) |
Set the refinement method to simulated Annealing.
Note that Parellel Tempering is more efficient to get out of local minima, so you sould rather use that method.
The refinement begins at max and finishes at min temperature.
scheduleTemp | temperature schedule. See AnnealingSchedule. |
tMax,tMin | Max and Min temperatures. |
scheduleMutation | the mutation schedule. For each new configuration, the variation of each refinable parameter is less than its RefinablePar::GlobalOptimStep(), multiplied by the current mutation amplitude. By default this mutation is equal to 1., but making bigger steps is a good idea at the beginning of the refinement (for higher temperatures). See AnnealingSchedule. See AnnealingSchedule. |
mutMax,mutMin | Max and Min mutation amplitudes. |
minCostRetry,nbTrialRetry | if after nbTrialRetry, the cost function is still above minCostRetry, then start again from a random configuration. No randomization is made if nbTrialRetry <= 0. |
maxNbTrialSinceBest | if more than maxNbTrialSinceBest trials have been made since the best configuration was recorded, then revert to that configuration. This should be large enough to have an ergodic search (the default is never to revert..) |
Definition at line 460 of file GlobalOptimObj.cpp.
|
virtual |
Input in XML format from a stream, restoring the set of refined objects and the associated cost functions.
Note that the corresponding objects must have been loaded in memory before, else shit happens.
Implements ObjCryst::OptimizationObj.
Definition at line 1930 of file GlobalOptimObj.cpp.
|
virtual |
Output a description of the object in XML format to a stream.
This saves the list of refined object and the cost functions, as well as options for the refinement. The refined objects are not saved, so this must be done somewhere else (they must be reloaded before this object).
Implements ObjCryst::OptimizationObj.
Definition at line 1869 of file GlobalOptimObj.cpp.
|
protected |
Method used for the global optimization.
Should be removed when we switch to using several classes for different algorithms.
Definition at line 465 of file GlobalOptimObj.h.
|
protected |
Mutation amplitude.
From .25 to 64. Random moves will have a maximum amplitude equal to this amplitude multiplied by the Global optimization step defined for each RefinablePar. Large amplitude should be used at the beginning of the refinement (high temeratures).
Definition at line 492 of file GlobalOptimObj.h.
|
protected |
Number of trials before testing if we are below the given minimum cost.
If <=0, this will be ignored.
Definition at line 504 of file GlobalOptimObj.h.