00001
00002
00003 #ifndef _FEATURESET_H
00004 #define _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
00035 boost::ptr_vector<Group> groups;
00036 vector<char> effective_in_check;
00037 vector<Feature*> features;
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 protected:
00082 void add(Feature *f);
00083 void add(Group *g);
00084 void add(CaptureGroup *g);
00085 void add(SendOffGroup *g);
00086 void add(CheckmateIfCaptureGroup *g);
00087 void addCommon(Group *g);
00088 void addFinished();
00089 private:
00090 const range_t makeRange(size_t group) const;
00091 int rating(const NumEffectState& state,
00092 const RatingEnv& env, Move move, size_t group_id) const;
00093 };
00094
00095 class StandardFeatureSet : public FeatureSet
00096 {
00097 public:
00098 explicit StandardFeatureSet(bool allow_load_failure=false);
00099 };
00100
00102 class CaptureSet : public FeatureSet
00103 {
00104 public:
00105 explicit CaptureSet(bool allow_load_failure=false);
00106 };
00108 class TacticalSet : public FeatureSet
00109 {
00110 public:
00111 explicit TacticalSet(bool allow_load_failure=false);
00112 };
00113 }
00114 extern rating::StandardFeatureSet Standard_Feature_Set;
00115 }
00116
00117 #endif
00118
00119
00120
00121