ROOT logo
// $Id: WarmAmoeba.h 2456 2010-10-17 18:31:40Z matevz $

#ifndef Numerica_WarmAmoeba_H
#define Numerica_WarmAmoeba_H

#include <Glasses/Eventor.h>
#include <TVectorF.h>

#include <TRandom.h>

class WarmAmoebaMaster
{
public:
  virtual ~WarmAmoebaMaster() {}
  virtual Float_t	Foon(const TVectorF& x) = 0;
  virtual TVectorF*	InitialState(TRandom& rnd) = 0;		// Amoeba deletes it
  virtual TVectorF*	InitialPerturbations(TRandom& rnd) = 0; // Amoeba deletes it
  virtual void		SetState(const TVectorF& x) = 0;
  virtual ZMIR*		S_SetState(const TVectorF& x) = 0;

  ClassDef(WarmAmoebaMaster,1);
};

class WarmAmoeba : public Eventor
{
private:
  WarmAmoebaMaster* hTrueMaster; //!

  TVectorF*	    m_P;	 //! center + simplex vertices
  TVectorF	    m_Y;	 //! values at center + simplex vertices
  TVectorF	    m_Psum;	 //!
  TVectorF	    m_PBest;	 //! Best parameters

  Float_t	    m_y_best;	 //!
  Int_t		    m_iter;	 //!
  Int_t	  	    m_n;	 //!
  Float_t	    m_T;	 //!
  Float_t	    m_T0;	 //!

  void		_init();
  void		_calc_psum();
  void		_export_algo_values(Operator::Arg* op_arg, bool bestp=false);
  Float_t&	P(Int_t m, Int_t n) { return m_P[m](n); }

protected:
  ZLink<ZGlass>	mWA_Master;	// X{gS} L{}
  TRandom	mRanGen;

  // Low level store

  // Algorithm parameters, exported part
  Int_t		mN;	// dimensions	X{gS} 7 ValOut(-join=>1)
  UInt_t	mSeed;	// 		X{gS} 7 Value(-range=>[0,MAX_ID,1])

  Float_t	mFTol;	// Fractional tolerance	X{gS} 7 Value(-range=>[0,1],join=>1)

  // Set T to T_0 times TFactor:
  Float_t	mTFactor;	// X{gS} 7 Value(-range=>[0,100], join=>1)

  // T_n = T_0(1 - n/NumSteps)^alpha
  Float_t	mAlpha;		// X{gS} 7 Value(-range=>[1e-2,100,1,100])

  Int_t		mMovesPerT;	// X{gS} 7 Value(-range=>[0,1e6,1],-width=>6,-join=>1)
  Int_t		mNumSteps;	// X{gS} 7 Value(-range=>[0,1e6,1],-width=>6)

  Float_t	mT0;	// X{gS} 7 ValOut(-width=>8, -join=>1)
  Float_t	mT;	// X{gS} 7 ValOut(-width=>8, -range=>[0,100])

  Float_t	mYBest;	// Best value reached	 X{gS} 7 ValOut(-join=>1)
  Float_t	mYLast;	// Value after last move X{gS} 7 ValOut()

  // protected methods

  void		InitZStuff();	// Should be called from derived class::PreDance()
  Float_t	Ooze(Int_t ihi, Float_t& yhi, Float_t fac);
  void 		WAMove();

public:
  WarmAmoeba(const Text_t* n="WarmAmoeba", const Text_t* t=0);
  WarmAmoeba(ZGlass* m, const Text_t* n="WarmAmoeba", const Text_t* t=0);
  virtual ~WarmAmoeba();

  virtual Operator::Arg* PreDance(Operator::Arg* op_arg=0);
  virtual void		 PostDance(Operator::Arg* op_arg);

  virtual void	PostBeat(Operator::Arg* op_arg)	 throw(Operator::Exception);

  virtual void Operate(Operator::Arg* op_arg);

#include "WarmAmoeba.h7"
  ClassDef(WarmAmoeba, 1);
}; // endclass WarmAmoeba


#endif
 WarmAmoeba.h:1
 WarmAmoeba.h:2
 WarmAmoeba.h:3
 WarmAmoeba.h:4
 WarmAmoeba.h:5
 WarmAmoeba.h:6
 WarmAmoeba.h:7
 WarmAmoeba.h:8
 WarmAmoeba.h:9
 WarmAmoeba.h:10
 WarmAmoeba.h:11
 WarmAmoeba.h:12
 WarmAmoeba.h:13
 WarmAmoeba.h:14
 WarmAmoeba.h:15
 WarmAmoeba.h:16
 WarmAmoeba.h:17
 WarmAmoeba.h:18
 WarmAmoeba.h:19
 WarmAmoeba.h:20
 WarmAmoeba.h:21
 WarmAmoeba.h:22
 WarmAmoeba.h:23
 WarmAmoeba.h:24
 WarmAmoeba.h:25
 WarmAmoeba.h:26
 WarmAmoeba.h:27
 WarmAmoeba.h:28
 WarmAmoeba.h:29
 WarmAmoeba.h:30
 WarmAmoeba.h:31
 WarmAmoeba.h:32
 WarmAmoeba.h:33
 WarmAmoeba.h:34
 WarmAmoeba.h:35
 WarmAmoeba.h:36
 WarmAmoeba.h:37
 WarmAmoeba.h:38
 WarmAmoeba.h:39
 WarmAmoeba.h:40
 WarmAmoeba.h:41
 WarmAmoeba.h:42
 WarmAmoeba.h:43
 WarmAmoeba.h:44
 WarmAmoeba.h:45
 WarmAmoeba.h:46
 WarmAmoeba.h:47
 WarmAmoeba.h:48
 WarmAmoeba.h:49
 WarmAmoeba.h:50
 WarmAmoeba.h:51
 WarmAmoeba.h:52
 WarmAmoeba.h:53
 WarmAmoeba.h:54
 WarmAmoeba.h:55
 WarmAmoeba.h:56
 WarmAmoeba.h:57
 WarmAmoeba.h:58
 WarmAmoeba.h:59
 WarmAmoeba.h:60
 WarmAmoeba.h:61
 WarmAmoeba.h:62
 WarmAmoeba.h:63
 WarmAmoeba.h:64
 WarmAmoeba.h:65
 WarmAmoeba.h:66
 WarmAmoeba.h:67
 WarmAmoeba.h:68
 WarmAmoeba.h:69
 WarmAmoeba.h:70
 WarmAmoeba.h:71
 WarmAmoeba.h:72
 WarmAmoeba.h:73
 WarmAmoeba.h:74
 WarmAmoeba.h:75
 WarmAmoeba.h:76
 WarmAmoeba.h:77
 WarmAmoeba.h:78
 WarmAmoeba.h:79
 WarmAmoeba.h:80
 WarmAmoeba.h:81
 WarmAmoeba.h:82
 WarmAmoeba.h:83
 WarmAmoeba.h:84
 WarmAmoeba.h:85
 WarmAmoeba.h:86
 WarmAmoeba.h:87
 WarmAmoeba.h:88
 WarmAmoeba.h:89
 WarmAmoeba.h:90
 WarmAmoeba.h:91
 WarmAmoeba.h:92
 WarmAmoeba.h:93
 WarmAmoeba.h:94
 WarmAmoeba.h:95