My Project
eval/pieceStand.h
Go to the documentation of this file.
1 /* pieceStand.h
2  */
3 
4 #ifndef EVAL_ML_PIECESTAND_H
5 #define EVAL_ML_PIECESTAND_H
6 
7 #include "osl/eval/weights.h"
8 #include "osl/eval/minorPiece.h"
10 #include "osl/numEffectState.h"
11 #include "osl/bits/king8Info.h"
12 
13 namespace osl
14 {
15  namespace eval
16  {
17  namespace ml
18  {
19  class PieceStand
20  {
22  public:
23  enum { DIM = osl::Piece::SIZE };
24  PieceStand() { };
25  static void setUp(const Weights &weights,int stage);
26  static MultiInt eval(const NumEffectState &state);
27  template<Player P>
28  static MultiInt evalWithUpdate(const NumEffectState &state,
29  Move moved, MultiInt last_value)
30  {
31  assert(moved.player()==P);
33  if (moved.isDrop())
34  {
35  const int count =
36  state.countPiecesOnStand(P, moved.ptype()) + 1;
37  const MultiInt value =
38  table[Ptype_Table.getIndexMin(moved.ptype()) + count - 1];
39  if(P==BLACK)
40  return last_value - value;
41  else
42  return last_value + value;
43  }
44  else if (captured != PTYPE_EMPTY)
45  {
46  Ptype ptype = unpromote(captured);
47  const int count = state.countPiecesOnStand(P, ptype);
48  const MultiInt value = table[(Ptype_Table.getIndexMin(ptype) + count - 1)];
49  if(P==BLACK)
50  return last_value + value;
51  else
52  return last_value - value;
53  }
54  else
55  return last_value;
56  }
57  };
58 
60  {
62  public:
63  enum { DIM = 21 };
65  static void setUp(const Weights &weights,int stage);
66  static MultiInt eval(int black_count, int white_count);
67  };
68 
70  {
72  public:
73  enum { ONE_DIM = 5625, DIM = ONE_DIM * EvalStages};
75  static void setUp(const Weights &weights);
76  static MultiInt eval(const NumEffectState &state,
77  const CArray<bool, 2> &can_check);
78  static MultiInt evalWithUpdate(
79  const NumEffectState &state,
80  Move moved, const MultiInt &last_value,
81  const CArray<bool, 2> &could_check,
82  const CArray<bool, 2> &can_check);
83  private:
84  static MultiInt sumUp(const CArray<int, 6> &indices,
85  const CArray<MultiInt, 5625> &values);
86  static int index(int rook, int bishop, int gold, int silver,
87  int knight, int lance)
88  {
89  return lance +
90  5 * (knight + 5 * (silver + 5 * (gold + 5 * (3 * bishop + rook))));
91  }
94  };
95 
97  {
98  public:
99  enum { ONE_DIM = 44, DIM = ONE_DIM * EvalStages };
101  static void setUp(const Weights &weights);
102  static void eval(const NumEffectState &state, MultiIntPair& out);
103  template<Player P>
104  static void evalWithUpdateBang(
105  const NumEffectState &state,
106  Move moved, MultiIntPair &last_value_and_out);
107  private:
109  static int index(Player player, Player turn, Ptype ptype, int count)
110  {
111  return Ptype_Table.getIndexMin(ptype) - 18 + count +
112  (turn == player ? 22 : 0);
113  }
114  };
116  {
117  private:
122  static int index(Ptype ptype, Player player, Square king, int count)
123  {
124  const int king_y = (player == BLACK ? king.y() : 10 - king.y());
125  return (king_y - 1) * 40 + Ptype_Table.getIndexMin(ptype) + count;
126  }
127  static int index(int i, Player player, Square king, int count)
128  {
129  const int king_y = (player == BLACK ? king.y() : 10 - king.y());
130  return (king_y - 1) * 7*19 + i*19 + count;
131  }
132  static void updateResult(NumEffectState const& state, MultiInt &result,int i, Ptype ptype, CArray<Square,2> const&kings);
133  public:
135  static void setUp(const Weights &weights);
136  static MultiInt eval(const NumEffectState &state);
137  template<Player P>
139  const NumEffectState &state, Move moved,
140  const MultiInt &last_value);
141  };
142 
144  {
145  public:
146  enum { ONE_DIM = 5625, DIM = ONE_DIM * EvalStages};
147  static void setUp(const Weights &weights);
148  template <Player Defense>
149  static bool canCheck(const NumEffectState &state)
150  {
151  const Player Attack=alt(Defense);
152  const King8Info king(state.Iking8Info(Defense));
153  return (king.dropCandidate() != 0 ||
154  king.hasMoveCandidate<Attack>(state) ||
155  KnightCheck::canCheck<Defense>(state));
156  }
157  };
159  {
160  public:
161  enum { ONE_DIM = 16384, DIM = ONE_DIM * EvalStages };
162  static void setUp(const Weights &weights);
163  static MultiInt eval(const NumEffectState &state);
164  private:
166  };
167  }
168  }
169 }
170 #endif // EVAL_ML_PIECESTAND_H
171 // ;;; Local Variables:
172 // ;;; mode:c++
173 // ;;; c-basic-offset:2
174 // ;;; End:
osl::eval::ml::PieceStandCombinationBoth::table
static CArray< MultiInt, 16384 > table
Definition: eval/pieceStand.h:165
osl::eval::ml::PieceStand
Definition: eval/pieceStand.h:20
osl::Square
Definition: basic_type.h:532
osl::eval::ml::PieceStand::eval
static MultiInt eval(const NumEffectState &state)
Definition: eval_pieceStand.cc:16
osl::eval::ml::NonPawnPieceStand
Definition: eval/pieceStand.h:60
osl::container::QuadInt
Definition: quadInt.h:43
osl::checkmate::King8Info::hasMoveCandidate
bool hasMoveCandidate(NumEffectState const &state) const
Definition: king8Info.h:128
osl::eval::ml::NonPawnPieceStandCombination::DIM
@ DIM
Definition: eval/pieceStand.h:73
osl::container::QuadIntPair
Definition: quadInt.h:155
osl::eval::ml::PieceStandY
Definition: eval/pieceStand.h:116
osl::eval::ml::NonPawnPieceStandTurn::evalWithUpdateBang
static void evalWithUpdateBang(const NumEffectState &state, Move moved, MultiIntPair &last_value_and_out)
Definition: eval_pieceStand.cc:261
osl::eval::ml::PieceStandY::y_defense_table_sum
static CArray< MultiInt, 9 *7 *19 > y_defense_table_sum
Definition: eval/pieceStand.h:121
osl::Piece::SIZE
static const int SIZE
Definition: basic_type.h:794
osl::eval::ml::PieceStandY::y_attack_table
static CArray< MultiInt, 360 > y_attack_table
Definition: eval/pieceStand.h:118
osl::eval::ml::NonPawnPieceStandTurn
Definition: eval/pieceStand.h:97
osl::NumEffectState::Iking8Info
uint64_t Iking8Info(Player king) const
Definition: numEffectState.h:78
osl::eval::ml::PieceStand::DIM
@ DIM
Definition: eval/pieceStand.h:23
osl::alt
constexpr Player alt(Player player)
Definition: basic_type.h:13
evalStagePair.h
eval
weights.h
osl::eval::ml::NonPawnPieceStand::DIM
@ DIM
Definition: eval/pieceStand.h:63
osl::eval::ml::PieceStandCombinationBoth::eval
static MultiInt eval(const NumEffectState &state)
Definition: eval_pieceStand.cc:443
osl::eval::ml::PieceStandY::DIM
@ DIM
Definition: eval/pieceStand.h:134
osl::eval::ml::PieceStandY::setUp
static void setUp(const Weights &weights)
Definition: eval_pieceStand.cc:312
osl::eval::ml::NonPawnPieceStandTurn::NonPawnPieceStandTurn
NonPawnPieceStandTurn()
Definition: eval/pieceStand.h:100
osl::Move
圧縮していない moveの表現 .
Definition: basic_type.h:1052
osl::eval::ml::PieceStand::PieceStand
PieceStand()
Definition: eval/pieceStand.h:24
osl::eval::ml::PieceStandY::y_defense_table
static CArray< MultiInt, 360 > y_defense_table
Definition: eval/pieceStand.h:119
osl::eval::ml::PieceStandY::ONE_DIM
@ ONE_DIM
Definition: eval/pieceStand.h:134
osl::eval::ml::Weights
Definition: weights.h:18
osl::eval::ml::NonPawnPieceStandCombination::sumUp
static MultiInt sumUp(const CArray< int, 6 > &indices, const CArray< MultiInt, 5625 > &values)
Definition: eval_pieceStand.cc:63
osl::eval::ml::PieceStandY::eval
static MultiInt eval(const NumEffectState &state)
Definition: eval_pieceStand.cc:359
osl::eval::ml::NonPawnPieceStandTurn::index
static int index(Player player, Player turn, Ptype ptype, int count)
Definition: eval/pieceStand.h:109
osl::Ptype
Ptype
駒の種類を4ビットでコード化する
Definition: basic_type.h:84
osl::eval::ml::CanCheckNonPawnPieceStandCombination::ONE_DIM
@ ONE_DIM
Definition: eval/pieceStand.h:146
osl::eval::ml::PieceStandY::evalWithUpdate
static MultiInt evalWithUpdate(const NumEffectState &state, Move moved, const MultiInt &last_value)
osl::Ptype_Table
const PtypeTable Ptype_Table
Definition: tables.cc:97
osl::eval::ml::NonPawnPieceStand::table
static CArray< MultiInt, 21 > table
Definition: eval/pieceStand.h:61
osl::eval::ml::NonPawnPieceStandTurn::DIM
@ DIM
Definition: eval/pieceStand.h:99
osl::checkmate::King8Info::dropCandidate
unsigned int dropCandidate() const
0-7 bit 目を返す
Definition: king8Info.h:49
osl::eval::ml::NonPawnPieceStandCombination::evalWithUpdate
static MultiInt evalWithUpdate(const NumEffectState &state, Move moved, const MultiInt &last_value, const CArray< bool, 2 > &could_check, const CArray< bool, 2 > &can_check)
Definition: eval_pieceStand.cc:204
osl::eval::ml::PieceStandCombinationBoth::setUp
static void setUp(const Weights &weights)
Definition: eval_pieceStand.cc:423
osl::eval::ml::NonPawnPieceStandTurn::eval
static void eval(const NumEffectState &state, MultiIntPair &out)
Definition: eval_pieceStand.cc:233
osl::eval::ml::CanCheckNonPawnPieceStandCombination::DIM
@ DIM
Definition: eval/pieceStand.h:146
osl::eval::ml::NonPawnPieceStand::NonPawnPieceStand
NonPawnPieceStand()
Definition: eval/pieceStand.h:64
osl::PtypeTable::getIndexMin
int getIndexMin(Ptype ptype) const
Definition: ptypeTable.h:88
osl::eval::ml::NonPawnPieceStandCombination::eval
static MultiInt eval(const NumEffectState &state, const CArray< bool, 2 > &can_check)
Definition: eval_pieceStand.cc:175
osl::Move::capturePtype
Ptype capturePtype() const
Definition: basic_type.h:1180
osl::Move::isDrop
bool isDrop() const
Definition: basic_type.h:1150
osl::eval::ml::PieceStandY::index
static int index(int i, Player player, Square king, int count)
Definition: eval/pieceStand.h:127
osl::eval::ml::CanCheckNonPawnPieceStandCombination::canCheck
static bool canCheck(const NumEffectState &state)
Definition: eval/pieceStand.h:149
osl::eval::ml::NonPawnPieceStandCombination::ONE_DIM
@ ONE_DIM
Definition: eval/pieceStand.h:73
osl::eval::ml::CanCheckNonPawnPieceStandCombination::setUp
static void setUp(const Weights &weights)
Definition: eval_pieceStand.cc:134
minorPiece.h
osl::eval::ml::PieceStandY::y_attack_table_sum
static CArray< MultiInt, 9 *7 *19 > y_attack_table_sum
Definition: eval/pieceStand.h:120
osl::eval::ml::NonPawnPieceStandCombination::table
static CArray< MultiInt, 5625 > table
Definition: eval/pieceStand.h:92
osl::eval::ml::NonPawnPieceStandTurn::table
static CArray< MultiInt, 44 > table
Definition: eval/pieceStand.h:108
osl::captured
PtypeO captured(PtypeO ptypeO)
unpromoteすると共に,ownerを反転する.
Definition: basic_type.h:264
osl::NumEffectState
利きを持つ局面
Definition: numEffectState.h:34
osl::eval::ml::NonPawnPieceStandCombination
Definition: eval/pieceStand.h:70
osl::eval::ml::PieceStandCombinationBoth::DIM
@ DIM
Definition: eval/pieceStand.h:161
king8Info.h
osl::eval::ml::PieceStand::setUp
static void setUp(const Weights &weights, int stage)
Definition: eval_pieceStand.cc:8
osl::eval::ml::NonPawnPieceStandCombination::check_table
static CArray< MultiInt, 5625 > check_table
Definition: eval/pieceStand.h:93
osl::Square::y
int y() const
将棋としてのY座標を返す.
Definition: basic_type.h:567
osl::eval::ml::CanCheckNonPawnPieceStandCombination
Definition: eval/pieceStand.h:144
osl::eval::ml::NonPawnPieceStandTurn::ONE_DIM
@ ONE_DIM
Definition: eval/pieceStand.h:99
osl::eval::ml::PieceStandY::updateResult
static void updateResult(NumEffectState const &state, MultiInt &result, int i, Ptype ptype, CArray< Square, 2 > const &kings)
Definition: eval_pieceStand.cc:346
osl::Move::ptype
Ptype ptype() const
Definition: basic_type.h:1155
osl::BLACK
@ BLACK
Definition: basic_type.h:9
osl::eval::ml::PieceStandCombinationBoth
Definition: eval/pieceStand.h:159
osl::eval::ml::PieceStandCombinationBoth::ONE_DIM
@ ONE_DIM
Definition: eval/pieceStand.h:161
osl::eval::ml::NonPawnPieceStandCombination::NonPawnPieceStandCombination
NonPawnPieceStandCombination()
Definition: eval/pieceStand.h:74
osl::eval::ml::NonPawnPieceStand::setUp
static void setUp(const Weights &weights, int stage)
Definition: eval_pieceStand.cc:44
osl::eval::ml::NonPawnPieceStand::eval
static MultiInt eval(int black_count, int white_count)
Definition: eval_pieceStand.cc:53
osl::PTYPE_EMPTY
@ PTYPE_EMPTY
Definition: basic_type.h:85
osl::Player
Player
Definition: basic_type.h:8
osl::eval::ml::NonPawnPieceStandCombination::index
static int index(int rook, int bishop, int gold, int silver, int knight, int lance)
Definition: eval/pieceStand.h:86
numEffectState.h
osl::CArray
Definition: container.h:20
osl::eval::ml::NonPawnPieceStandCombination::setUp
static void setUp(const Weights &weights)
Definition: eval_pieceStand.cc:95
osl::eval::ml::PieceStand::evalWithUpdate
static MultiInt evalWithUpdate(const NumEffectState &state, Move moved, MultiInt last_value)
Definition: eval/pieceStand.h:28
osl::eval::ml::PieceStand::table
static CArray< MultiInt, osl::Piece::SIZE > table
Definition: eval/pieceStand.h:21
osl::eval::ml::NonPawnPieceStandTurn::setUp
static void setUp(const Weights &weights)
Definition: eval_pieceStand.cc:223
osl::checkmate::King8Info
敵玉の8近傍の状態を表す.
Definition: king8Info.h:29
osl::SimpleState::countPiecesOnStand
int countPiecesOnStand(Player pl, Ptype ptype) const
持駒の枚数を数える
Definition: simpleState.h:182
osl::eval::ml::PieceStandY::index
static int index(Ptype ptype, Player player, Square king, int count)
Definition: eval/pieceStand.h:122
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::EvalStages
const int EvalStages
Definition: midgame.h:12