ITK/Examples/Math/AmoebaOptimization: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
(Deprecate)
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
ITK optimizers are generic classes, which can be used independently of registrationThis example demonstrates use of the itk::AmoebaOptimizer class in optimizing a simple paraboloid function.
{{warning|1=The media wiki content on this page is no longer maintainedThe examples presented on the https://itk.org/Wiki/*  pages likely require ITK version 4.13 or earlier releases.  In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.
}}


Contributed by: Davis Vigneault
[https://itk.org/ITKExamples[ITK Sphinx Examples]]
 
==AmoebaOptimizerExample.cxx==
<source lang="cpp">
 
// Include the Amoeba optimizer and a custom cost function
#include "itkAmoebaOptimizer.h"
#include "includes/itkExampleCostFunction.h"
 
// Typedef the optimizer and cost function, for convenience
typedef itk::AmoebaOptimizer OptimizerType;
typedef itk::ExampleCostFunction  CostType;
 
int main(int argc, char ** argv)
{
 
  // Instantiate the optimizer
  OptimizerType::Pointer optimizer = OptimizerType::New();
 
  // Set properties pertinent to convergence
  optimizer->SetMaximumNumberOfIterations( 100 );
  optimizer->SetParametersConvergenceTolerance( 0.01 );
  optimizer->SetFunctionConvergenceTolerance( 0.01 );
 
  // Instantiate the cost function
  // The cost function is a 2D paraboloid in the x-y plane
  // with the equation f(x,y) = (x+5)^2+(y-7)^2 + 5
  // and a global minimum at (x,y) = (-5, 7)
  CostType::Pointer cost = CostType::New();
 
  // Assign the cost function to the optimizer
  optimizer->SetCostFunction( cost.GetPointer() );
 
  // Set the initial parameters of the cost function
  OptimizerType::ParametersType initial(2);
  initial[0] = 123;
  initial[1] = -97.4;
  optimizer->SetInitialPosition( initial );
 
  // Begin the optimization!
  optimizer->StartOptimization();
 
  // Print out some information about the optimization
  std::cout << "Position: " << optimizer->GetCurrentPosition() << std::endl;
  std::cout << "Value: " << optimizer->GetValue() << std::endl;
 
  // As expected, the position is near to (-5, 7) and the value to 5
  // Position: [-5.003825599641884, 6.998563761340231]
  // Value: 5.00002
  return EXIT_SUCCESS;
 
}
 
 
</source>
 
==ExampleCostFunction.h==
<source lang="cpp">
 
 
#ifndef __itkExampleCostFunction_h
#define __itkExampleCostFunction_h
 
#include "itkSingleValuedCostFunction.h"
 
namespace itk
{
class ExampleCostFunction :
public SingleValuedCostFunction
{
public:
  /** Standard class typedefs. */
  typedef ExampleCostFunction      Self;
  typedef SingleValuedCostFunction Superclass;
  typedef SmartPointer<Self>      Pointer;
  typedef SmartPointer<const Self> ConstPointer;
 
  /** Method for creation through the object factory. */
  itkNewMacro(Self);
 
  /** Run-time type information (and related methods). */
  itkTypeMacro(ExampleCostFunction, SingleValuedCostfunction);
 
  unsigned int GetNumberOfParameters(void) const { return 2; } // itk::CostFunction
 
  MeasureType GetValue(const ParametersType & parameters) const {
    return pow(parameters[0]+5, 2)+pow(parameters[1]-7, 2)+5;
  }
 
  void GetDerivative(const ParametersType & parameters,
                    DerivativeType & derivative ) const {
    throw itk::ExceptionObject( __FILE__, __LINE__, "No derivative is available for this cost function.");
  }
 
protected:
  ExampleCostFunction(){};
  ~ExampleCostFunction(){};
 
private:
  ExampleCostFunction(const Self &); //purposely not implemented
  void operator = (const Self &); //purposely not implemented
};
 
} // end namespace itk
 
#endif
 
</source>
 
 
{{ITKCMakeLists|{{SUBPAGENAME}}}}

Latest revision as of 20:32, 3 June 2019

Warning: The media wiki content on this page is no longer maintained. The examples presented on the https://itk.org/Wiki/* pages likely require ITK version 4.13 or earlier releases. In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.

[ITK Sphinx Examples]