00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00031
#ifndef __vtkAmoebaMinimizer_h
00032
#define __vtkAmoebaMinimizer_h
00033
00034
#include "vtkObject.h"
00035
00036 class VTK_COMMON_EXPORT vtkAmoebaMinimizer :
public vtkObject
00037 {
00038
public:
00039
static vtkAmoebaMinimizer *
New();
00040 vtkTypeRevisionMacro(vtkAmoebaMinimizer,
vtkObject);
00041
void PrintSelf(ostream& os,
vtkIndent indent);
00042
00049
void SetFunction(
void (*f)(
void *),
void *arg);
00050
00052
void SetFunctionArgDelete(
void (*f)(
void *));
00053
00055
00061
void SetParameterValue(
const char *name,
double value);
00062
void SetParameterValue(
int i,
double value);
00064
00066
00070
void SetParameterScale(
const char *name,
double scale);
00071
double GetParameterScale(
const char *name);
00072
void SetParameterScale(
int i,
double scale);
00073 double GetParameterScale(
int i) {
return this->ParameterScales[i]; };
00075
00077
00081
double GetParameterValue(
const char *name);
00082 double GetParameterValue(
int i) {
return this->ParameterValues[i]; };
00084
00087 const char *GetParameterName(
int i) {
return this->ParameterNames[i]; };
00088
00090 int GetNumberOfParameters() {
return this->NumberOfParameters; };
00091
00094
void Initialize();
00095
00098
virtual void Minimize();
00099
00102
virtual int Iterate();
00103
00105
00106 vtkSetMacro(FunctionValue,
double);
00107 double GetFunctionValue() {
return this->FunctionValue; };
00109
00111
00112 vtkSetMacro(Tolerance,
double);
00113 vtkGetMacro(Tolerance,
double);
00115
00117
00118 vtkSetMacro(MaxIterations,
int);
00119 vtkGetMacro(MaxIterations,
int);
00121
00123
00125 vtkGetMacro(Iterations,
int);
00127
00129
00130 vtkGetMacro(FunctionEvaluations,
int);
00132
00135
void EvaluateFunction();
00136
00137
protected:
00138 vtkAmoebaMinimizer();
00139 ~vtkAmoebaMinimizer();
00140
00141
00142 void (*Function)(
void *);
00143 void (*FunctionArgDelete)(
void *);
00144 void *FunctionArg;
00145
00146
00147 int NumberOfParameters;
00148 char **ParameterNames;
00149 double *ParameterValues;
00150 double *ParameterScales;
00151 double FunctionValue;
00152
00153 double Tolerance;
00154 int MaxIterations;
00155 int Iterations;
00156 int FunctionEvaluations;
00157
00158
private:
00159
00160
00161
double **AmoebaVertices;
00162
double *AmoebaValues;
00163
double *AmoebaSum;
00164
int AmoebaNStepsNoImprovement;
00165
00166
void InitializeAmoeba();
00167
void GetAmoebaParameterValues();
00168
void TerminateAmoeba();
00169
double TryAmoeba(
double sum[],
int high,
double fac);
00170
int PerformAmoeba();
00171
00172
00173 vtkAmoebaMinimizer(
const vtkAmoebaMinimizer&);
00174
void operator=(
const vtkAmoebaMinimizer&);
00175 };
00176
00177
#endif