My Project
ptypeEval.h
Go to the documentation of this file.
1 /* pieceEval.h
2  */
3 #ifndef OSL_PTYPEEVAL_H
4 #define OSL_PTYPEEVAL_H
5 
7 #include "osl/eval/evalTraits.h"
8 #include "osl/numEffectState.h"
9 #include <cassert>
10 
11 namespace osl
12 {
13  namespace eval
14  {
16  {
17  protected:
21  public:
24  void init();
25  public:
29  int value(PtypeO ptypeO) const{
30  assert(isValidPtypeO(ptypeO));
31  return ptypeO2Val[ptypeO-PTYPEO_MIN];
32  }
36  int value(Ptype ptype) const{
37  assert(isValid(ptype));
38  return ptypeO2Val[ptype-PTYPEO_MIN];
39  }
43  int promoteValue(PtypeO ptypeO) const{
44  assert(isPromoted(ptypeO));
45  return promoteVal[ptypeO-PTYPEO_MIN];
46  }
50  int captureValue(PtypeO ptypeO) const{
51  assert(isValidPtypeO(ptypeO));
52  return captureVal[ptypeO-PTYPEO_MIN];
53  }
54  int diffWithMove(const NumEffectState&, Move move) const {
55  int ret = 0;
56  if (move.capturePtype() != PTYPE_EMPTY)
57  ret += captureValue(move.capturePtypeO());
58  if (move.isPromotion())
59  ret+=promoteValue(move.ptypeO());
60  return ret;
61  }
62 
63  void reset(const CArray<int, PTYPE_SIZE>& values);
64  };
65  extern const PtypeEvalTable Ptype_Eval_Table;
66  } // namespace eval
67 } // namespace osl
68 
69 #endif /* OSL_PTYPEEVAL_H */
70 
71 #ifndef EVAL_ML_PIECEEVAL_H
72 #define EVAL_ML_PIECEEVAL_H
73 
74 #include "osl/eval/weights.h"
75 
76 namespace osl
77 {
78  namespace eval
79  {
80  namespace ml
81  {
82  class PieceEval
83  {
85  public:
86  static void setUp(const Weights &weights);
87  static int eval(const NumEffectState &state);
88  template<Player P>
89  static int evalWithUpdate(const NumEffectState &,
90  Move moved, int last_value)
91  {
92  assert(moved.player()==P);
93  int value = last_value;
94  if (moved.isPass() || moved.isDrop())
95  return last_value;
96  if (moved.isPromotion())
97  {
98  value -= table[moved.oldPtypeO() - PTYPEO_MIN];
99  value += table[moved.ptypeO() - PTYPEO_MIN];
100  }
101  Ptype captured = moved.capturePtype();
102  if (captured != PTYPE_EMPTY)
103  {
106  }
107  return value;
108  }
109  static int value(PtypeO ptypeO);
110  };
111  }
112  }
113 }
114 #endif // EVAL_ML_PIECEEVAL_H
115 // ;;; Local Variables:
116 // ;;; mode:c++
117 // ;;; c-basic-offset:2
118 // ;;; End:
119 
120 
121 // ;;; Local Variables:
122 // ;;; mode:c++
123 // ;;; c-basic-offset:2
124 // ;;; End:
evalTraits.h
osl::eval::PtypeEvalTable::captureVal
CArray< int, PTYPEO_SIZE > captureVal
Definition: ptypeEval.h:20
osl::alt
constexpr Player alt(Player player)
Definition: basic_type.h:13
eval
weights.h
osl::eval::PtypeEvalTable
Definition: ptypeEval.h:16
osl::isValidPtypeO
bool isValidPtypeO(int ptypeO)
Definition: basic_type.cc:30
osl::eval::PtypeEvalTable::value
int value(Ptype ptype) const
ptypeの駒の価値
Definition: ptypeEval.h:36
osl::eval::ml::PieceEval::value
static int value(PtypeO ptypeO)
Definition: ptypeEval.cc:89
osl::Move
圧縮していない moveの表現 .
Definition: basic_type.h:1052
osl::eval::ml::PieceEval::table
static CArray< int, PTYPEO_SIZE > table
Definition: ptypeEval.h:84
osl::eval::ml::Weights
Definition: weights.h:18
osl::eval::PtypeEvalTable::~PtypeEvalTable
~PtypeEvalTable()
Definition: ptypeEval.cc:22
osl::eval::ml::PieceEval::eval
static int eval(const NumEffectState &state)
Definition: ptypeEval.cc:77
osl::newPtypeO
PtypeO newPtypeO(Player player, Ptype ptype)
Definition: basic_type.h:211
osl::Ptype
Ptype
駒の種類を4ビットでコード化する
Definition: basic_type.h:84
osl::eval::PtypeEvalTable::reset
void reset(const CArray< int, PTYPE_SIZE > &values)
Definition: ptypeEval.cc:26
osl::eval::PtypeEvalTable::init
void init()
Definition: ptypeEval.cc:6
osl::eval::Ptype_Eval_Table
const PtypeEvalTable Ptype_Eval_Table
Definition: tables.cc:103
osl::eval::ml::PieceEval
Definition: ptypeEval.h:83
osl::Move::oldPtypeO
PtypeO oldPtypeO() const
移動前のPtypeO, i.e., 成る手だった場合成る前
Definition: basic_type.h:1168
osl::Move::capturePtype
Ptype capturePtype() const
Definition: basic_type.h:1180
osl::eval::PtypeEvalTable::captureValue
int captureValue(PtypeO ptypeO) const
ownerのptypeOがcaptureされた時の評価値の増減
Definition: ptypeEval.h:50
osl::Move::isDrop
bool isDrop() const
Definition: basic_type.h:1150
osl::Move::ptypeO
PtypeO ptypeO() const
移動後のPtype, i.e., 成る手だった場合成った後
Definition: basic_type.h:1162
osl::eval::PtypeEvalTable::ptypeO2Val
CArray< int, PTYPEO_SIZE > ptypeO2Val
Definition: ptypeEval.h:18
osl::isValid
bool isValid(Player player)
cast等で作られたplayerが正しいかどうかを返す
Definition: basic_type.cc:9
osl::eval::PtypeEvalTable::PtypeEvalTable
PtypeEvalTable()
Definition: ptypeEval.cc:2
osl::PtypeO
PtypeO
Player + Ptype [-15, 15] PtypeO の O は Owner の O.
Definition: basic_type.h:199
osl::captured
PtypeO captured(PtypeO ptypeO)
unpromoteすると共に,ownerを反転する.
Definition: basic_type.h:264
osl::NumEffectState
利きを持つ局面
Definition: numEffectState.h:34
osl::isPromoted
bool isPromoted(Ptype ptype)
ptypeがpromote後の型かどうかのチェック
Definition: basic_type.h:137
osl::PTYPEO_MIN
@ PTYPEO_MIN
Definition: basic_type.h:200
osl::Move::capturePtypeO
PtypeO capturePtypeO() const
Definition: basic_type.h:1185
osl::Move::isPass
bool isPass() const
Definition: basic_type.h:1092
osl::eval::PtypeEvalTable::diffWithMove
int diffWithMove(const NumEffectState &, Move move) const
Definition: ptypeEval.h:54
osl::eval::PtypeEvalTable::promoteVal
CArray< int, PTYPEO_SIZE > promoteVal
Definition: ptypeEval.h:19
ptypeEvalTraits.h
osl::PTYPE_EMPTY
@ PTYPE_EMPTY
Definition: basic_type.h:85
numEffectState.h
osl::eval::ml::PieceEval::setUp
static void setUp(const Weights &weights)
Definition: ptypeEval.cc:63
osl::eval::PtypeEvalTable::value
int value(PtypeO ptypeO) const
先手から見たptypeOの駒の価値
Definition: ptypeEval.h:29
osl::CArray< int, PTYPEO_SIZE >
osl::eval::ml::PieceEval::evalWithUpdate
static int evalWithUpdate(const NumEffectState &, Move moved, int last_value)
Definition: ptypeEval.h:89
osl::Move::isPromotion
bool isPromotion() const
Definition: basic_type.h:1147
osl::Move::player
Player player() const
Definition: basic_type.h:1195
osl::unpromote
Ptype unpromote(Ptype ptype)
ptypeがpromote後の型の時に,promote前の型を返す. promoteしていない型の時はそのまま返す
Definition: basic_type.h:157
osl
Definition: additionalEffect.h:6
osl::eval::PtypeEvalTable::promoteValue
int promoteValue(PtypeO ptypeO) const
ptypeOにpromoteした時の評価値の増減
Definition: ptypeEval.h:43