2008-05-14 15:00:59 +04:00
# ifndef OPTIMIZER_H
# define OPTIMIZER_H
# include <vector>
# include "FeatureStats.h"
# include "FeatureData.h"
# include "FeatureArray.h"
2008-05-14 16:49:45 +04:00
# include "Scorer.h"
# include "Point.h"
2008-05-14 15:00:59 +04:00
typedef float featurescore ;
using namespace std ;
/**virtual class*/
class Optimizer {
public :
Scorer * scorer ;
FeatureData * FData ;
/**number of lambda parameters*/
unsigned dimension ;
Optimizer ( unsigned d ) : dimension ( d ) , scorer ( NULL ) , FData ( NULL ) { } ;
void SetScorer ( Scorer * S ) ;
void SetFData ( FeatureData * F ) ;
~ Optimizer ( ) {
delete scorer ;
delete FData ;
}
/**Number of sentences in the tuning set*/
unsigned N ;
/**main function that perform an optimization*/
2008-05-14 16:49:45 +04:00
virtual Point run ( const Point & init ) ;
2008-05-14 15:00:59 +04:00
/**given a set of lambdas, get the nbest for each sentence*/
2008-05-14 16:49:45 +04:00
vector < unsigned > Get1bests ( const Point & param ) ;
2008-05-14 15:00:59 +04:00
/**given a set of nbests, get the Statistical score*/
statscore Getstatscore ( vector < unsigned > nbests ) { scorer - > score ( nbests ) ; } ;
/**given a set of lambdas, get the total statistical score*/
2008-05-14 16:49:45 +04:00
statscore Getstatscore ( const Point & param ) { return Getstatscore ( Get1bests ( param ) ) ; } ;
statscore LineOptimize ( const Point & start , Point direction , Point & best ) ; //Get the optimal Lambda and the best score in a particular direction from a given Point
2008-05-14 15:00:59 +04:00
}
using namespace std ;
/**default basic optimizer*/
class SimpleOptimizer : public Optimizer {
private : float eps ;
public :
SimpleOptimizer ( unsigned dim , float _eps ) : Optimizer ( dim ) , eps ( _eps ) { } ;
2008-05-14 16:49:45 +04:00
Point run ( const Point & init ) ;
2008-05-14 15:00:59 +04:00
}
# endif