説明を見る。00001
00002
00003 #ifndef OSL_MOVE_PROBABILITY_FEATURESET_H
00004 #define OSL_MOVE_PROBABILITY_FEATURESET_H
00005
00006 #include "osl/move_probability/stateInfo.h"
00007 #include "osl/numEffectState.h"
00008 #include "osl/container/moveLogProbVector.h"
00009 #include <boost/ptr_container/ptr_vector.hpp>
00010 #include <boost/scoped_array.hpp>
00011 #include <vector>
00012
00013 namespace osl
00014 {
00015 namespace move_probability
00016 {
00017 class Feature;
00018 typedef std::pair<double,Move> WeightedMove;
00019 typedef FixedCapacityVector<WeightedMove,Move::MaxUniqMoves> WeightedMoveVector;
00020
00021 class FeatureSet
00022 {
00023 boost::ptr_vector<Feature> features;
00024 std::vector<int> offsets, light_features;
00025 protected:
00026 FeatureSet();
00027 public:
00028 ~FeatureSet();
00029 void pushBack(Feature *, bool light=false);
00030 void addFinished();
00031 int dimension() const { return offsets.back(); }
00032 public:
00033 double matchExp(const StateInfo&, Move, const double *weights) const;
00034 double matchNoExp(const StateInfo&, Move, const double *weights) const;
00035 void generateLogProb(const StateInfo& state,
00036 MoveLogProbVector& out, const double *weights) const;
00037 double matchLight(const StateInfo&, Move, const double *weights) const;
00038
00039 bool load(const char *base_filename, double *weights) const;
00040 bool load_binary(const char *base_filename, double *weights) const;
00041 void showSummary(const double *weights) const;
00042 void analyze(const StateInfo& state, Move move, const double *weights) const;
00043
00044 double generateRating(const StateInfo& state,
00045 WeightedMoveVector& out, const double *weights) const;
00046 static void ratingToLogProb(const WeightedMoveVector& rating,
00047 double sum, MoveLogProbVector& out);
00048 };
00049
00050 class StandardFeatureSet : public FeatureSet
00051 {
00052 static boost::scoped_array<double> weights, tactical_weights;
00053 bool initialized;
00054 public:
00055 StandardFeatureSet();
00056 ~StandardFeatureSet();
00057
00058 static const StandardFeatureSet& instance(bool verbose=false);
00059 static bool healthCheck();
00060 void generateLogProb(const StateInfo& state, MoveLogProbVector& out) const;
00061 void generateLogProb2(const StateInfo& state, MoveLogProbVector& out) const;
00062 void generateLogProb(const StateInfo& state, int limit, MoveLogProbVector& out, bool in_pv) const;
00063 int logProbTakeBack(const StateInfo& state, Move target) const;
00064 int logProbSeePlus(const StateInfo& state, Move target) const;
00065 double matchLight(const StateInfo&, Move) const;
00066 double matchExp(const StateInfo&, Move) const;
00067 double matchNoExp(const StateInfo&, Move) const;
00068 bool setUp(bool verbose=false);
00069 bool ok() const { return initialized; }
00070 private:
00071 int tacticalLogProb(int offset, double sum) const;
00072 };
00073 }
00074 }
00075 #endif
00076
00077
00078
00079