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
9#include <cassert>
10
11namespace 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
76namespace osl
77{
78 namespace eval
79 {
80 namespace ml
81 {
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