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:
圧縮していない moveの表現 .
Definition: basic_type.h:1052
PtypeO ptypeO() const
移動後のPtype, i.e., 成る手だった場合成った後
Definition: basic_type.h:1162
bool isPromotion() const
Definition: basic_type.h:1147
Player player() const
Definition: basic_type.h:1195
PtypeO oldPtypeO() const
移動前のPtypeO, i.e., 成る手だった場合成る前
Definition: basic_type.h:1168
bool isDrop() const
Definition: basic_type.h:1150
bool isPass() const
Definition: basic_type.h:1092
Ptype capturePtype() const
Definition: basic_type.h:1180
PtypeO capturePtypeO() const
Definition: basic_type.h:1185
利きを持つ局面
CArray< int, PTYPEO_SIZE > ptypeO2Val
Definition: ptypeEval.h:18
CArray< int, PTYPEO_SIZE > captureVal
Definition: ptypeEval.h:20
int captureValue(PtypeO ptypeO) const
ownerのptypeOがcaptureされた時の評価値の増減
Definition: ptypeEval.h:50
int diffWithMove(const NumEffectState &, Move move) const
Definition: ptypeEval.h:54
int promoteValue(PtypeO ptypeO) const
ptypeOにpromoteした時の評価値の増減
Definition: ptypeEval.h:43
int value(Ptype ptype) const
ptypeの駒の価値
Definition: ptypeEval.h:36
CArray< int, PTYPEO_SIZE > promoteVal
Definition: ptypeEval.h:19
void reset(const CArray< int, PTYPE_SIZE > &values)
Definition: ptypeEval.cc:26
int value(PtypeO ptypeO) const
先手から見たptypeOの駒の価値
Definition: ptypeEval.h:29
static void setUp(const Weights &weights)
Definition: ptypeEval.cc:63
static CArray< int, PTYPEO_SIZE > table
Definition: ptypeEval.h:84
static int evalWithUpdate(const NumEffectState &, Move moved, int last_value)
Definition: ptypeEval.h:89
static int value(PtypeO ptypeO)
Definition: ptypeEval.cc:89
static int eval(const NumEffectState &state)
Definition: ptypeEval.cc:77
const PtypeEvalTable Ptype_Eval_Table
Definition: tables.cc:103
Ptype
駒の種類を4ビットでコード化する
Definition: basic_type.h:84
@ PTYPE_EMPTY
Definition: basic_type.h:85
bool isValidPtypeO(int ptypeO)
Definition: basic_type.cc:30
Ptype unpromote(Ptype ptype)
ptypeがpromote後の型の時に,promote前の型を返す. promoteしていない型の時はそのまま返す
Definition: basic_type.h:157
bool isValid(Player player)
cast等で作られたplayerが正しいかどうかを返す
Definition: basic_type.cc:9
bool isPromoted(Ptype ptype)
ptypeがpromote後の型かどうかのチェック
Definition: basic_type.h:137
PtypeO
Player + Ptype [-15, 15] PtypeO の O は Owner の O.
Definition: basic_type.h:199
@ PTYPEO_MIN
Definition: basic_type.h:200
constexpr Player alt(Player player)
Definition: basic_type.h:13
PtypeO newPtypeO(Player player, Ptype ptype)
Definition: basic_type.h:211
PtypeO captured(PtypeO ptypeO)
unpromoteすると共に,ownerを反転する.
Definition: basic_type.h:264