説明を見る。00001
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/container/moveLogProbVector.h"
00009 #include "osl/numEffectState.h"
00010 #include <boost/ptr_container/ptr_vector.hpp>
00011 #include <vector>
00012 #include <string>
00013 #include <iosfwd>
00014
00015 namespace osl
00016 {
00017 namespace stat
00018 {
00019 class Average;
00020 class Variance;
00021 }
00022 namespace rating
00023 {
00024 class Group;
00025 class Feature;
00026 class RatingEnv;
00027 class CheckmateIfCaptureGroup;
00028 class CaptureGroup;
00029 class SendOffGroup;
00030 class FeatureSet
00031 {
00032
00033 FeatureSet(const FeatureSet&) = delete;
00034 FeatureSet& operator=(const FeatureSet&) = delete;
00035
00036 boost::ptr_vector<Group> groups;
00037 std::vector<char> effective_in_check;
00038 std::vector<Feature*> features;
00039 std::vector<range_t> ranges;
00040 std::vector<double> weights;
00041 std::vector<int> weightslog10;
00043 int capture_group, checkmate_if_capture_group, sendoff_group;
00044 std::vector<char> normal_groups;
00046 mutable std::vector<CArray<stat::Average,8> > frequency;
00047 mutable std::vector<CArray<stat::Variance,8> > variance_match;
00048 mutable std::vector<stat::Variance> variance_all;
00049 struct Statistics;
00050 std::vector<Statistics> statistics;
00051 public:
00052 FeatureSet();
00053 virtual ~FeatureSet();
00054 bool tryLoad(const std::string& input_directory);
00055 void setWeight(size_t feature_id, const double& value);
00056
00057 const Group& group(size_t group_id) const { return groups[group_id]; }
00058 bool effectiveInCheck(size_t group_id) const { return effective_in_check[group_id]; }
00059 const Feature& feature(size_t feature_id) const { return *features[feature_id]; }
00060 const range_t& range(size_t group) const { return ranges[group]; }
00061 const double& weight(size_t feature_id) const { return weights[feature_id]; }
00062 size_t groupSize() const { return groups.size(); }
00063 size_t featureSize() const { return features.size(); }
00064 const RatedMove makeRate(const NumEffectState& state, bool in_check,
00065 const RatingEnv& env, Move move) const;
00066 const RatedMove makeRateWithCut(const NumEffectState& state, bool in_check,
00067 const RatingEnv& env, int limit, Move move) const;
00068 const std::string annotate(const NumEffectState& state,
00069 const RatingEnv& env, Move move) const;
00070 void generateRating(const NumEffectState& state, const RatingEnv& env,
00071 int limit, RatedMoveVector& out, bool in_pv_or_all=true) const;
00072 void generateLogProb(const NumEffectState& state, const RatingEnv& env,
00073 int limit, MoveLogProbVector& out, bool in_pv_or_all=true) const;
00074 int logProbTakeBack(const NumEffectState& state, const RatingEnv& env, Move) const;
00075 int logProbSeePlus(const NumEffectState& state, const RatingEnv& env, Move) const;
00076 int logProbKingEscape(const NumEffectState& state, const RatingEnv& env, Move) const;
00077
00078 void showGroup(std::ostream&, size_t group_id) const;
00079 void save(const std::string& output_directory, size_t group_id) const;
00080
00081 void showStatistics(std::ostream&) const;
00082
00083 static void normalize(const RatedMoveVector&, MoveLogProbVector& out);
00084 static std::string defaultDirectory();
00085 protected:
00086 void add(Feature *f);
00087 void add(Group *g);
00088 void add(CaptureGroup *g);
00089 void add(SendOffGroup *g);
00090 void add(CheckmateIfCaptureGroup *g);
00091 void addCommon(Group *g);
00092 void addFinished();
00093 private:
00094 const range_t makeRange(size_t group) const;
00095 int rating(const NumEffectState& state,
00096 const RatingEnv& env, Move move, size_t group_id) const;
00097 };
00098
00099 class StandardFeatureSet : public FeatureSet
00100 {
00101 public:
00102 explicit StandardFeatureSet(bool allow_load_failure=false);
00103 static const StandardFeatureSet& instance();
00104 static bool healthCheck();
00105 };
00106
00108 class CaptureSet : public FeatureSet
00109 {
00110 public:
00111 explicit CaptureSet(bool allow_load_failure=false);
00112 };
00114 class TacticalSet : public FeatureSet
00115 {
00116 public:
00117 explicit TacticalSet(bool allow_load_failure=false);
00118 };
00119 }
00120 }
00121
00122 #endif
00123
00124
00125
00126
00127