My Project
ptypeEval.cc
Go to the documentation of this file.
1 #include "osl/eval/ptypeEval.h"
3 {
4  init();
5 }
7 {
8  const CArray<int, PTYPE_SIZE> values = {
9  0, 0,
13  //
15  //
19  };
20  reset(values);
21 }
23 {
24 }
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 
63 PieceEval::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 
77 PieceEval::eval(const NumEffectState &state)
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 /* ------------------------------------------------------------------------- */
osl::WHITE
@ WHITE
Definition: basic_type.h:10
osl::Piece::SIZE
static const int SIZE
Definition: basic_type.h:794
osl::eval::ml::PieceEval::value
static int value(PtypeO ptypeO)
Definition: ptypeEval.cc:89
osl::Piece::ptypeO
PtypeO ptypeO() const
Definition: basic_type.h:824
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::PTYPEO_MAX
@ PTYPEO_MAX
Definition: basic_type.h:201
osl::Ptype
Ptype
駒の種類を4ビットでコード化する
Definition: basic_type.h:84
osl::eval::ml::Weights::value
int value(size_t index) const
Definition: weights.h:27
osl::Piece
駒.
Definition: basic_type.h:788
osl::eval::PtypeEvalTable::reset
void reset(const CArray< int, PTYPE_SIZE > &values)
Definition: ptypeEval.cc:26
osl::SimpleState::pieceOf
const Piece pieceOf(int num) const
Definition: simpleState.h:76
osl::eval::PtypeEvalTable::init
void init()
Definition: ptypeEval.cc:6
osl::PTYPE_MAX
@ PTYPE_MAX
Definition: basic_type.h:105
osl::eval::Ptype_Eval_Table
const PtypeEvalTable Ptype_Eval_Table
Definition: tables.cc:103
osl::KING
@ KING
Definition: basic_type.h:93
ptypeEval.h
osl::CArray::end
iterator end()
Definition: container.h:65
osl::PTYPE_MIN
@ PTYPE_MIN
Definition: basic_type.h:102
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::CArray::begin
iterator begin()
Definition: container.h:64
osl::isPiece
constexpr bool isPiece(Ptype ptype)
ptypeが空白やEDGEでないかのチェック
Definition: basic_type.h:120
osl::PTYPEO_MIN
@ PTYPEO_MIN
Definition: basic_type.h:200
osl::BLACK
@ BLACK
Definition: basic_type.h:9
osl::eval::PtypeEvalTraits
Definition: ptypeEvalTraits.h:12
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, PTYPE_SIZE >
osl::eval::ml::Weights::dimension
size_t dimension() const
Definition: weights.h:29
osl::unpromote
Ptype unpromote(Ptype ptype)
ptypeがpromote後の型の時に,promote前の型を返す. promoteしていない型の時はそのまま返す
Definition: basic_type.h:157