Revision 2c7a1608709e510c64b47c9c7c2c53451fa0d445 authored by abarun on 11 April 2010, 21:42:19 UTC, committed by abarun on 11 April 2010, 21:42:19 UTC
git-svn-id: https://mosesdecoder.svn.sourceforge.net/svnroot/mosesdecoder/branches/josiah@3114 1f5c12ca-751b-0410-a591-d2e778427230
1 parent 8fa4e58
Raw File
SampleAcceptor.h
#pragma once

#include <iostream>
#include <iomanip>
#include <fstream>
#include <vector> 
#include "ScoreProducer.h"
#include "LanguageModel.h"

namespace Josiah {

class TranslationDelta;
  
class SampleAcceptor {
public:
  SampleAcceptor() {}
  virtual ~SampleAcceptor() {}
  virtual TranslationDelta* choose(const std::vector<TranslationDelta*>& deltas);
  void normalize(std::vector<double>& scores); 
  double getRandom() ;
  size_t getSample(const std::vector<double>& scores, double random);
  //scores normalised to give a probability
  virtual void getNormalisedScores(const std::vector<TranslationDelta*>& deltas, std::vector<double>& scores);
  
  
protected:
    void getScores(const std::vector<TranslationDelta*>& deltas, std::vector<double>& scores);
};

class FixedTempAcceptor : public SampleAcceptor {
public:
  FixedTempAcceptor(float temp) {m_temp = temp;}
  virtual ~FixedTempAcceptor() {}
  void SetTemp(float temp) { m_temp = temp;}
  virtual void getNormalisedScores(const std::vector<TranslationDelta*>& deltas, std::vector<double>& scores);
private:
  float m_temp;
};

class RegularAcceptor : public SampleAcceptor {
public:
  RegularAcceptor() {}
  virtual ~RegularAcceptor() {}
};

class GreedyAcceptor : public SampleAcceptor {
public:
  GreedyAcceptor() {}
  virtual ~GreedyAcceptor() {}
  virtual TranslationDelta* choose(const std::vector<TranslationDelta*>& deltas) ;
  size_t maxScore(const std::vector<TranslationDelta*>& deltas);
};
  
class MHAcceptor {
  public:
    MHAcceptor() {}
    ~MHAcceptor() {}
    TranslationDelta* choose(TranslationDelta* curr, TranslationDelta* next);
    void addScoreProducer(Moses::ScoreProducer* sp) {m_scoreProducers.push_back(sp);} 
  void setProposalLMInfo(const std::map <Moses::LanguageModel*, int> & proposal) { m_proposalLMInfo = proposal;}
  void setTargetLMInfo(const std::map <Moses::LanguageModel*, int> & target) { m_targetLMInfo = target;}
  static long mhtotal;
  static long acceptanceCtr;
  private:  
    std::vector <Moses::ScoreProducer*> m_scoreProducers;
  std::map <Moses::LanguageModel*, int> m_targetLMInfo, m_proposalLMInfo;
};
  
class TargetAssigner {
public:
  TargetAssigner(const std::string& name) : m_name(name) {}
  virtual ~TargetAssigner(){}
  size_t virtual getTarget(const std::vector<TranslationDelta*>& deltas, const TranslationDelta* noChangeDelta) = 0;
  std::string m_name;
};

class BestNeighbourTgtAssigner : public TargetAssigner {
public:
  BestNeighbourTgtAssigner() : TargetAssigner("Best") {}
  virtual ~BestNeighbourTgtAssigner(){}
  size_t virtual getTarget(const std::vector<TranslationDelta*>& deltas, const TranslationDelta* noChangeDelta);
};

class ClosestBestNeighbourTgtAssigner : public TargetAssigner {
public:
  ClosestBestNeighbourTgtAssigner(): TargetAssigner("CBN") {}
  virtual ~ClosestBestNeighbourTgtAssigner(){}
  size_t virtual getTarget(const std::vector<TranslationDelta*>& deltas, const TranslationDelta* noChangeDelta);
};

//class ChiangBestNeighbourTgtAssigner : public TargetAssigner {
//  public:
//    ChiangBestNeighbourTgtAssigner(){}
//    virtual ~ChiangBestNeighbourTgtAssigner(){}
//    size_t virtual getTarget(const std::vector<TranslationDelta*>& deltas, const TranslationDelta* noChangeDelta);
//};
  
}
back to top