My Project
mobility.h
Go to the documentation of this file.
1 /* mobility.h
2  */
3 
4 #ifndef EVAL_ML_MOBILITY_H
5 #define EVAL_ML_MOBILITY_H
6 
7 #include "osl/eval/weights.h"
8 #include "osl/eval/midgame.h"
9 #include "osl/numEffectState.h"
10 
11 namespace osl
12 {
13  namespace eval
14  {
15  namespace ml
16  {
18  {
19  friend class RookMobility;
20  friend class RookMobilityX;
21  friend class RookMobilityY;
22  friend class RookMobilitySum;
23  friend class RookMobilitySumKingX;
24  friend class RookMobilityXKingX;
25  public:
26  template<int Sign>
27  static void adjust(const NumEffectState&, bool promoted,
28  int vertical, int horizontal,
29  Square pos,
30  MultiInt& value);
31  static void eval(const NumEffectState&, MultiInt& out);
32  private:
33  static int indexX(Square rook, bool promoted,
34  int count, bool vertical)
35  {
36  const int x = (rook.x() > 5 ?
37  10 - rook.x() : rook.x());
38  return x - 1 + 5 * ((promoted ? 1 : 0) +
39  2 * ((vertical ? 1 : 0) + 2 * count));
40  }
41  template <int Sign>
42  static int indexY(Square rook, bool promoted,
43  int count, bool vertical)
44  {
45  const int y = (Sign > 0 ? rook.y() : 10 - rook.y());
46  return y - 1 + 9 * ((promoted ? 1 : 0) +
47  2 * ((vertical ? 1 : 0) + 2 * count));
48  }
49  template <int Sign>
50  static int indexXKingX(Square rook, Square king, int count, bool vertical)
51  {
52  const Square r = (Sign > 0) ? rook : rook.rotate180();
53  const Square k = (Sign > 0) ? king : king.rotate180();
54  const bool flip = r.x() > 5;
55  const int x = (flip ? 10 - r.x() : r.x());
56  const int king_x = (flip ? 10 - k.x() : k.x());
57  return king_x - 1 + 9 * (x - 1 + 5 * ((vertical ? 1 : 0) + 2 * count));
58  }
66  };
67 
69  {
70  public:
71  enum { DIM = 36 };
72  static void setUp(const Weights &weights,int stage);
73  };
74 
76  {
77  public:
78  enum { ONE_DIM = 34, DIM = ONE_DIM * EvalStages };
79  static void setUp(const Weights &weights);
80  };
82  {
83  public:
84  enum { ONE_DIM = 180, DIM = ONE_DIM * EvalStages };
85  static void setUp(const Weights &weights);
86  };
88  {
89  public:
90  enum { ONE_DIM = 324, DIM = ONE_DIM * EvalStages };
91  static void setUp(const Weights &weights);
92  };
94  {
95  public:
96  enum { ONE_DIM = 17 * 9, DIM = ONE_DIM * EvalStages };
97  static void setUp(const Weights &weights);
98  };
100  {
101  public:
102  enum { ONE_DIM = 9 * 2 * 5 * 9, DIM = ONE_DIM * EvalStages };
103  static void setUp(const Weights &weights);
104  };
105 
107  {
108  friend class BishopMobility;
109  friend class BishopMobilityEach;
110  public:
111  template<int Sign>
112  static void adjust(bool promoted, int mobility1, int mobility2,
113  MultiInt& value);
114  static void eval(const NumEffectState&, MultiInt& out);
115  private:
118  };
120  {
121  public:
122  enum { DIM = 36 };
123  static void setUp(const Weights &weights,int stage);
124  };
126  {
127  public:
128  enum { ONE_DIM = 18, DIM = ONE_DIM * EvalStages };
129  static void setUp(const Weights &weights);
130  };
132  {
133  template<int Sign>
134  static void adjust(int index, MultiInt& value);
135  static void eval(const NumEffectState&, MultiInt& out);
136  };
138  {
140  friend struct LanceMobilityAll;
141  public:
142  enum { DIM = 9 };
144  static void setUp(const Weights &weights,int stage);
145  };
146  }
147  }
148 }
149 #endif // EVAL_ML_MOBILITY_H
150 // ;;; Local Variables:
151 // ;;; mode:c++
152 // ;;; c-basic-offset:2
153 // ;;; End:
利きを持つ局面
int y() const
将棋としてのY座標を返す.
Definition: basic_type.h:567
const Square rotate180() const
Definition: basic_type.h:613
int x() const
将棋としてのX座標を返す.
Definition: basic_type.h:563
static void setUp(const Weights &weights)
Definition: mobility.cc:189
static void setUp(const Weights &weights, int stage)
Definition: mobility.cc:176
static void setUp(const Weights &weights, int stage)
Definition: mobility.cc:261
static CArray< MultiInt, 9 > lance_table
Definition: mobility.h:139
static CArray< MultiInt, 34 > sum_table
Definition: mobility.h:61
static int indexX(Square rook, bool promoted, int count, bool vertical)
Definition: mobility.h:33
static CArray< MultiInt, 18 > rook_vertical_table
Definition: mobility.h:59
static int indexXKingX(Square rook, Square king, int count, bool vertical)
Definition: mobility.h:50
static CArray< MultiInt, 324 > x_table
Definition: mobility.h:62
static int indexY(Square rook, bool promoted, int count, bool vertical)
Definition: mobility.h:42
static CArray< MultiInt, 324 > y_table
Definition: mobility.h:63
static void eval(const NumEffectState &, MultiInt &out)
Definition: mobility.cc:145
static CArray< MultiInt, 17 *9 > sumkingx_table
Definition: mobility.h:64
static CArray< MultiInt, 18 > rook_horizontal_table
Definition: mobility.h:60
static CArray< MultiInt, 9 *2 *5 *9 > xkingx_table
Definition: mobility.h:65
static void adjust(const NumEffectState &, bool promoted, int vertical, int horizontal, Square pos, MultiInt &value)
Definition: mobility.cc:103
static void setUp(const Weights &weights)
Definition: mobility.cc:92
static void setUp(const Weights &weights)
Definition: mobility.cc:53
static void setUp(const Weights &weights)
Definition: mobility.cc:83
static void setUp(const Weights &weights)
Definition: mobility.cc:63
static void setUp(const Weights &weights)
Definition: mobility.cc:73
static void setUp(const Weights &weights, int stage)
Definition: mobility.cc:32
const int EvalStages
Definition: midgame.h:12
static void adjust(bool promoted, int mobility1, int mobility2, MultiInt &value)
Definition: mobility.cc:200
static CArray< MultiInt, 18 > each_table
Definition: mobility.h:117
static void eval(const NumEffectState &, MultiInt &out)
Definition: mobility.cc:225
static CArray< MultiInt, 36 > bishop_table
Definition: mobility.h:116
static void adjust(int index, MultiInt &value)
Definition: mobility.cc:271
static void eval(const NumEffectState &, MultiInt &out)
Definition: mobility.cc:280