00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef MITKOPTIMIZERPARAMETERS_H
00019 #define MITKOPTIMIZERPARAMETERS_H
00020
00021 #include <itkArray.h>
00022 #include "MitkRigidRegistrationExports.h"
00023 #include <itkObjectFactory.h>
00024 #include "mitkCommon.h"
00025
00026 namespace mitk {
00027
00042 class MITK_RIGIDREGISTRATION_EXPORT OptimizerParameters : public ::itk::Object
00043 {
00044 public:
00045
00046 mitkClassMacro(OptimizerParameters,::itk::Object);
00047 itkNewMacro(Self);
00048
00052 enum OptimizerType {
00053 EXHAUSTIVEOPTIMIZER = 0,
00054 GRADIENTDESCENTOPTIMIZER = 1,
00055 QUATERNIONRIGIDTRANSFORMGRADIENTDESCENTOPTIMIZER = 2,
00056 LBFGSBOPTIMIZER = 3,
00057 ONEPLUSONEEVOLUTIONARYOPTIMIZER = 4,
00058 POWELLOPTIMIZER = 5,
00059 FRPROPTIMIZER = 6,
00060 REGULARSTEPGRADIENTDESCENTOPTIMIZER = 7,
00061 VERSORTRANSFORMOPTIMIZER = 8,
00062 AMOEBAOPTIMIZER = 9,
00063 CONJUGATEGRADIENTOPTIMIZER = 10,
00064 LBFGSOPTIMIZER = 11,
00065 SPSAOPTIMIZER = 12,
00066 VERSORRIGID3DTRANSFORMOPTIMIZER = 13
00067 };
00068
00072 itkSetMacro( Optimizer, int );
00076 itkGetMacro( Optimizer, int );
00077
00081 itkSetMacro( Dimension, unsigned int );
00082
00086 itkGetMacro( Dimension, unsigned int );
00087
00091 itkSetMacro( Maximize, bool );
00092
00096 itkGetMacro( Maximize, bool );
00097
00101 itkSetMacro( StepLengthExhaustive, float );
00102
00106 itkGetMacro( StepLengthExhaustive, float );
00107
00111 itkSetMacro( NumberOfStepsExhaustive, int );
00112
00116 itkGetMacro( NumberOfStepsExhaustive, int );
00117
00121 itkSetMacro( LearningRateGradientDescent, float );
00122
00126 itkGetMacro( LearningRateGradientDescent, float );
00127
00131 itkSetMacro( NumberOfIterationsGradientDescent, int );
00132
00136 itkGetMacro( NumberOfIterationsGradientDescent, int );
00137
00141 itkSetMacro( LearningRateQuaternionRigidTransformGradientDescent, float );
00142
00146 itkGetMacro( LearningRateQuaternionRigidTransformGradientDescent, float );
00147
00151 itkSetMacro( NumberOfIterationsQuaternionRigidTransformGradientDescent, int );
00152
00156 itkGetMacro( NumberOfIterationsQuaternionRigidTransformGradientDescent, int );
00157
00161 itkSetMacro( GrowthFactorOnePlusOneEvolutionary, float );
00162
00166 itkGetMacro( GrowthFactorOnePlusOneEvolutionary, float );
00167
00171 itkSetMacro( ShrinkFactorOnePlusOneEvolutionary, float );
00172
00176 itkGetMacro( ShrinkFactorOnePlusOneEvolutionary, float );
00177
00181 itkSetMacro( EpsilonOnePlusOneEvolutionary, float );
00182
00186 itkGetMacro( EpsilonOnePlusOneEvolutionary, float );
00187
00191 itkSetMacro( InitialRadiusOnePlusOneEvolutionary, float );
00192
00196 itkGetMacro( InitialRadiusOnePlusOneEvolutionary, float );
00197
00201 itkSetMacro( NumberOfIterationsOnePlusOneEvolutionary, int );
00202
00206 itkGetMacro( NumberOfIterationsOnePlusOneEvolutionary, int );
00207
00211 itkSetMacro( StepLengthPowell, float );
00212
00216 itkGetMacro( StepLengthPowell, float );
00217
00221 itkSetMacro( StepTolerancePowell, float );
00222
00226 itkGetMacro( StepTolerancePowell, float );
00227
00231 itkSetMacro( ValueTolerancePowell, float );
00232
00236 itkGetMacro( ValueTolerancePowell, float );
00237
00241 itkSetMacro( NumberOfIterationsPowell, int );
00242
00246 itkGetMacro( NumberOfIterationsPowell, int );
00247
00251 itkSetMacro( StepLengthFRPR, float );
00252
00256 itkGetMacro( StepLengthFRPR, float );
00257
00261 itkSetMacro( FletchReevesFRPR, bool );
00262
00266 itkGetMacro( FletchReevesFRPR, bool );
00267
00271 itkSetMacro( PolakRibiereFRPR, bool );
00272
00276 itkGetMacro( PolakRibiereFRPR, bool );
00277
00281 itkSetMacro( NumberOfIterationsFRPR, int );
00282
00286 itkGetMacro( NumberOfIterationsFRPR, int );
00287
00291 itkSetMacro( GradientMagnitudeToleranceRegularStepGradientDescent, float );
00292
00296 itkGetMacro( GradientMagnitudeToleranceRegularStepGradientDescent, float );
00297
00301 itkSetMacro( MinimumStepLengthRegularStepGradientDescent, float );
00302
00306 itkGetMacro( MinimumStepLengthRegularStepGradientDescent, float );
00307
00311 itkSetMacro( MaximumStepLengthRegularStepGradientDescent, float );
00312
00316 itkGetMacro( MaximumStepLengthRegularStepGradientDescent, float );
00317
00321 itkSetMacro( NumberOfIterationsRegularStepGradientDescent, int );
00322
00326 itkGetMacro( NumberOfIterationsRegularStepGradientDescent, int );
00327
00331 itkSetMacro( RelaxationFactorRegularStepGradientDescent, double );
00332
00336 itkGetMacro( RelaxationFactorRegularStepGradientDescent, double );
00337
00341 itkSetMacro( GradientMagnitudeToleranceVersorRigid3DTransform, float );
00342
00346 itkGetMacro( GradientMagnitudeToleranceVersorRigid3DTransform, float );
00347
00351 itkSetMacro( MinimumStepLengthVersorRigid3DTransform, float );
00352
00356 itkGetMacro( MinimumStepLengthVersorRigid3DTransform, float );
00357
00361 itkSetMacro( MaximumStepLengthVersorRigid3DTransform, float );
00362
00366 itkGetMacro( MaximumStepLengthVersorRigid3DTransform, float );
00367
00371 itkSetMacro( NumberOfIterationsVersorRigid3DTransform, int );
00372
00376 itkGetMacro( NumberOfIterationsVersorRigid3DTransform, int );
00377
00381 itkSetMacro( GradientMagnitudeToleranceVersorTransform, float );
00382
00386 itkGetMacro( GradientMagnitudeToleranceVersorTransform, float );
00387
00391 itkSetMacro( MinimumStepLengthVersorTransform, float );
00392
00396 itkGetMacro( MinimumStepLengthVersorTransform, float );
00397
00401 itkSetMacro( MaximumStepLengthVersorTransform, float );
00402
00406 itkGetMacro( MaximumStepLengthVersorTransform, float );
00407
00411 itkSetMacro( NumberOfIterationsVersorTransform, int );
00412
00416 itkGetMacro( NumberOfIterationsVersorTransform, int );
00417
00421 void SetSimplexDeltaAmoeba(itk::Array<double> simplexDelta);
00422
00426 itk::Array<double> GetSimplexDeltaAmoeba();
00427
00431 itkSetMacro( ParametersConvergenceToleranceAmoeba, float );
00432
00436 itkGetMacro( ParametersConvergenceToleranceAmoeba, float );
00437
00441 itkSetMacro( FunctionConvergenceToleranceAmoeba, float );
00442
00446 itkGetMacro( FunctionConvergenceToleranceAmoeba, float );
00447
00451 itkSetMacro( NumberOfIterationsAmoeba, int );
00452
00456 itkGetMacro( NumberOfIterationsAmoeba, int );
00457
00458
00459
00463 itkSetMacro( GradientConvergenceToleranceLBFGS, float );
00464
00468 itkGetMacro( GradientConvergenceToleranceLBFGS, float );
00469
00473 itkSetMacro( LineSearchAccuracyLBFGS, float );
00474
00478 itkGetMacro( LineSearchAccuracyLBFGS, float );
00479
00483 itkSetMacro( DefaultStepLengthLBFGS, float );
00484
00488 itkGetMacro( DefaultStepLengthLBFGS, float );
00489
00493 itkSetMacro( TraceOnLBFGS, bool );
00494
00498 itkGetMacro( TraceOnLBFGS, bool );
00499
00503 itkSetMacro( NumberOfIterationsLBFGS, int );
00504
00508 itkGetMacro( NumberOfIterationsLBFGS, int );
00509
00513 itkSetMacro( aSPSA, float );
00514
00518 itkGetMacro( aSPSA, float );
00519
00523 itkSetMacro( ASPSA, float );
00524
00528 itkGetMacro( ASPSA, float );
00529
00533 itkSetMacro( AlphaSPSA, float );
00534
00538 itkGetMacro( AlphaSPSA, float );
00539
00543 itkSetMacro( cSPSA, float );
00544
00548 itkGetMacro( cSPSA, float );
00549
00553 itkSetMacro( GammaSPSA, float );
00554
00558 itkGetMacro( GammaSPSA, float );
00559
00563 itkSetMacro( ToleranceSPSA, float );
00564
00568 itkGetMacro( ToleranceSPSA, float );
00569
00573 itkSetMacro( StateOfConvergenceDecayRateSPSA, float );
00574
00578 itkGetMacro( StateOfConvergenceDecayRateSPSA, float );
00579
00583 itkSetMacro( MinimumNumberOfIterationsSPSA, int );
00584
00588 itkGetMacro( MinimumNumberOfIterationsSPSA, int );
00589
00593 itkSetMacro( NumberOfPerturbationsSPSA, int );
00594
00598 itkGetMacro( NumberOfPerturbationsSPSA, int );
00599
00603 itkSetMacro( NumberOfIterationsSPSA, int );
00604
00608 itkGetMacro( NumberOfIterationsSPSA, int );
00609
00610 protected:
00611 OptimizerParameters();
00612 ~OptimizerParameters(){};
00613
00614
00615 int m_Optimizer;
00616 unsigned int m_Dimension;
00617 bool m_Maximize;
00618
00619
00620 float m_StepLengthExhaustive;
00621 int m_NumberOfStepsExhaustive;
00622
00623
00624 float m_LearningRateGradientDescent;
00625 int m_NumberOfIterationsGradientDescent;
00626
00627
00628 float m_LearningRateQuaternionRigidTransformGradientDescent;
00629 int m_NumberOfIterationsQuaternionRigidTransformGradientDescent;
00630
00631
00632
00633
00634 float m_GrowthFactorOnePlusOneEvolutionary;
00635 float m_ShrinkFactorOnePlusOneEvolutionary;
00636 float m_EpsilonOnePlusOneEvolutionary;
00637 float m_InitialRadiusOnePlusOneEvolutionary;
00638 int m_NumberOfIterationsOnePlusOneEvolutionary;
00639
00640
00641 float m_StepLengthPowell;
00642 float m_StepTolerancePowell;
00643 float m_ValueTolerancePowell;
00644 int m_NumberOfIterationsPowell;
00645
00646
00647 float m_StepLengthFRPR;
00648 bool m_FletchReevesFRPR;
00649 bool m_PolakRibiereFRPR;
00650 int m_NumberOfIterationsFRPR;
00651
00652
00653 float m_GradientMagnitudeToleranceRegularStepGradientDescent;
00654 float m_MinimumStepLengthRegularStepGradientDescent;
00655 float m_MaximumStepLengthRegularStepGradientDescent;
00656 int m_NumberOfIterationsRegularStepGradientDescent;
00657 double m_RelaxationFactorRegularStepGradientDescent;
00658
00659
00660 float m_GradientMagnitudeToleranceVersorRigid3DTransform;
00661 float m_MinimumStepLengthVersorRigid3DTransform;
00662 float m_MaximumStepLengthVersorRigid3DTransform;
00663 int m_NumberOfIterationsVersorRigid3DTransform;
00664
00665
00666 float m_GradientMagnitudeToleranceVersorTransform;
00667 float m_MinimumStepLengthVersorTransform;
00668 float m_MaximumStepLengthVersorTransform;
00669 int m_NumberOfIterationsVersorTransform;
00670
00671
00672 itk::Array<double> m_SimplexDeltaAmoeba;
00673 float m_ParametersConvergenceToleranceAmoeba;
00674 float m_FunctionConvergenceToleranceAmoeba;
00675 int m_NumberOfIterationsAmoeba;
00676
00677
00678
00679
00680 float m_GradientConvergenceToleranceLBFGS;
00681 float m_LineSearchAccuracyLBFGS;
00682 float m_DefaultStepLengthLBFGS;
00683 bool m_TraceOnLBFGS;
00684 int m_NumberOfIterationsLBFGS;
00685
00686
00687 float m_aSPSA;
00688 float m_ASPSA;
00689 float m_AlphaSPSA;
00690 float m_cSPSA;
00691 float m_GammaSPSA;
00692 float m_ToleranceSPSA;
00693 float m_StateOfConvergenceDecayRateSPSA;
00694 int m_MinimumNumberOfIterationsSPSA;
00695 int m_NumberOfPerturbationsSPSA;
00696 int m_NumberOfIterationsSPSA;
00697
00698 };
00699
00700 }
00701
00702 #endif // MITKOPTIMIZERPARAMETERS_H