00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __freMVNonLinearVNLOptimizerControllerBase_txx
00023 #define __freMVNonLinearVNLOptimizerControllerBase_txx
00024
00025 #include "freMVNonLinearVNLOptimizerControllerBase.h"
00026
00027 namespace FREE
00028 {
00029
00030 template <class TControlledVNLOptimizer>
00031 const char* const
00032 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::cParam_UseCostFunctionGradient = "UseCostFunctionGradient";
00033
00034 template <class TControlledVNLOptimizer>
00035 const char* const
00036 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::cParamDsc_UseCostFunctionGradient = "Indicates if the gradient of the cost function should be used";
00037
00038 template <class TControlledVNLOptimizer>
00039 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00040 MVNonLinearVNLOptimizerControllerBase()
00041 {
00042
00043 this->UpdateControllerID(ControllerID::MVNonLinearVNLOptimizerControllerBase);
00044 this->m_Description = "Base controller for multiple valued vnl optimizers.";
00045 };
00046
00047 template <class TControlledVNLOptimizer>
00048 void
00049 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00050 GenerateProfile(CtrlProfile::ControllerProfile& profile,
00051 const SessionComponentCache* pComponentCache,
00052 bool bRegardOldSetup) const
00053 {
00054 Superclass::GenerateProfile(profile,pComponentCache,bRegardOldSetup);
00055
00056
00057 profile.Parameters().AddParameter(cParam_UseCostFunctionGradient,CtrlProfile::Parameter::PVTBool,cParamDsc_UseCostFunctionGradient,1,"false");
00058 };
00059
00060 template <class TControlledVNLOptimizer>
00061 void
00062 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00063 SetStatisticEntryMainComponent(StatisticEntry& rStatisticEntry,
00064 ComponentType* pMainComponent,
00065 SessionComponentCache* pMainComponentCache,
00066 SessionInfo* pSessionInfo,
00067 StatisticDictionary& rDictionary) const
00068 {
00069 ParameterArrayType parameters = pMainComponent->GetCachedCurrentPosition();
00070 MeasuresType measure = pMainComponent->GetCachedValue();
00071
00072 std::string sName = "Position #";
00073 std::string sIDPath = pMainComponentCache->GetIDPath();
00074 StatisticValueDefinition* pParamEntry = rDictionary.GetValueDefinitionByName(sIDPath,sName+"0");
00075 StatisticValueDefinition* pValueEntry = rDictionary.GetValueDefinitionByName(sIDPath,"OptimizerValue #0");
00076
00077 if (!pParamEntry)
00078 {
00079 pParamEntry = rDictionary.AddValueDefinition(sIDPath,sName+"0", "Optimizer position. Meaning depends on chosen transformation");
00080 for (unsigned int i = 1; i<parameters.Size(); i++)
00081 {
00082 rDictionary.AddValueDefinition(sIDPath,sName+Convert::ToStr(i),"Optimizer position. Meaning depends on chosen transformation");
00083 }
00084 }
00085
00086 if (!pValueEntry)
00087 {
00088 pValueEntry = rDictionary.AddValueDefinition(sIDPath,"OptimizerValue #0", "Current optimizer value; meaning depends on chosen metric");
00089 for (unsigned int i = 1; i<measure.Size(); i++)
00090 {
00091 rDictionary.AddValueDefinition(sIDPath,"OptimizerValue #"+Convert::ToStr(i),"Current optimizer value; meaning depends on chosen metric");
00092 }
00093 }
00094
00095 for (unsigned int i = 0; i<parameters.Size(); i++)
00096 {
00097 rStatisticEntry.AddValue(Convert::ToStr(parameters.GetElement(i)),pParamEntry->GetRefID()+i);
00098 }
00099
00100 for (unsigned int i = 0; i<measure.Size(); i++)
00101 {
00102 rStatisticEntry.AddValue(Convert::ToStr(measure.GetElement(i)),pValueEntry->GetRefID()+i);
00103 }
00104 };
00105
00106 template <class TControlledVNLOptimizer>
00107 typename MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::ParametersType
00108 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00109 GetCurrentPosition(TControlledVNLOptimizer* pOptimizer) const
00110 {
00111 return pOptimizer->GetCachedCurrentPosition();
00112 };
00113
00114 template <class TControlledVNLOptimizer>
00115 typename MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::MeasuresType
00116 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00117 GetCurrentValue(TControlledVNLOptimizer* pOptimizer) const
00118 {
00119 return pOptimizer->GetCachedValue();
00120 };
00121
00122 template <class TControlledVNLOptimizer>
00123 void
00124 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00125 ActualizeMainComponent(ComponentType* pMainComponent,
00126 SessionComponentCache* pComponentCache, SessionInfo* pSessionInfo,
00127 const unsigned int& iActLevel) const
00128 {
00129 Superclass::ActualizeMainComponent(pMainComponent, pComponentCache, pSessionInfo, iActLevel);
00130
00131 bool bUseCostGradient = true;
00132
00133 try
00134 {
00135 SessionAccessor::GetParameterValue(pComponentCache,cParam_UseCostFunctionGradient,bUseCostGradient);
00136 }
00137 catchAllNPassMacro("Error while retrieving parameter values.");
00138
00139 pMainComponent->SetUseCostFunctionGradient(bUseCostGradient);
00140 };
00141
00142 }
00143
00144 #endif