24 583, 493, 491, 467, 1279, 1351,
26 128, 318, 361, 540, 959, 1059
36 "BISHOP_EXCHANGE_SILVER_KING",
38 "KING25_EFFECT_ATTACK",
48 "KING_PIECE_RELATIVE",
58 "PIECE_STAND_COMBINATION",
66 "PROMOTED_MINOR_PIECE",
67 "KING_PIECE_RELATIVE_NOSUPPORT",
69 "NON_PAWN_ATTACKED_PTYPE",
74 "ROOK_PROMOTE_DEFENSE",
81 "BISHOP_SILVER_KNIGHT",
82 "KING25_EFFECT_SUPPORTED",
89 "KING25_EFFECT_DEFENSE",
92 "NON_PAWN_PIECE_STAND",
95 "GOLD_AND_SILVER_NEAR_KING",
100 "MAJOR_CHECK_WITH_CAPTURE",
103 "BISHOP_BISHOP_PIECE",
106 "KING25_EFFECT_COUNT_COMBINATION",
107 "NON_PAWN_ATTACKED_PTYPE_PAIR",
108 "ATTACK_MAJORS_IN_BASE",
122 template <
class Eval>
123 static void setRandomOne()
126 for (
size_t i = 0; i < weights.
dimension(); ++i)
130 Eval::setUp(weights);
132 template <
class Eval>
133 static void setRandomOne(
int stage)
136 for (
size_t i = 0; i < weights.
dimension(); ++i)
140 Eval::setUp(weights, stage);
143 template <
class Eval,
class Reader>
144 static int setUpOneWithDim(Reader& p,
int dim)
148 for (
size_t i = 0; i < weights.
dimension(); ++i)
155 Eval::setUp(weights);
158 template <
class Eval,
class Reader>
159 static int setUpOne(Reader& p)
161 return setUpOneWithDim<Eval>(p, Eval::DIM);
163 template <
class Eval,
class Reader>
164 static int setUpOne(Reader& p,
int stage)
168 for (
size_t i = 0; i < weights.
dimension(); ++i)
175 Eval::setUp(weights,stage);
191 int read() {
return array[cur++]; }
199 doResetWeights(reader);
205 if (initialized_flag == Loaded)
208 std::ifstream is(filename, std::ios_base::binary);
210 if (! reader.hasNext()) {
211 initialized_flag = Zero;
212 std::cerr <<
"file " << filename << std::endl;
215 doResetWeights(reader);
216 return initialized_flag == Loaded;
219 template <
class Reader>
223 size_t read_count = 0;
230 if (! reader.hasNext())
232 int val = reader.read();
238 piece_values[i] = val;
242 Piece_Value.reset(piece_values);
246 for (
size_t i = 0; i < piece_pair_weights.dimension(); ++i)
248 if (! reader.hasNext())
250 int val = reader.read();
251 piece_pair_weights.setValue(i, val);
257 read_count += setUpOne<King25EffectAttack>(reader);
258 read_count += setUpOne<King25EffectYAttack>(reader);
259 read_count += setUpOne<PiecePairKing>(reader);
260 read_count += setUpOne<BishopExchangeSilverKing>(reader);
261 read_count += setUpOne<EnterKingDefense>(reader);
264 read_count += setUpOne<PieceStand>(reader,0);
265 read_count += setUpOne<King25EffectEachBothOpening>(reader);
266 read_count += setUpOne<PawnDrop>(reader,0);
267 read_count += setUpOne<NoPawnOnStand>(reader,0);
268 read_count += setUpOne<GoldRetreat>(reader,0);
269 read_count += setUpOne<SilverRetreat>(reader,0);
270 read_count += setUpOne<KnightAdvance>(reader,0);
271 read_count += setUpOne<AllMajor>(reader,0);
272 read_count += setUpOne<KingXBlocked>(reader,0);
273 read_count += setUpOne<KingXBlockedY>(reader,0);
274 read_count += setUpOne<AllGold>(reader,0);
275 read_count += setUpOne<PtypeX>(reader,0);
276 read_count += setUpOne<PtypeY>(reader,0);
277 read_count += setUpOne<AnagumaEmpty>(reader,0);
278 read_count += setUpOne<NonPawnPieceStand>(reader,0);
279 read_count += setUpOne<King25EffectDefense>(reader,0);
280 read_count += setUpOne<King25EffectYDefense>(reader,0);
281 read_count += setUpOne<RookMobility>(reader,0);
282 read_count += setUpOne<BishopMobility>(reader,0);
283 read_count += setUpOne<LanceMobility>(reader,0);
284 read_count += setUpOne<RookEffect>(reader,0);
285 read_count += setUpOne<BishopEffect>(reader,0);
286 read_count += setUpOne<PawnAdvance>(reader,0);
287 read_count += setUpOne<PawnDropY>(reader,0);
288 read_count += setUpOne<KnightCheck>(reader,0);
291 read_count += setUpOne<PieceStand>(reader,1);
292 read_count += setUpOne<King25EffectEachBothMidgame>(reader);
293 read_count += setUpOne<PawnDrop>(reader,1);
294 read_count += setUpOne<NoPawnOnStand>(reader,1);
295 read_count += setUpOne<GoldRetreat>(reader,1);
296 read_count += setUpOne<SilverRetreat>(reader,1);
297 read_count += setUpOne<KnightAdvance>(reader,1);
298 read_count += setUpOne<AllMajor>(reader,1);
299 read_count += setUpOne<KingXBlocked>(reader,1);
300 read_count += setUpOne<KingXBlockedY>(reader,1);
301 read_count += setUpOne<AllGold>(reader,1);
302 read_count += setUpOne<PtypeX>(reader,1);
303 read_count += setUpOne<PtypeY>(reader,1);
304 read_count += setUpOne<AnagumaEmpty>(reader,1);
305 read_count += setUpOne<NonPawnPieceStand>(reader,1);
306 read_count += setUpOne<King25EffectDefense>(reader,1);
307 read_count += setUpOne<King25EffectYDefense>(reader,1);
308 read_count += setUpOne<RookMobility>(reader,1);
309 read_count += setUpOne<BishopMobility>(reader,1);
310 read_count += setUpOne<LanceMobility>(reader,1);
311 read_count += setUpOne<RookEffect>(reader,1);
312 read_count += setUpOne<BishopEffect>(reader,1);
313 read_count += setUpOne<PawnAdvance>(reader,1);
314 read_count += setUpOne<PawnDropY>(reader,1);
315 read_count += setUpOne<KnightCheck>(reader,1);
319 read_count += setUpOne<PieceStand>(reader,2);
320 read_count += setUpOne<King25EffectEachBothMidgame2>(reader);
321 read_count += setUpOne<PawnDrop>(reader,2);
322 read_count += setUpOne<NoPawnOnStand>(reader,2);
323 read_count += setUpOne<GoldRetreat>(reader,2);
324 read_count += setUpOne<SilverRetreat>(reader,2);
325 read_count += setUpOne<KnightAdvance>(reader,2);
326 read_count += setUpOne<AllMajor>(reader,2);
327 read_count += setUpOne<KingXBlocked>(reader,2);
328 read_count += setUpOne<KingXBlockedY>(reader,2);
329 read_count += setUpOne<AllGold>(reader,2);
330 read_count += setUpOne<PtypeX>(reader,2);
331 read_count += setUpOne<PtypeY>(reader,2);
332 read_count += setUpOne<AnagumaEmpty>(reader,2);
333 read_count += setUpOne<NonPawnPieceStand>(reader,2);
334 read_count += setUpOne<King25EffectDefense>(reader,2);
335 read_count += setUpOne<King25EffectYDefense>(reader,2);
336 read_count += setUpOne<RookMobility>(reader,2);
337 read_count += setUpOne<BishopMobility>(reader,2);
338 read_count += setUpOne<LanceMobility>(reader,2);
339 read_count += setUpOne<RookEffect>(reader,2);
340 read_count += setUpOne<BishopEffect>(reader,2);
341 read_count += setUpOne<PawnAdvance>(reader,2);
342 read_count += setUpOne<PawnDropY>(reader,2);
343 read_count += setUpOne<KnightCheck>(reader,2);
347 read_count += setUpOne<PieceStand>(reader,
EndgameIndex);
348 read_count += setUpOne<King25EffectEachBothEnding>(reader);
350 read_count += setUpOne<NoPawnOnStand>(reader,
EndgameIndex);
351 read_count += setUpOne<GoldRetreat>(reader,
EndgameIndex);
352 read_count += setUpOne<SilverRetreat>(reader,
EndgameIndex);
353 read_count += setUpOne<KnightAdvance>(reader,
EndgameIndex);
355 read_count += setUpOne<KingXBlocked>(reader,
EndgameIndex);
356 read_count += setUpOne<KingXBlockedY>(reader,
EndgameIndex);
360 read_count += setUpOne<AnagumaEmpty>(reader,
EndgameIndex);
361 read_count += setUpOne<NonPawnPieceStand>(reader,
EndgameIndex);
362 read_count += setUpOne<King25EffectDefense>(reader,
EndgameIndex);
363 read_count += setUpOne<King25EffectYDefense>(reader,
EndgameIndex);
364 read_count += setUpOne<RookMobility>(reader,
EndgameIndex);
365 read_count += setUpOne<BishopMobility>(reader,
EndgameIndex);
366 read_count += setUpOne<LanceMobility>(reader,
EndgameIndex);
367 read_count += setUpOne<RookEffect>(reader,
EndgameIndex);
368 read_count += setUpOne<BishopEffect>(reader,
EndgameIndex);
369 read_count += setUpOne<PawnAdvance>(reader,
EndgameIndex);
371 read_count += setUpOne<KnightCheck>(reader,
EndgameIndex);
374 read_count += setUpOne<KingPieceRelative>(reader,0);
375 read_count += setUpOne<KingPieceRelative>(reader,1);
377 read_count += setUpOne<KingPieceRelative>(reader,2);
379 read_count += setUpOne<KingPieceRelative>(reader,
EndgameIndex);
380 read_count += setUpOne<NonPawnPieceStandTurn>(reader);
381 read_count += setUpOne<King25EffectEachXY>(reader);
382 read_count += setUpOne<RookPawnY>(reader);
383 read_count += setUpOne<RookEffectPiece>(reader);
384 read_count += setUpOne<BishopEffectPiece>(reader);
385 read_count += setUpOne<PieceStandY>(reader);
386 read_count += setUpOne<RookEffectPieceKingRelative>(reader);
387 read_count += setUpOne<BishopEffectPieceKingRelative>(reader);
388 read_count += setUpOne<RookPawnYX>(reader);
389 read_count += setUpOne<PawnPtypeOPtypeO>(reader);
390 read_count += setUpOne<PromotedMinorPieces>(reader);
391 read_count += setUpOne<KingPieceRelativeNoSupport>(reader);
392 read_count += setUpOne<NonPawnAttacked>(reader);
393 read_count += setUpOne<PtypeYY>(reader);
394 read_count += setUpOne<PawnPtypeOPtypeOY>(reader);
395 read_count += setUpOne<PawnDropX>(reader);
396 read_count += setUpOne<King3Pieces>(reader);
397 read_count += setUpOne<King3PiecesXY>(reader);
398 read_count += setUpOne<King25EffectEachKXY>(reader);
399 read_count += setUpOne<BishopHead>(reader);
400 read_count += setUpOne<BishopHeadKingRelative>(reader);
401 read_count += setUpOne<KnightCheckY>(reader);
402 read_count += setUpOne<KnightHead>(reader);
403 read_count += setUpOne<RookPromoteDefense>(reader);
404 read_count += setUpOne<PawnDropPawnStand>(reader);
405 read_count += setUpOne<PawnDropPawnStandX>(reader);
406 read_count += setUpOne<PawnDropPawnStandY>(reader);
407 read_count += setUpOne<KnightHeadOppPiecePawnOnStand>(reader);
408 read_count += setUpOne<KingXBothBlocked>(reader);
409 read_count += setUpOne<KingXBothBlockedY>(reader);
410 read_count += setUpOne<KingRookBishop>(reader);
411 read_count += setUpOne<PromotedMinorPiecesY>(reader);
412 read_count += setUpOne<King25EffectSupported>(reader);
413 read_count += setUpOne<King25EffectSupportedY>(reader);
414 read_count += setUpOne<NonPawnAttackedKingRelative>(reader);
415 read_count += setUpOne<NonPawnAttackedPtype>(reader);
416 read_count += setUpOne<PtypeCount>(reader);
417 read_count += setUpOne<KingXBlocked3>(reader);
418 read_count += setUpOne<KingXBlocked3Y>(reader);
419 read_count += setUpOne<PtypeCountXY>(reader);
420 read_count += setUpOne<PtypeCountXYAttack>(reader);
421 read_count += setUpOne<LanceEffectPieceKingRelative>(reader);
422 read_count += setUpOne<KingMobility>(reader);
423 read_count += setUpOne<KingMobilitySum>(reader);
424 read_count += setUpOne<PtypeYPawnY>(reader);
425 read_count += setUpOne<GoldAndSilverNearKing>(reader);
426 read_count += setUpOne<PtypeCombination>(reader);
427 read_count += setUpOne<PieceStandCombinationBoth>(reader);
428 read_count += setUpOne<King25BothSide>(reader);
429 read_count += setUpOne<King25BothSideX>(reader);
430 read_count += setUpOne<King25BothSideY>(reader);
431 read_count += setUpOne<GoldAndSilverNearKingCombination>(reader);
432 read_count += setUpOne<KingMobilityWithRook>(reader);
433 read_count += setUpOne<KingMobilityWithBishop>(reader);
434 read_count += setUpOne<NumPiecesBetweenBishopAndKingSelf>(reader);
435 read_count += setUpOne<NumPiecesBetweenBishopAndKingOpp>(reader);
436 read_count += setUpOne<NumPiecesBetweenBishopAndKingAll>(reader);
437 read_count += setUpOne<King25Effect3>(reader);
438 read_count += setUpOne<SilverHeadPawnKingRelative>(reader);
439 read_count += setUpOne<GoldKnightKingRelative>(reader);
440 read_count += setUpOne<RookMobilitySum>(reader);
441 read_count += setUpOne<RookMobilityX>(reader);
442 read_count += setUpOne<RookMobilityY>(reader);
443 read_count += setUpOne<RookMobilitySumKingX>(reader);
444 read_count += setUpOne<RookMobilityXKingX>(reader);
445 read_count += setUpOne<PinPtype>(reader);
446 read_count += setUpOne<PinPtypeDistance>(reader);
447 read_count += setUpOne<BishopMobilityEach>(reader);
448 read_count += setUpOne<BishopBishopPiece>(reader);
449 read_count += setUpOne<NonPawnPieceStandCombination>(reader);
450 read_count += setUpOne<CanCheckNonPawnPieceStandCombination>(reader);
451 read_count += setUpOne<King25Effect3Y>(reader);
452 read_count += setUpOne<RookRook>(reader);
453 read_count += setUpOne<RookRookPiece>(reader);
454 read_count += setUpOne<PinPtypePawnAttack>(reader);
455 read_count += setUpOne<King25Mobility>(reader);
456 read_count += setUpOne<King25MobilityX>(reader);
457 read_count += setUpOne<King25MobilityY>(reader);
458 read_count += setUpOne<King25EffectCountCombination>(reader);
459 read_count += setUpOne<GoldSideMove>(reader);
460 read_count += setUpOne<King25EffectCountCombinationY>(reader);
461 read_count += setUpOne<RookPromoteDefenseRookH>(reader);
462 read_count += setUpOne<BishopHeadX>(reader);
463 read_count += setUpOne<PawnDropNonDrop>(reader);
464 read_count += setUpOne<PawnStateKingRelative>(reader);
465 read_count += setUpOne<SilverFork>(reader);
466 read_count += setUpOne<BishopRookFork>(reader);
467 read_count += setUpOne<BishopStandFile5>(reader);
468 read_count += setUpOne<KnightFork>(reader);
469 read_count += setUpOne<NonPawnAttackedPtypePair>(reader);
470 read_count += setUpOne<MajorCheckWithCapture>(reader);
471 read_count += setUpOne<SilverAdvance26>(reader);
472 read_count += setUpOne<RookSilverKnight>(reader);
473 read_count += setUpOne<BishopSilverKnight>(reader);
474 read_count += setUpOne<AttackMajorsInBase>(reader);
475 read_count += setUpOne<CheckShadowPtype>(reader);
476 read_count += setUpOne<Promotion37>(reader);
478 initialized_flag = reader.failed() ? Zero : Loaded;
479 if (initialized_flag != Loaded)
481 std::cerr <<
"Failed to load OpenMidEndingEval data " 482 <<
' ' << read_count << std::endl;
489 filename +=
"/data/eval.bin";
495 return setUp(defaultFilename().c_str());
500 : progress(state), use_progress_independent_value_limit(use_limit)
508 i < PtypeTraits<PAWN>::indexLimit; ++i)
520 i < PtypeTraits<ROOK>::indexLimit; ++i)
526 i < PtypeTraits<BISHOP>::indexLimit; ++i)
532 i < PtypeTraits<GOLD>::indexLimit; ++i)
576 King25EffectBoth::countEffectAndPiecesBoth<BLACK>(state,
effect25[
WHITE],
583 King25EffectBoth::countEffectAndPiecesBoth<WHITE>(state, effect25[
BLACK],
584 effect25_supported[
BLACK],
596 white_attack_effect, white_attack_piece);
597 recalculated_value +=
601 white_attack_effect, white_attack_piece);
607 black_attack_supported_piece,
608 white_attack_supported_piece);
612 black_attack_supported_piece,
613 white_attack_supported_piece,
614 state.kingSquare<
BLACK>().y(),
615 state.kingSquare<
WHITE>().y());
620 recalculated_stage_value+=king_rook_bishop[
BLACK]-king_rook_bishop[
WHITE];
633 white_defense_effect, white_defense_piece);
636 black_defense_effect,
638 white_defense_effect, white_defense_piece);
669 CanCheckNonPawnPieceStandCombination::canCheck<BLACK>(state);
671 CanCheckNonPawnPieceStandCombination::canCheck<WHITE>(state);
686 state.effectedMask(BLACK);
689 state.effectedMask(WHITE);
692 state.promotedPieces().getMask<
PAWN>();
695 state.promotedPieces().getMask<
PAWN>();
741 #ifdef USE_TEST_PROGRESS 763 updateSub<BLACK>(new_state,last_move);
765 updateSub<WHITE>(new_state,last_move);
767 template<osl::Player P>
771 assert(last_move.
player()==P);
791 if (captured ==
PAWN)
811 const int y_diff = std::abs(last_move.
to().
y() - opp_king.y());
812 const int x_diff = std::abs(last_move.
to().
x() - opp_king.x());
813 if (y_diff <= 2 && x_diff <= 3)
821 if (base_ptype ==
GOLD || base_ptype ==
SILVER)
825 const int y_diff = std::abs(last_move.
from().
y() - self_king.
y());
826 const int x_diff = std::abs(last_move.
from().
x() - self_king.
x());
827 if (y_diff <= 2 && x_diff <= 3)
833 const int y_diff = std::abs(last_move.
to().
y() - self_king.
y());
834 const int x_diff = std::abs(last_move.
to().
x() - self_king.
x());
835 if (y_diff <= 2 && x_diff <= 3)
841 if (base_ptype ==
KING)
856 pawns[P][last_move.
to().
x() - 1] = last_move.
to().
y();
862 mask.
set(last_move.
to());
870 King25EffectBoth::countEffectAndPiecesBoth<BLACK>(
882 King25EffectBoth::countEffectAndPiecesBoth<WHITE>(
890 #ifdef USE_TEST_PROGRESS 899 PieceStand::evalWithUpdate<P>(new_state, last_move,
901 if (new_state.longEffectChanged<
ROOK>() || last_move.ptype() ==
KING)
906 if (new_state.longEffectChanged<
BISHOP>())
911 else if (last_move.ptype() ==
KING)
915 if (new_state.longEffectChanged<
LANCE>() || last_move.ptype() ==
KING)
921 if (new_state.anyEffectChanged<
KNIGHT>()) {
977 new_state.kingSquare<BLACK>().y(),
978 new_state.kingSquare<WHITE>().y());
985 else if(last_move.ptype() ==
KING){
1000 PiecePairKing::evalWithUpdateBang<P>(new_state, last_move,
1002 pawn_drop = PawnDropBoth::evalWithUpdate<P>(new_state,
1005 ptypex = PtypeX::evalWithUpdate<P>(new_state, last_move,
ptypex);
1006 ptypey = PtypeY::evalWithUpdate<P>(new_state, last_move,
ptypey);
1008 can_check_new[
BLACK] =
1009 CanCheckNonPawnPieceStandCombination::canCheck<BLACK>(new_state);
1010 can_check_new[
WHITE] =
1011 CanCheckNonPawnPieceStandCombination::canCheck<WHITE>(new_state);
1015 piece_stand_combination,
1019 NonPawnPieceStandTurn::evalWithUpdateBang<P>(new_state,
1023 piece_stand_y = PieceStandY::evalWithUpdate<P>(new_state, last_move,
1025 PawnAdvanceAll::evalWithUpdateBang<P>(new_state,
1030 pawn_ptypeo = PawnPtypeOPtypeO::template evalWithUpdate<P>(new_state, last_move,
1037 promoted_minor_piece);
1042 NonPawnAttacked::evalWithUpdateBang<P>(new_state,
1046 NonPawnAttackedPtype::evalWithUpdateBang<P>(
1050 effected_mask_for_attacked[
BLACK] =
1051 new_state.effectedMask(BLACK);
1052 effected_mask[
WHITE] =
1053 effected_mask_for_attacked[
WHITE] =
1054 new_state.effectedMask(WHITE);
1056 effected_mask_for_attacked[
BLACK].selectBit<
PAWN>() &
1057 new_state.promotedPieces().template getMask<PAWN>();
1059 effected_mask_for_attacked[
WHITE].selectBit<
PAWN>() &
1060 new_state.promotedPieces().template getMask<PAWN>();
1061 effected_mask_for_attacked[
BLACK].clearBit<
PAWN>();
1062 effected_mask_for_attacked[
WHITE].clearBit<
PAWN>();
1071 PtypeCount::evalWithUpdateBang<P>(new_state,
1085 if (base_ptype ==
ROOK || last_move.ptype() ==
SILVER ||
1086 last_move.ptype() ==
KNIGHT ||
1089 (last_move.isPromotion() &&
1094 if (base_ptype ==
BISHOP || last_move.ptype() ==
SILVER ||
1095 last_move.ptype() ==
KNIGHT ||
1098 (last_move.isPromotion() &&
1105 #ifdef USE_TEST_PROGRESS 1135 King25EffectBoth::countEffectAndPiecesBoth<BLACK>(state,
effect25[
WHITE],
1142 King25EffectBoth::countEffectAndPiecesBoth<WHITE>(state, effect25[
BLACK],
1143 effect25_supported[
BLACK],
1151 black_attack_effect,
1153 white_attack_effect, white_attack_piece,
1154 black_defense_effect, black_defense_piece,
1155 white_defense_effect, white_defense_piece) +
1157 black_attack_effect,
1159 white_attack_effect, white_attack_piece,
1160 black_defense_effect, black_defense_piece,
1161 white_defense_effect, white_defense_piece);
1205 black_attack_supported_piece,
1206 white_attack_supported_piece) +
1209 black_attack_supported_piece,
1210 white_attack_supported_piece,
1211 state.kingSquare<
BLACK>().y(),
1212 state.kingSquare<
WHITE>().y());
1227 white_defense_effect, white_defense_piece) +
1229 black_defense_effect,
1230 black_defense_piece,
1231 white_defense_effect, white_defense_piece);
1251 black_king_vertical,
1252 white_king_vertical);
1277 #define DEBUGPRINT(x) std::cerr << " " << #x << " " << x << "\n" 1321 setRandomOne<King25EffectAttack>();
1322 setRandomOne<King25EffectYAttack>();
1325 setRandomOne<PieceStand>(0);
1326 setRandomOne<Pin>(0);
1327 setRandomOne<King25EffectEachBothOpening>();
1328 setRandomOne<PawnDrop>(0);
1329 setRandomOne<NoPawnOnStand>(0);
1330 setRandomOne<GoldRetreat>(0);
1331 setRandomOne<SilverRetreat>(0);
1332 setRandomOne<KnightAdvance>(0);
1333 setRandomOne<AllMajor>(0);
1334 setRandomOne<KingXBlocked>(0);
1335 setRandomOne<KingXBlockedY>(0);
1336 setRandomOne<AllGold>(0);
1337 setRandomOne<PtypeX>(0);
1338 setRandomOne<PtypeY>(0);
1339 setRandomOne<AnagumaEmpty>(0);
1340 setRandomOne<NonPawnPieceStand>(0);
1341 setRandomOne<King25EffectDefense>(0);
1342 setRandomOne<King25EffectYDefense>(0);
1343 setRandomOne<RookMobility>(0);
1344 setRandomOne<BishopMobility>(0);
1345 setRandomOne<LanceMobility>(0);
1346 setRandomOne<RookEffect>(0);
1347 setRandomOne<BishopEffect>(0);
1348 setRandomOne<PawnAdvance>(0);
1349 setRandomOne<PawnDropY>(0);
1350 setRandomOne<KnightCheck>(0);
1353 setRandomOne<PieceStand>(1);
1354 setRandomOne<Pin>(1);
1355 setRandomOne<King25EffectEachBothMidgame>();
1356 setRandomOne<PawnDrop>(1);
1357 setRandomOne<NoPawnOnStand>(1);
1358 setRandomOne<GoldRetreat>(1);
1359 setRandomOne<SilverRetreat>(1);
1360 setRandomOne<KnightAdvance>(1);
1361 setRandomOne<AllMajor>(1);
1362 setRandomOne<KingXBlocked>(1);
1363 setRandomOne<KingXBlockedY>(1);
1364 setRandomOne<AllGold>(1);
1365 setRandomOne<PtypeX>(1);
1366 setRandomOne<PtypeY>(1);
1367 setRandomOne<AnagumaEmpty>(1);
1368 setRandomOne<NonPawnPieceStand>(1);
1369 setRandomOne<King25EffectDefense>(1);
1370 setRandomOne<King25EffectYDefense>(1);
1371 setRandomOne<RookMobility>(1);
1372 setRandomOne<BishopMobility>(1);
1373 setRandomOne<LanceMobility>(1);
1374 setRandomOne<RookEffect>(1);
1375 setRandomOne<BishopEffect>(1);
1376 setRandomOne<PawnAdvance>(1);
1377 setRandomOne<PawnDropY>(1);
1378 setRandomOne<KnightCheck>(1);
1382 setRandomOne<PieceStand>(2);
1383 setRandomOne<Pin>(2);
1384 setRandomOne<King25EffectEachBothEnding>();
1385 setRandomOne<PawnDrop>(2);
1386 setRandomOne<NoPawnOnStand>(2);
1387 setRandomOne<GoldRetreat>(2);
1388 setRandomOne<SilverRetreat>(2);
1389 setRandomOne<KnightAdvance>(2);
1390 setRandomOne<AllMajor>(2);
1391 setRandomOne<KingXBlocked>(2);
1392 setRandomOne<KingXBlockedY>(2);
1393 setRandomOne<AllGold>(2);
1394 setRandomOne<PtypeX>(2);
1395 setRandomOne<PtypeY>(2);
1396 setRandomOne<AnagumaEmpty>(2);
1397 setRandomOne<NonPawnPieceStand>(2);
1398 setRandomOne<King25EffectDefense>(2);
1399 setRandomOne<King25EffectYDefense>(2);
1400 setRandomOne<RookMobility>(2);
1401 setRandomOne<BishopMobility>(2);
1402 setRandomOne<LanceMobility>(2);
1403 setRandomOne<RookEffect>(2);
1404 setRandomOne<BishopEffect>(2);
1405 setRandomOne<PawnAdvance>(2);
1406 setRandomOne<PawnDropY>(2);
1407 setRandomOne<KnightCheck>(2);
1412 setRandomOne<King25EffectEachBothMidgame>();
1438 setRandomOne<KingPieceRelative>(0);
1439 setRandomOne<KingPieceRelative>(1);
1441 setRandomOne<KingPieceRelative>(2);
1444 setRandomOne<NonPawnPieceStandCombination>();
1445 setRandomOne<NonPawnPieceStandTurn>();
1446 setRandomOne<King25EffectEachXY>();
1447 setRandomOne<RookPawnY>();
1448 setRandomOne<RookEffectPiece>();
1449 setRandomOne<BishopEffectPiece>();
1450 setRandomOne<PieceStandY>();
1451 setRandomOne<RookEffectPieceKingRelative>();
1452 setRandomOne<BishopEffectPieceKingRelative>();
1453 setRandomOne<RookPawnYX>();
1454 setRandomOne<PawnPtypeOPtypeO>();
1455 setRandomOne<CanCheckNonPawnPieceStandCombination>();
1456 setRandomOne<PromotedMinorPieces>();
1457 setRandomOne<KingPieceRelativeNoSupport>();
1458 setRandomOne<NonPawnAttacked>();
1459 setRandomOne<PtypeYY>();
1460 setRandomOne<PawnPtypeOPtypeOY>();
1461 setRandomOne<PawnDropX>();
1462 setRandomOne<King3Pieces>();
1463 setRandomOne<King3PiecesXY>();
1464 setRandomOne<King25EffectEachKXY>();
1465 setRandomOne<BishopHead>();
1466 setRandomOne<BishopHeadKingRelative>();
1467 setRandomOne<KnightCheckY>();
1468 setRandomOne<KnightHead>();
1469 setRandomOne<RookPromoteDefense>();
1470 setRandomOne<PawnDropPawnStand>();
1471 setRandomOne<PawnDropPawnStandX>();
1472 setRandomOne<PawnDropPawnStandY>();
1473 setRandomOne<King25Effect2>();
1474 setRandomOne<King25EffectY2>();
1475 setRandomOne<KnightHeadOppPiecePawnOnStand>();
1476 setRandomOne<KingXBothBlocked>();
1477 setRandomOne<KingXBothBlockedY>();
1478 setRandomOne<KingRookBishop>();
1479 setRandomOne<PromotedMinorPiecesY>();
1480 setRandomOne<King25EffectSupported>();
1481 setRandomOne<King25EffectSupportedY>();
1482 setRandomOne<NonPawnAttackedKingRelative>();
1483 setRandomOne<NonPawnAttackedPtype>();
1484 setRandomOne<PtypeCount>();
1485 setRandomOne<KingXBlocked3>();
1486 setRandomOne<KingXBlocked3Y>();
1487 setRandomOne<PtypeCountXY>();
1488 setRandomOne<PtypeCountXYAttack>();
1489 setRandomOne<LanceEffectPieceKingRelative>();
1490 setRandomOne<KingMobility>();
1491 setRandomOne<KingMobilitySum>();
1492 setRandomOne<MajorCheckWithCapture>();
1493 setRandomOne<RookSilverKnight>();
1494 setRandomOne<BishopSilverKnight>();
static MultiInt eval(const NumEffectState &state)
static MultiIntPair eval(const NumEffectState &state, CArray< BoardMask, 2 > &knight_fork_squares, CArray< std::pair< Square, int >, 2 > &knight_drop)
Ptype unpromote(Ptype ptype)
ptypeがpromote後の型の時に,promote前の型を返す. promoteしていない型の時はそのまま返す ...
static MultiInt eval(const NumEffectState &state)
static void eval(const NumEffectState &state, MultiIntPair &out)
static MultiInt eval(const NumEffectState &state)
static void eval(const NumEffectState &state, MultiIntPair &out)
IntArrayReader(const int *a, size_t l)
MultiInt rook_promote_defense
static MultiInt eval(const NumEffectState &state)
int max(Player p, int v1, int v2)
CArray< PieceMask, 2 > effect25
static MultiInt eval(const NumEffectState &state)
CArray< int, 2 > piece_pair_king_value
GeneralMask< mask_int_t > mask_t
CArray< MultiInt, STAGE_FEATURE_LIMIT > stage_values
static void evalWithUpdate(const NumEffectState &state, Move last_move, MultiIntPair &values)
static int eval(const NumEffectState &state)
const BoardMask changedEffects(Player pl) const
static volatile LoadStatus initialized_flag
static MultiIntPair eval(const NumEffectState &state)
constexpr Player alt(Player player)
CArray< bool, 2 > can_check
CArray< int, 5 > black_vertical
static MultiInt eval(const NumEffectState &state)
MultiIntPair non_pawn_attacked_ptype
void update(const NumEffectState &new_state, Move last_move)
static int eval(const NumEffectState &state)
CArray2d< int, 2, 3 > gs_near_king_count
static CArray< int, 2 > eval(const NumEffectState &)
static MultiInt eval(const NumEffectState &state)
static MultiInt evalWithUpdate(const NumEffectState &state, Move last_move, MultiInt &last_value)
static MultiIntPair eval(const NumEffectState &state, CArray< std::pair< Square, int >, 2 > &silver_drop)
int countPiecesOnStand(Player pl, Ptype ptype) const
持駒の枚数を数える
MultiInt ptype_count_value
bool isMajorNonPieceOK(Ptype ptype)
int y() const
将棋としてのY座標を返す.
static MultiInt evalWithUpdate(const NumEffectState &state, Move moved, const MultiInt &last_value, const CArray< bool, 2 > &could_check, const CArray< bool, 2 > &can_check)
static void compile(const Weights &values)
values を展開してクラス全体で使う
static MultiInt eval(const NumEffectState &state)
static int eval(const NumEffectState &, const Weights &)
static MultiInt eval(int black_attack_piece, int white_attack_piece, int black_attack_supported_piece, int white_attack_supported_piece)
MultiInt piece_stand_value
static void resetWeights(const int *w, size_t length)
static MultiInt eval(int black_major_count)
static int eval(const NumEffectState &state, int black_effect, int black_piece, int white_effect, int white_piece)
int x() const
将棋としてのX座標を返す.
static MultiInt eval(const NumEffectState &state, const CArray2d< int, 2, 9 > &pawns)
void setValue(size_t index, int value)
static Weights piece_pair_weights
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state, const CArray< bool, 2 > &can_check)
CArray< int, 5 > white_vertical
static int roundUp(int v)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state, const CArray< PieceMask, 2 > &king25)
static MultiInt eval(const NumEffectState &state)
const Piece pieceOf(int num) const
ProgressIndependentFeature
Square kingSquare() const
static MultiInt eval(const NumEffectState &state)
static void doResetWeights(Reader &reader)
MultiIntPair kingx_blocked
static MultiInt eval(const NumEffectState &state)
static int eval(const NumEffectState &, int black_effect, int black_piece, int white_effect, int white_piece)
static void eval(const NumEffectState &state, CArray< PieceMask, 40 > &attacked_mask, MultiIntPair &out)
MultiIntPair king25_both_side
static int eval(const NumEffectState &state, int black_attack_effect, int black_attack_piece, int white_attack_effect, int white_attack_piece, int black_defense_effect, int black_defense_piece, int white_defense_effect, int white_defense_piece)
MultiInt promotion37_eval
const Square from() const
static MultiInt eval(const NumEffectState &state)
static std::string defaultFilename()
static const MultiIntPair eval(const NumEffectState &state)
MultiIntPair piece_stand_turn
MultiIntPair king_rook_bishop
static MultiInt eval(const NumEffectState &state)
static void evalWithUpdateBang(const NumEffectState &new_state, Move last_move, MultiIntPair &last_values_and_out)
static MultiInt eval(const NumEffectState &state)
static void eval(const NumEffectState &, MultiInt &out)
void updateSub(const NumEffectState &new_state, Move last_move)
void update(const NumEffectState &new_state, Move last_move)
static MultiInt eval(const NumEffectState &state)
bool isPromoted() const
promoteした駒かどうかをチェックする
static void eval(const NumEffectState &state, const CArray2d< int, 2, PTYPE_SIZE > &ptype_count, const CArray2d< int, 2, PTYPE_SIZE > &ptype_board_count, MultiInt &out)
static MultiInt eval(const NumEffectState &state)
MultiIntPair non_pawn_attacked
CArray< PieceMask, 2 > effected_mask_for_attacked
CArray< BoardMask, 2 > knight_fork_squares
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(int black_major_count)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(unsigned int ptypeo_mask)
MultiIntPair king25_effect_each
static MultiInt eval(const NumEffectState &state, const CArray< PieceMask, 2 > &king25_mask)
CArray2d< int, 2, PTYPE_SIZE > ptype_count
static MultiInt evalWithUpdate(const NumEffectState &state, Move moved, const CArray< PieceMask, 2 > &effected_mask, const MultiInt &last_values)
int progress_independent_value
MultiIntPair piece_fork_turn
int black_attack_supported_piece
static MultiInt eval(const NumEffectState &state)
static std::mutex initialize_mutex
static MultiInt eval(const NumEffectState &state)
CArray< PieceMask, 40 > attacked_mask
CArray< PieceMask, 2 > effected_mask
const Progress16 progress16() const
static void eval(const NumEffectState &, MultiInt &out)
static MultiInt eval(const NumEffectState &state)
CArray2d< int, 2, PTYPE_SIZE > ptype_board_count
CArray< MultiInt, 2 > non_pawn_ptype_attacked_pair_eval
static void setUp(const Weights &weights)
void updateSub(const NumEffectState &new_state, Move last_move)
MultiInt king_table_value
int white_attack_supported_piece
static MultiInt eval(const NumEffectState &state)
static const std::string & home(const std::string &initialize_if_first_invocation="")
compile時に指定されたディレクトリを返す.
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state, const CArray2d< int, 2, 3 > &gs_count)
const Square square() const
Ptype capturePtype() const
static MultiInt eval(const NumEffectState &state)
const BoardMaskTable5x5 Board_Mask_Table5x5
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static void eval(const NumEffectState &state, MultiIntPair &out)
static MultiInt eval(const NumEffectState &state, int black_pawn_count)
CArray< std::pair< Square, int >, 2 > rook_drop
void fill(const T_simple &value=T_simple())
OpenMidEndingPtypeTable()
OpenMidEndingEval(const NumEffectState &state=NumEffectState(), bool limit_progress_independent_value=! OslConfig::hasByoyomi())
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &, int black_effect, int black_piece, int white_effect, int white_piece)
void updateGoldSilverNearKing(const NumEffectState &state)
const Progress16 progress16() const
static int evalWithUpdateCompiled(const NumEffectState &state, Move moved, int last_value)
static MultiInt eval(const NumEffectState &state)
static const char * name(ProgressIndependentFeature)
const PieceMask effectedMask(Player pl) const
pl からの利きが(1つ以上)ある駒一覧
OpenMidEndingEvalDebugInfo debugInfo(const NumEffectState &state)
bool anyInRange(const BoardMask &mask) const
static const CArray< Ptype, 7 > order
持駒の表示で良く使われる順番.
PtypeO captured(PtypeO ptypeO)
unpromoteすると共に,ownerを反転する.
CArray< std::pair< Square, int >, 2 > knight_drop
CArray< int, 5 > black_king_vertical
MultiInt piece_stand_combination
CArray< PieceMask, 2 > effect25_supported
static MultiInt eval(const NumEffectState &state, const CArray2d< int, 2, 9 > &pawns)
CArray< std::pair< Square, int >, 2 > bishop_drop
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(int black_attack_piece, int white_attack_piece, int black_attack_supported_piece, int white_attack_supported_piece, int black_king_y, int white_king_y)
static MultiInt eval(int black_count, int white_count)
static MultiInt eval(const NumEffectState &state)
static void sanitize(Weights &values)
MultiInt rook_silver_knight
CArray< int, 5 > white_king_vertical
CArray< int, 2 > non_pawn_stand_count
static MultiInt eval(const NumEffectState &state)
static int eval(const NumEffectState &state)
MultiInt lance_effect_piece
CArray< std::pair< Square, int >, 2 > silver_drop
MultiInt promoted_minor_piece
static MultiInt eval(const NumEffectState &state, int black_effect, int black_piece, int white_effect, int white_piece)
static MultiIntPair eval(const NumEffectState &state)
void reset(const CArray< int, PTYPE_SIZE > &values)
MultiInt bishop_silver_knight
const NewProgressData rawData() const
static MultiIntPair eval(const NumEffectState &state, CArray< std::pair< Square, int >, 2 > &bishop_drop, CArray< std::pair< Square, int >, 2 > &rook_drop)
static void eval(const NumEffectState &, MultiInt &out)
CArray< int, PROGRESS_INDEPENDENT_FEATURE_LIMIT > progress_independent_values
static int eval(const NumEffectState &, int black_attack_effect, int black_attack_piece, int white_attack_effect, int white_attack_piece, int black_defense_effect, int black_defense_piece, int white_defense_effect, int white_defense_piece)
static MultiInt eval(const NumEffectState &state)
int expect(const NumEffectState &state, Move move) const
static MultiInt eval(const NumEffectState &state)
bool isMajorBasic(Ptype ptype)
MultiInt recalculated_stage_value
CArray2d< int, 2, 9 > pawns
static MultiInt evalWithUpdate(const NumEffectState &state, Move moved, const MultiInt &last_values)
static MultiInt eval(const NumEffectState &state)
const BoardMask & mask(Square p) const
p中心の5x5 の範囲のbitを立てたもの, centeringなし
static MultiInt eval(const NumEffectState &state, const CArray< int, 5 > &black, const CArray< int, 5 > &white)