#ifndef LINE_OPTIMIZER_H_ #define LINE_OPTIMIZER_H_ #include #include "sparse_vector.h" #include "error_surface.h" #include "sampler.h" class Weights; struct LineOptimizer { // use MINIMIZE_SCORE for things like TER, WER // MAXIMIZE_SCORE for things like BLEU enum ScoreType { MAXIMIZE_SCORE, MINIMIZE_SCORE }; // merge all the error surfaces together into a global // error surface and find (the middle of) the best segment static double LineOptimize( const std::vector& envs, const LineOptimizer::ScoreType type, float* best_score, const double epsilon = 1.0/65536.0); // return a random vector of length 1 where all dimensions // not listed in dimensions will be 0. static void RandomUnitVector(const std::vector& dimensions, SparseVector* axis, RandomNumberGenerator* rng); // generate a list of directions to optimize; the list will // contain the orthogonal vectors corresponding to the dimensions in // primary and then additional_random_directions directions in those // dimensions as well. All vectors will be length 1. static void CreateOptimizationDirections( const std::vector& primary, int additional_random_directions, RandomNumberGenerator* rng, std::vector >* dirs , bool include_primary=true ); }; #endif