34 for (
size_t i = 0; i < 9; ++i)
38 for (
size_t i = 0; i < 9; ++i)
42 for (
size_t i = 0; i < 9; ++i)
46 for (
size_t i = 0; i < 9; ++i)
55 for (
size_t i = 0; i < ONE_DIM; ++i)
65 for (
size_t i = 0; i < ONE_DIM; ++i)
75 for (
size_t i = 0; i < ONE_DIM; ++i)
85 for (
size_t i = 0; i < ONE_DIM; ++i)
94 for (
size_t i = 0; i < ONE_DIM; ++i)
101template <
int Sign>
inline
104 bool promoted,
int vertical,
int horizontal,
108 if(promoted) offset=9;
113 value += (xkingx_table[indexXKingX<Sign>(position, king, vertical,
true)]
114 + xkingx_table[indexXKingX<Sign>(position, king, horizontal,
false)]
115 + sumkingx_table[vertical + horizontal + 17*std::abs(king.
x()-position.
x())]
118 value+= (rook_vertical_table[vertical+offset]+
119 rook_horizontal_table[horizontal+offset] +
120 sum_table[vertical+horizontal+(promoted ? 17 : 0)] +
121 x_table[indexX(position, promoted, vertical,
true)] +
122 x_table[indexX(position, promoted, horizontal,
false)] +
123 y_table[indexY<Sign>(position, promoted, vertical,
true)] +
124 y_table[indexY<Sign>(position, promoted, horizontal,
false)]);
129 value -= (xkingx_table[indexXKingX<Sign>(position, king, vertical,
true)]
130 + xkingx_table[indexXKingX<Sign>(position, king, horizontal,
false)]
131 + sumkingx_table[vertical + horizontal + 17*std::abs(king.
x()-position.
x())]
134 value-= (rook_vertical_table[vertical+offset]+
135 rook_horizontal_table[horizontal+offset] +
136 sum_table[vertical+horizontal+(promoted ? 17 : 0)] +
137 x_table[indexX(position, promoted, vertical,
true)] +
138 x_table[indexX(position, promoted, horizontal,
false)] +
139 y_table[indexY<Sign>(position, promoted, vertical,
true)] +
140 y_table[indexY<Sign>(position, promoted, horizontal,
false)]);
149 i < PtypeTraits<ROOK>::indexLimit;
157 const int vertical = osl::mobility::RookMobility::countVerticalAll<BLACK>(state,i);
158 const int horizontal = osl::mobility::RookMobility::countHorizontalAll<BLACK>(
160 adjust<1>(state, rook.
isPromoted(), vertical, horizontal, rook.
square(), out);
164 const int vertical = osl::mobility::RookMobility::countVerticalAll<WHITE>(state,i);
165 const int horizontal = osl::mobility::RookMobility::countHorizontalAll<WHITE>(
167 adjust<-1>(state, rook.
isPromoted(), vertical, horizontal, rook.
square(), out);
178 for (
size_t i = 0; i < 18; ++i)
182 for (
size_t i = 0; i < 18; ++i)
191 for (
size_t i = 0; i < ONE_DIM; ++i)
198template <
int Sign>
inline
212 value += (bishop_table[mobility1 + mobility2 + count] +
213 each_table[mobility1 + each_offset] +
214 each_table[mobility2 + each_offset]);
218 value -= (bishop_table[mobility1 + mobility2 + count] +
219 each_table[mobility1 + each_offset] +
220 each_table[mobility2 + each_offset]);
229 i < PtypeTraits<BISHOP>::indexLimit;
237 const int mobility1 =
238 mobility::BishopMobility::countAllDir<BLACK, UL>(state, bishop) +
239 mobility::BishopMobility::countAllDir<BLACK, DR>(state, bishop);
240 const int mobility2 =
241 mobility::BishopMobility::countAllDir<BLACK, UR>(state, bishop) +
242 mobility::BishopMobility::countAllDir<BLACK, DL>(state, bishop);
243 adjust<1>(bishop.
isPromoted(), mobility1, mobility2, out);
247 const int mobility1 =
248 mobility::BishopMobility::countAllDir<WHITE, UL>(state, bishop) +
249 mobility::BishopMobility::countAllDir<WHITE, DR>(state, bishop);
250 const int mobility2 =
251 mobility::BishopMobility::countAllDir<WHITE, UR>(state, bishop) +
252 mobility::BishopMobility::countAllDir<WHITE, DL>(state, bishop);
253 adjust<-1>(bishop.
isPromoted(), mobility1, mobility2, out);
263 for (
size_t i = 0; i < 9; ++i)
265 lance_table[i][stage] = weights.
value(i);
269template <
int Sign>
inline
284 i < PtypeTraits<LANCE>::indexLimit;
292 const int mobility = osl::mobility::LanceMobility::countAll<BLACK>(
294 adjust<1>(mobility, out);
298 const int mobility = osl::mobility::LanceMobility::countAll<WHITE>(
300 adjust<-1>(mobility, out);
bool isPromoted() const
promoteした駒かどうかをチェックする
const Square square() const
bool pieceIsBlack() const
pieceであることが分かっている時に,更にBlackかどうかをチェックする.
bool isOnBoardNotPromoted() const
promoteしていないOnBoardの駒であることのチェック Lance位しか使い道がない?
const Piece pieceOf(int num) const
Square kingSquare() const
int x() const
将棋としてのX座標を返す.
static void setUp(const Weights &weights)
static void setUp(const Weights &weights, int stage)
static void setUp(const Weights &weights, int stage)
static CArray< MultiInt, 9 > lance_table
static CArray< MultiInt, 34 > sum_table
static CArray< MultiInt, 18 > rook_vertical_table
static CArray< MultiInt, 324 > x_table
static CArray< MultiInt, 324 > y_table
static void eval(const NumEffectState &, MultiInt &out)
static CArray< MultiInt, 17 *9 > sumkingx_table
static CArray< MultiInt, 18 > rook_horizontal_table
static CArray< MultiInt, 9 *2 *5 *9 > xkingx_table
static void adjust(const NumEffectState &, bool promoted, int vertical, int horizontal, Square pos, MultiInt &value)
static void setUp(const Weights &weights)
static void setUp(const Weights &weights)
static void setUp(const Weights &weights)
static void setUp(const Weights &weights)
static void setUp(const Weights &weights)
static void setUp(const Weights &weights, int stage)
CArray< PiecePair::IndexTable, 10 > & x_table
CArray< PiecePair::IndexTable, 10 > & y_table
static void adjust(bool promoted, int mobility1, int mobility2, MultiInt &value)
static CArray< MultiInt, 18 > each_table
static void eval(const NumEffectState &, MultiInt &out)
static CArray< MultiInt, 36 > bishop_table
static void adjust(int index, MultiInt &value)
static void eval(const NumEffectState &, MultiInt &out)
int value(size_t index) const