All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
rating/featureSet.h
Go to the documentation of this file.
1 /* featureSet.h
2  */
3 #ifndef OSL_FEATURESET_H
4 #define OSL_FEATURESET_H
5 
6 #include "osl/rating/range.h"
11 #include "osl/stl/vector.h"
12 #include <boost/ptr_container/ptr_vector.hpp>
13 #include <boost/noncopyable.hpp>
14 #include <string>
15 #include <iosfwd>
16 
17 namespace osl
18 {
19  namespace stat
20  {
21  class Average;
22  class Variance;
23  }
24  namespace rating
25  {
26  class Group;
27  class Feature;
28  class RatingEnv;
29  class CheckmateIfCaptureGroup;
30  class CaptureGroup;
31  class SendOffGroup;
32  class FeatureSet : boost::noncopyable
33  {
34  // range は Groupのメンバーにした方が綺麗な気も
35  boost::ptr_vector<Group> groups;
36  vector<char> effective_in_check;
37  vector<Feature*> features; // acquaintance
38  vector<range_t> ranges;
39  vector<double> weights;
40  vector<int> weightslog10;
43  vector<char> normal_groups;
45  mutable vector<CArray<stat::Average,8> > frequency;
46  mutable vector<CArray<stat::Variance,8> > variance_match;
47  mutable vector<stat::Variance> variance_all;
48  struct Statistics;
49  vector<Statistics> statistics;
50  public:
51  FeatureSet();
52  virtual ~FeatureSet();
53  bool tryLoad(const std::string& input_directory);
54  void setWeight(size_t feature_id, const double& value);
55 
56  const Group& group(size_t group_id) const { return groups[group_id]; }
57  bool effectiveInCheck(size_t group_id) const { return effective_in_check[group_id]; }
58  const Feature& feature(size_t feature_id) const { return *features[feature_id]; }
59  const range_t& range(size_t group) const { return ranges[group]; }
60  const double& weight(size_t feature_id) const { return weights[feature_id]; }
61  size_t groupSize() const { return groups.size(); }
62  size_t featureSize() const { return features.size(); }
63  const RatedMove makeRate(const NumEffectState& state, bool in_check,
64  const RatingEnv& env, Move move) const;
65  const RatedMove makeRateWithCut(const NumEffectState& state, bool in_check,
66  const RatingEnv& env, int limit, Move move) const;
67  const std::string annotate(const NumEffectState& state,
68  const RatingEnv& env, Move move) const;
69  void generateRating(const NumEffectState& state, const RatingEnv& env,
70  int limit, RatedMoveVector& out, bool in_pv_or_all=true) const;
71  void generateLogProb(const NumEffectState& state, const RatingEnv& env,
72  int limit, MoveLogProbVector& out, bool in_pv_or_all=true) const;
73  int logProbTakeBack(const NumEffectState& state, const RatingEnv& env, Move) const;
74  int logProbSeePlus(const NumEffectState& state, const RatingEnv& env, Move) const;
75  int logProbKingEscape(const NumEffectState& state, const RatingEnv& env, Move) const;
76 
77  void showGroup(std::ostream&, size_t group_id) const;
78  void save(const std::string& output_directory, size_t group_id) const;
79 
80  void showStatistics(std::ostream&) const;
81 
82  static void normalize(const RatedMoveVector&, MoveLogProbVector& out);
83  static std::string defaultDirectory();
84  protected:
85  void add(Feature *f);
86  void add(Group *g);
87  void add(CaptureGroup *g);
88  void add(SendOffGroup *g);
90  void addCommon(Group *g);
91  void addFinished();
92  private:
93  const range_t makeRange(size_t group) const;
94  int rating(const NumEffectState& state,
95  const RatingEnv& env, Move move, size_t group_id) const;
96  };
97 
99  {
100  public:
101  explicit StandardFeatureSet(bool allow_load_failure=false);
102  static const StandardFeatureSet& instance();
103  static bool healthCheck();
104  };
105 
107  class CaptureSet : public FeatureSet
108  {
109  public:
110  explicit CaptureSet(bool allow_load_failure=false);
111  };
113  class TacticalSet : public FeatureSet
114  {
115  public:
116  explicit TacticalSet(bool allow_load_failure=false);
117  };
118  }
119 }
120 
121 #endif /* OSL_FEATURESET_H */
122 // ;;; Local Variables:
123 // ;;; mode:c++
124 // ;;; c-basic-offset:2
125 // ;;; coding:utf-8
126 // ;;; End: