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"
10
11namespace 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;
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