featureSet.h
Go to the documentation of this file.
00001 /* featureSet.h
00002  */
00003 #ifndef OSL_FEATURESET_H
00004 #define OSL_FEATURESET_H
00005 
00006 #include "osl/rating/range.h"
00007 #include "osl/rating/ratedMoveVector.h"
00008 #include "osl/state/numEffectState.h"
00009 #include "osl/container/moveLogProbVector.h"
00010 #include "osl/container/moveVector.h"
00011 #include "osl/stl/vector.h"
00012 #include <boost/ptr_container/ptr_vector.hpp>
00013 #include <boost/noncopyable.hpp>
00014 #include <string>
00015 #include <iosfwd>
00016 
00017 namespace osl
00018 {
00019   namespace stat
00020   {
00021     class Average;
00022     class Variance;
00023   }
00024   namespace rating
00025   {
00026     class Group;
00027     class Feature;
00028     class RatingEnv;
00029     class CheckmateIfCaptureGroup;
00030     class CaptureGroup;
00031     class SendOffGroup;
00032     class FeatureSet : boost::noncopyable
00033     {
00034       // range は Groupのメンバーにした方が綺麗な気も
00035       boost::ptr_vector<Group> groups;
00036       vector<char> effective_in_check;
00037       vector<Feature*> features;        // acquaintance
00038       vector<range_t> ranges;
00039       vector<double> weights;
00040       vector<int> weightslog10;
00042       int capture_group, checkmate_if_capture_group, sendoff_group;
00043       vector<char> normal_groups;
00045       mutable vector<CArray<stat::Average,8> > frequency;
00046       mutable vector<CArray<stat::Variance,8> > variance_match;
00047       mutable vector<stat::Variance> variance_all;
00048       struct Statistics;
00049       vector<Statistics> statistics;
00050     public:
00051       FeatureSet();
00052       virtual ~FeatureSet();
00053       bool tryLoad(const std::string& input_directory);
00054       void setWeight(size_t feature_id, const double& value);
00055 
00056       const Group& group(size_t group_id) const { return groups[group_id]; }
00057       bool effectiveInCheck(size_t group_id) const { return effective_in_check[group_id]; }
00058       const Feature& feature(size_t feature_id) const { return *features[feature_id]; }
00059       const range_t& range(size_t group) const { return ranges[group]; }
00060       const double& weight(size_t feature_id) const { return weights[feature_id]; }
00061       size_t groupSize() const { return groups.size(); }
00062       size_t featureSize() const { return features.size(); }
00063       const RatedMove makeRate(const NumEffectState& state, bool in_check,
00064                                const RatingEnv& env, Move move) const;
00065       const RatedMove makeRateWithCut(const NumEffectState& state, bool in_check, 
00066                                       const RatingEnv& env, int limit, Move move) const;
00067       const std::string annotate(const NumEffectState& state, 
00068                                  const RatingEnv& env, Move move) const;
00069       void generateRating(const NumEffectState& state, const RatingEnv& env,
00070                           int limit, RatedMoveVector& out, bool in_pv_or_all=true) const;
00071       void generateLogProb(const NumEffectState& state, const RatingEnv& env,
00072                            int limit, MoveLogProbVector& out, bool in_pv_or_all=true) const;
00073       int logProbTakeBack(const NumEffectState& state, const RatingEnv& env, Move) const;
00074       int logProbSeePlus(const NumEffectState& state, const RatingEnv& env, Move) const;
00075       int logProbKingEscape(const NumEffectState& state, const RatingEnv& env, Move) const;
00076 
00077       void showGroup(std::ostream&, size_t group_id) const;
00078       void save(const std::string& output_directory, size_t group_id) const;
00079 
00080       void showStatistics(std::ostream&) const;
00081 
00082       static void normalize(const RatedMoveVector&, MoveLogProbVector& out);
00083       static std::string defaultDirectory();
00084     protected:
00085       void add(Feature *f);
00086       void add(Group *g);
00087       void add(CaptureGroup *g);
00088       void add(SendOffGroup *g);
00089       void add(CheckmateIfCaptureGroup *g);
00090       void addCommon(Group *g);
00091       void addFinished();
00092     private:
00093       const range_t makeRange(size_t group) const;
00094       int rating(const NumEffectState& state, 
00095                  const RatingEnv& env, Move move, size_t group_id) const;
00096     };
00097     
00098     class StandardFeatureSet : public FeatureSet
00099     {
00100     public:
00101       explicit StandardFeatureSet(bool allow_load_failure=false);
00102       static const StandardFeatureSet& instance();
00103       static bool healthCheck();
00104     };
00105 
00107     class CaptureSet : public FeatureSet
00108     {
00109     public:
00110       explicit CaptureSet(bool allow_load_failure=false);
00111     };
00113     class TacticalSet : public FeatureSet
00114     {
00115     public:
00116       explicit TacticalSet(bool allow_load_failure=false);
00117     };
00118   }
00119 }
00120 
00121 #endif /* OSL_FEATURESET_H */
00122 // ;;; Local Variables:
00123 // ;;; mode:c++
00124 // ;;; c-basic-offset:2
00125 // ;;; coding:utf-8
00126 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines