My Project
ptypeEval.cc
Go to the documentation of this file.
25
27{
28 ptypeO2Val.fill(0);
29 std::copy(values.begin(), values.end(), ptypeO2Val.begin()+16);
30 for(int i=PTYPE_MIN;i<=PTYPE_MAX;i++)
31 {
32 Ptype ptype=static_cast<Ptype>(i);
33 ptypeO2Val[newPtypeO(WHITE,ptype)-PTYPEO_MIN]=
34 -ptypeO2Val[newPtypeO(BLACK,ptype)-PTYPEO_MIN];
35 }
36 for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++)
37 {
38 PtypeO ptypeO=static_cast<PtypeO>(i);
39 PtypeO basicPtypeO=unpromote(ptypeO);
40 // note: value() depends on ptypeO2Val
41 promoteVal[i-PTYPEO_MIN]=this->value(ptypeO)-this->value(basicPtypeO);
42 }
43 // EMPTYのcapture
44 captureVal[0]=0;
45 for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++)
46 {
47 PtypeO ptypeO=static_cast<PtypeO>(i);
48 // note: value() depends on ptypeO2Val
49 if(isPiece(ptypeO))
50 captureVal[i-PTYPEO_MIN]=this->value(captured(ptypeO))-
51 this->value(ptypeO);
52 else
53 captureVal[i-PTYPEO_MIN]=0;
54 }
55}
56
57
58
59/* ------------------------------------------------------------------------- */
61
63PieceEval::setUp(const Weights &weights)
64{
65 table.fill(0);
66 // WHITE 0-15, BLACK 16-31
67 for (size_t i = 0; i < weights.dimension(); ++i)
68 {
69 table[i - (size_t)PTYPEO_MIN] = weights.value(i);
70 table[i] = -weights.value(i);
71 }
74}
75
78{
79 int value = 0;
80 for (int i = 0; i < Piece::SIZE; ++i)
81 {
82 const Piece piece = state.pieceOf(i);
83 value += table[piece.ptypeO() - PTYPEO_MIN];
84 }
85 return value;
86}
87
90{
91 return table[ptypeO - PTYPEO_MIN];
92}
93/* ------------------------------------------------------------------------- */
void fill(const T_simple &value=T_simple())
Definition container.h:67
iterator end()
Definition container.h:65
iterator begin()
Definition container.h:64
利きを持つ局面
PtypeO ptypeO() const
Definition basic_type.h:824
static const int SIZE
Definition basic_type.h:794
const Piece pieceOf(int num) const
Definition simpleState.h:76
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 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_MAX
Definition basic_type.h:105
@ KING
Definition basic_type.h:93
@ PTYPE_MIN
Definition basic_type.h:102
Ptype unpromote(Ptype ptype)
ptypeがpromote後の型の時に,promote前の型を返す. promoteしていない型の時はそのまま返す
Definition basic_type.h:157
@ WHITE
Definition basic_type.h:10
@ BLACK
Definition basic_type.h:9
constexpr bool isPiece(Ptype ptype)
ptypeが空白やEDGEでないかのチェック
Definition basic_type.h:120
PtypeO
Player + Ptype [-15, 15] PtypeO の O は Owner の O.
Definition basic_type.h:199
@ PTYPEO_MAX
Definition basic_type.h:201
@ PTYPEO_MIN
Definition basic_type.h:200
PtypeO newPtypeO(Player player, Ptype ptype)
Definition basic_type.h:211
PtypeO captured(PtypeO ptypeO)
unpromoteすると共に,ownerを反転する.
Definition basic_type.h:264
size_t dimension() const
Definition weights.h:29
int value(size_t index) const
Definition weights.h:27