Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

vtkAmoebaMinimizer.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkAmoebaMinimizer.h,v $
00005   Language:  C++
00006 
00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even 
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00035 #ifndef __vtkAmoebaMinimizer_h
00036 #define __vtkAmoebaMinimizer_h
00037 
00038 #include "vtkObject.h"
00039 
00040 class VTK_COMMON_EXPORT vtkAmoebaMinimizer : public vtkObject
00041 {
00042 public:
00043   static vtkAmoebaMinimizer *New();
00044   vtkTypeRevisionMacro(vtkAmoebaMinimizer,vtkObject);
00045   void PrintSelf(ostream& os, vtkIndent indent);
00046 
00053   void SetFunction(void (*f)(void *), void *arg);
00054 
00056   void SetFunctionArgDelete(void (*f)(void *));
00057 
00059 
00065   void SetParameterValue(const char *name, double value);
00066   void SetParameterValue(int i, double value);
00068 
00070 
00074   void SetParameterScale(const char *name, double scale);
00075   double GetParameterScale(const char *name);
00076   void SetParameterScale(int i, double scale);
00077   double GetParameterScale(int i) { return this->ParameterScales[i]; };
00079 
00081 
00085   double GetParameterValue(const char *name);
00086   double GetParameterValue(int i) { return this->ParameterValues[i]; };
00088 
00091   const char *GetParameterName(int i) { return this->ParameterNames[i]; };
00092 
00094   int GetNumberOfParameters() { return this->NumberOfParameters; };
00095 
00098   void Initialize();
00099 
00102   virtual void Minimize();
00103 
00106   virtual int Iterate();
00107 
00109 
00110   vtkSetMacro(FunctionValue,double); 
00111   double GetFunctionValue() { return this->FunctionValue; };
00113 
00115 
00116   vtkSetMacro(Tolerance,double);
00117   vtkGetMacro(Tolerance,double);
00119 
00121 
00122   vtkSetMacro(MaxIterations,int);
00123   vtkGetMacro(MaxIterations,int);
00125 
00127 
00129   vtkGetMacro(Iterations,int);
00131 
00133 
00134   vtkGetMacro(FunctionEvaluations,int);
00136 
00139   void EvaluateFunction();
00140 
00141 protected:
00142   vtkAmoebaMinimizer();
00143   ~vtkAmoebaMinimizer();
00144 
00145 //BTX  
00146   void (*Function)(void *);
00147   void (*FunctionArgDelete)(void *);
00148   void *FunctionArg;
00149 //ETX
00150 
00151   int NumberOfParameters;
00152   char **ParameterNames;
00153   double *ParameterValues;
00154   double *ParameterScales;
00155   double FunctionValue;
00156 
00157   double Tolerance;
00158   int MaxIterations;
00159   int Iterations;
00160   int FunctionEvaluations;
00161 
00162 private:
00163 // specific to amoeba simplex minimization 
00164 //BTX
00165   double **AmoebaVertices;
00166   double *AmoebaValues;
00167   double *AmoebaSum;
00168   int AmoebaNStepsNoImprovement;
00169   
00170   void InitializeAmoeba();
00171   void GetAmoebaParameterValues();
00172   void TerminateAmoeba();
00173   double TryAmoeba(double sum[], int high, double fac);
00174   int PerformAmoeba();
00175 //ETX
00176 
00177   vtkAmoebaMinimizer(const vtkAmoebaMinimizer&);  // Not implemented.
00178   void operator=(const vtkAmoebaMinimizer&);  // Not implemented.
00179 };
00180 
00181 #endif