My Project
pin.h
Go to the documentation of this file.
1 /* pin.h
2  */
3 
4 #ifndef EVAL_ML_PIN_H
5 #define EVAL_ML_PIN_H
6 
7 #include "osl/numEffectState.h"
8 #include "osl/eval/weights.h"
9 #include "osl/eval/midgame.h"
10 #include <cstdlib>
11 namespace osl
12 {
13  namespace eval
14  {
15  namespace ml
16  {
17  class SimplePin
18  {
20  public:
21  SimplePin() { };
22  static void setUp(const Weights &weights);
23  int eval(const NumEffectState &state,
24  PieceMask black_mask, PieceMask white_mask) const;
25  };
26 
27  class Pin
28  {
29  static int index(const Square king,
30  const Piece piece)
31  {
32  return std::abs(piece.square().x() - king.x()) * 17 +
33  (piece.owner() == BLACK ? (king.y() - piece.square().y()) :
34  (piece.square().y() - king.y())) + 8;
35  }
37  public:
38  enum { DIM = (osl::PTYPE_MAX - osl::PTYPE_PIECE_MIN + 1) * 17 * 9};
39  Pin() { };
40  static void setUp(const Weights &weights,int stage);
41  static MultiInt eval(const NumEffectState &state,
42  PieceMask black_mask, PieceMask white_mask);
43  };
44 
46  {
47  public:
48  static MultiInt eval(const NumEffectState &state);
49  private:
50  template <Player Defense>
51  static MultiInt evalOne(const NumEffectState &state);
52  template <Player Defense>
53  static bool pawnAttack(const NumEffectState &state, Piece piece)
54  {
55  const Square up =
57  return (up.isOnBoard() &&
58  (state.hasEffectByPtypeStrict<PAWN>(alt(Defense), up)
59  || (!state.isPawnMaskSet(alt(Defense),
60  piece.square().x())
61  && state.pieceAt(up).isEmpty())));
62  }
63  protected:
67  };
68 
69  class PinPtype : public PinPtypeAll
70  {
71  public:
72  enum { ONE_DIM = 80, DIM = ONE_DIM * EvalStages };
73  static void setUp(const Weights &weights);
74  };
75 
77  {
78  public:
79  enum { ONE_DIM = 560, DIM = ONE_DIM * EvalStages };
80  static void setUp(const Weights &weights);
81  };
82 
84  {
85  public:
86  enum { ONE_DIM = 48, DIM = ONE_DIM * EvalStages };
87  static void setUp(const Weights &weights);
88  };
89 
91  {
92  public:
93  enum {
94  // rook v, rook h, bishop u, bishop d, lance
97  };
98  static void setUp(const Weights &weights);
99  static MultiInt eval(const NumEffectState &state);
100  template <Player King>
101  static MultiInt evalOne(const NumEffectState &state);
103  };
104  }
105  }
106 }
107 #endif // EVAL_ML_PIN_H
108 // ;;; Local Variables:
109 // ;;; mode:c++
110 // ;;; c-basic-offset:2
111 // ;;; End:
osl::SimpleState::pieceAt
const Piece pieceAt(Square sq) const
Definition: simpleState.h:167
osl::PTYPE_PIECE_MIN
@ PTYPE_PIECE_MIN
Definition: basic_type.h:104
osl::Square
Definition: basic_type.h:532
osl::eval::ml::PinPtypePawnAttack::DIM
@ DIM
Definition: pin.h:86
osl::container::QuadInt
Definition: quadInt.h:43
osl::eval::ml::PinPtype::ONE_DIM
@ ONE_DIM
Definition: pin.h:72
osl::eval::ml::SimplePin::eval
int eval(const NumEffectState &state, PieceMask black_mask, PieceMask white_mask) const
Definition: eval_pin.cc:21
osl::eval::ml::Pin::eval
static MultiInt eval(const NumEffectState &state, PieceMask black_mask, PieceMask white_mask)
Definition: eval_pin.cc:58
osl::eval::ml::SimplePin
Definition: pin.h:18
osl::Square::isOnBoard
bool isOnBoard() const
盤面上を表すかどうかの判定. 1<=x() && x()<=9 && 1<=y() && y()<=9 Squareの内部表現に依存する.
Definition: basic_type.h:583
osl::eval::ml::CheckShadowPtype::eval
static MultiInt eval(const NumEffectState &state)
Definition: eval_pin.cc:248
osl::eval::ml::PinPtype::DIM
@ DIM
Definition: pin.h:72
osl::alt
constexpr Player alt(Player player)
Definition: basic_type.h:13
osl::PTYPE_SIZE
const int PTYPE_SIZE
Definition: basic_type.h:107
osl::eval::ml::Pin
Definition: pin.h:28
eval
weights.h
osl::eval::ml::SimplePin::SimplePin
SimplePin()
Definition: pin.h:21
osl::eval::ml::Weights
Definition: weights.h:18
osl::eval::ml::PinPtypeDistance::ONE_DIM
@ ONE_DIM
Definition: pin.h:79
osl::eval::ml::PinPtypeDistance
Definition: pin.h:77
osl::eval::ml::PinPtypeAll::pawn_table
static CArray< MultiInt, 48 > pawn_table
Definition: pin.h:65
osl::DirectionPlayerTraits
Definition: directionTraits.h:242
osl::Piece
駒.
Definition: basic_type.h:788
osl::eval::ml::CheckShadowPtype::table
static CArray< MultiInt, ONE_DIM > table
Definition: pin.h:102
osl::eval::ml::Pin::DIM
@ DIM
Definition: pin.h:38
osl::PTYPE_MAX
@ PTYPE_MAX
Definition: basic_type.h:105
osl::NumEffectState::hasEffectByPtypeStrict
bool hasEffectByPtypeStrict(Player attack, Square target) const
target に ptype の利きがあるか? 成不成を区別
Definition: numEffectState.h:363
osl::eval::ml::PinPtypeAll::evalOne
static MultiInt evalOne(const NumEffectState &state)
midgame.h
osl::eval::ml::PinPtype
Definition: pin.h:70
osl::eval::ml::PinPtypeAll::table
static CArray< MultiInt, 80 > table
Definition: pin.h:64
osl::PAWN
@ PAWN
Definition: basic_type.h:95
osl::eval::ml::Pin::setUp
static void setUp(const Weights &weights, int stage)
Definition: eval_pin.cc:41
osl::eval::ml::CheckShadowPtype::DIM
@ DIM
Definition: pin.h:96
osl::eval::ml::PinPtypePawnAttack::ONE_DIM
@ ONE_DIM
Definition: pin.h:86
osl::Piece::owner
Player owner() const
Definition: basic_type.h:963
osl::eval::ml::PinPtypeAll::pawnAttack
static bool pawnAttack(const NumEffectState &state, Piece piece)
Definition: pin.h:53
osl::eval::ml::CheckShadowPtype::setUp
static void setUp(const Weights &weights)
Definition: eval_pin.cc:196
osl::Square::x
int x() const
将棋としてのX座標を返す.
Definition: basic_type.h:563
osl::NumEffectState
利きを持つ局面
Definition: numEffectState.h:34
osl::eval::ml::SimplePin::setUp
static void setUp(const Weights &weights)
Definition: eval_pin.cc:11
osl::Square::y
int y() const
将棋としてのY座標を返す.
Definition: basic_type.h:567
osl::eval::ml::PinPtype::setUp
static void setUp(const Weights &weights)
Definition: eval_pin.cc:85
osl::eval::ml::Pin::Pin
Pin()
Definition: pin.h:39
osl::Piece::square
const Square square() const
Definition: basic_type.h:832
osl::eval::ml::Pin::table
static CArray2d< MultiInt, PTYPE_SIZE, 17 *9 > table
Definition: pin.h:36
osl::eval::ml::SimplePin::table
static CArray< int, PTYPE_SIZE > table
Definition: pin.h:19
osl::eval::ml::CheckShadowPtype
Definition: pin.h:91
osl::Piece::isEmpty
bool isEmpty() const
Definition: basic_type.h:913
osl::BLACK
@ BLACK
Definition: basic_type.h:9
osl::eval::ml::PinPtypeDistance::DIM
@ DIM
Definition: pin.h:79
osl::eval::ml::CheckShadowPtype::evalOne
static MultiInt evalOne(const NumEffectState &state)
osl::eval::ml::Pin::index
static int index(const Square king, const Piece piece)
Definition: pin.h:29
osl::eval::ml::PinPtypeAll
Definition: pin.h:46
numEffectState.h
osl::eval::ml::PinPtypeAll::distance_table
static CArray< MultiInt, 560 > distance_table
Definition: pin.h:66
osl::CArray< int, PTYPE_SIZE >
osl::eval::ml::PinPtypeDistance::setUp
static void setUp(const Weights &weights)
Definition: eval_pin.cc:95
osl::PieceMask
駒番号のビットセット.
Definition: pieceMask.h:21
osl::SimpleState::isPawnMaskSet
bool isPawnMaskSet(Player player, int x) const
Definition: simpleState.h:146
osl::eval::ml::PinPtypePawnAttack
Definition: pin.h:84
osl::eval::ml::PinPtypePawnAttack::setUp
static void setUp(const Weights &weights)
Definition: eval_pin.cc:105
osl::eval::ml::PinPtypeAll::eval
static MultiInt eval(const NumEffectState &state)
Definition: eval_pin.cc:186
osl
Definition: additionalEffect.h:6
osl::eval::ml::CheckShadowPtype::ONE_DIM
@ ONE_DIM
Definition: pin.h:95
osl::EvalStages
const int EvalStages
Definition: midgame.h:12