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
8#include "osl/eval/weights.h"
9#include "osl/eval/midgame.h"
10#include <cstdlib>
11namespace osl
12{
13 namespace eval
14 {
15 namespace ml
16 {
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:
利きを持つ局面
bool hasEffectByPtypeStrict(Player attack, Square target) const
target に ptype の利きがあるか? 成不成を区別
駒番号のビットセット.
Definition pieceMask.h:21
const Square square() const
Definition basic_type.h:832
bool isEmpty() const
Definition basic_type.h:913
Player owner() const
Definition basic_type.h:963
bool isPawnMaskSet(Player player, int x) const
const Piece pieceAt(Square sq) const
int y() const
将棋としてのY座標を返す.
Definition basic_type.h:567
bool isOnBoard() const
盤面上を表すかどうかの判定. 1<=x() && x()<=9 && 1<=y() && y()<=9 Squareの内部表現に依存する.
Definition basic_type.h:583
int x() const
将棋としてのX座標を返す.
Definition basic_type.h:563
static MultiInt evalOne(const NumEffectState &state)
static void setUp(const Weights &weights)
Definition eval_pin.cc:196
static CArray< MultiInt, ONE_DIM > table
Definition pin.h:102
static bool pawnAttack(const NumEffectState &state, Piece piece)
Definition pin.h:53
static CArray< MultiInt, 48 > pawn_table
Definition pin.h:65
static CArray< MultiInt, 560 > distance_table
Definition pin.h:66
static CArray< MultiInt, 80 > table
Definition pin.h:64
static MultiInt eval(const NumEffectState &state)
Definition eval_pin.cc:186
static MultiInt evalOne(const NumEffectState &state)
static void setUp(const Weights &weights)
Definition eval_pin.cc:95
static void setUp(const Weights &weights)
Definition eval_pin.cc:105
static void setUp(const Weights &weights)
Definition eval_pin.cc:85
static CArray2d< MultiInt, PTYPE_SIZE, 17 *9 > table
Definition pin.h:36
static void setUp(const Weights &weights, int stage)
Definition eval_pin.cc:41
static int index(const Square king, const Piece piece)
Definition pin.h:29
static CArray< int, PTYPE_SIZE > table
Definition pin.h:19
static void setUp(const Weights &weights)
Definition eval_pin.cc:11
@ PTYPE_PIECE_MIN
Definition basic_type.h:104
@ PTYPE_MAX
Definition basic_type.h:105
@ PAWN
Definition basic_type.h:95
const int PTYPE_SIZE
Definition basic_type.h:107
@ BLACK
Definition basic_type.h:9
const int EvalStages
Definition midgame.h:12
constexpr Player alt(Player player)
Definition basic_type.h:13