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;
219template <
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],
669 CanCheckNonPawnPieceStandCombination::canCheck<BLACK>(state);
671 CanCheckNonPawnPieceStandCombination::canCheck<WHITE>(state);
737 value = PieceEval::evalWithUpdate<BLACK>(state, move, progress_independent_value);
739 value = PieceEval::evalWithUpdate<WHITE>(state, move, progress_independent_value);
741#ifdef USE_TEST_PROGRESS
744 endgameValue() * progress.progress());
746 return roundUp(value * 16 +
747 openingValue() * (16 - progress.progress16().value()) +
748 endgameValue() * progress.progress16().value());
756 assert(new_state.
turn() == turn);
763 updateSub<BLACK>(new_state,last_move);
765 updateSub<WHITE>(new_state,last_move);
767template<osl::Player P>
771 assert(last_move.
player()==P);
789 ++non_pawn_stand_count[P];
793 pawns[
alt(P)][last_move.
to().
x() - 1] = 0;
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)
815 --gs_near_king_count[
alt(P)][
std::max(x_diff, y_diff) - 1];
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)
829 --gs_near_king_count[P][
std::max(x_diff, y_diff) - 1];
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)
837 ++gs_near_king_count[P][
std::max(x_diff, y_diff) - 1];
841 if (base_ptype ==
KING)
843 updateGoldSilverNearKing(new_state);
848 --non_pawn_stand_count[P];
852 pawns[P][last_move.
from().
x() - 1] = 0;
856 pawns[P][last_move.
to().
x() - 1] = last_move.
to().
y();
862 mask.
set(last_move.
to());
867 effect25_supported[
WHITE] ||
868 (~effect25_supported[
WHITE] & effect25[
WHITE] & ~new_state.effectedMask(
BLACK)) !=
869 (~effect25_supported[
WHITE] & effect25[
WHITE])){
870 King25EffectBoth::countEffectAndPiecesBoth<BLACK>(
871 new_state, effect25[
WHITE], effect25_supported[
WHITE],
872 black_attack_effect, black_attack_piece,
873 white_defense_effect, white_defense_piece,
874 black_attack_supported_piece, white_vertical, white_king_vertical);
875 king25_both_side[
WHITE]=King25BothSide::evalOne<WHITE>(new_state,white_vertical);
879 effect25_supported[
BLACK] ||
881 (~effect25_supported[
BLACK] & effect25[
BLACK])){
882 King25EffectBoth::countEffectAndPiecesBoth<WHITE>(
883 new_state, effect25[
BLACK], effect25_supported[
BLACK],
884 white_attack_effect, white_attack_piece,
885 black_defense_effect, black_defense_piece,
886 white_attack_supported_piece, black_vertical, black_king_vertical);
887 king25_both_side[
BLACK]=King25BothSide::evalOne<BLACK>(new_state,black_vertical);
890#ifdef USE_TEST_PROGRESS
891 progress.updateSub<P>(new_state, last_move);
893 progress.update(new_state, last_move);
896 progress_independent_value =
897 PieceEval::evalWithUpdate<P>(new_state, last_move, progress_independent_value);
899 PieceStand::evalWithUpdate<P>(new_state, last_move,
927 recalculated_stage_value = silver_features+gold_retreat;
940 white_attack_effect, white_attack_piece);
941 recalculated_value +=
945 white_attack_effect, white_attack_piece);
947 recalculated_stage_value +=
949 white_defense_effect, white_defense_piece);
950 recalculated_stage_value +=
952 black_defense_effect,
954 white_defense_effect, white_defense_piece);
955 recalculated_stage_value += knight_advance;
957 recalculated_stage_value += kingx_blocked[
BLACK] + kingx_blocked[
WHITE];
970 black_attack_supported_piece,
971 white_attack_supported_piece);
975 black_attack_supported_piece,
976 white_attack_supported_piece,
979 recalculated_stage_value += result_supported + result_supported_y;
982 king_rook_bishop[
BLACK]=KingRookBishop::evalOne<BLACK>(new_state);
983 king_rook_bishop[
WHITE]=KingRookBishop::evalOne<WHITE>(new_state);
986 king_rook_bishop[P]=KingRookBishop::evalOne<P>(new_state);
988 recalculated_stage_value +=king_rook_bishop[
BLACK]-king_rook_bishop[
WHITE];
990 recalculated_stage_value += king25_both_side[
BLACK]-king25_both_side[
WHITE];
993 white_king_vertical);
995 king_table_value = KingPieceRelative::evalWithUpdate<P>
996 (new_state, last_move, king_table_value);
1000 PiecePairKing::evalWithUpdateBang<P>(new_state, last_move,
1001 piece_pair_king_value);
1002 pawn_drop = PawnDropBoth::evalWithUpdate<P>(new_state,
1003 last_move, pawn_drop);
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);
1012 piece_stand_combination =
1015 piece_stand_combination,
1018 can_check = can_check_new;
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,
1034 promoted_minor_piece =
1037 promoted_minor_piece);
1042 NonPawnAttacked::evalWithUpdateBang<P>(new_state,
1044 effected_mask_for_attacked,
1046 NonPawnAttackedPtype::evalWithUpdateBang<P>(
1047 new_state, last_move, effected_mask_for_attacked,
1048 attacked_mask, non_pawn_attacked_ptype);
1049 effected_mask[
BLACK] =
1050 effected_mask_for_attacked[
BLACK] =
1052 effected_mask[
WHITE] =
1053 effected_mask_for_attacked[
WHITE] =
1056 effected_mask_for_attacked[
BLACK].selectBit<
PAWN>() &
1059 effected_mask_for_attacked[
WHITE].selectBit<
PAWN>() &
1061 effected_mask_for_attacked[
BLACK].clearBit<
PAWN>();
1062 effected_mask_for_attacked[
WHITE].clearBit<
PAWN>();
1071 PtypeCount::evalWithUpdateBang<P>(new_state,
1072 last_move, ptype_count, ptype_board_count,
1073 ptype_count_value,ptypeo_mask);
1074 PtypeYPawnY::evalWithUpdateBang<P>(new_state, last_move,pawns, ptype_y_pawn_y);
1105#ifdef USE_TEST_PROGRESS
1106 recalculated_stage_value += progress.rawData().promotion37_eval;
1107 recalculated_stage_value += progress.rawData().non_pawn_ptype_attacked_pair_eval[
BLACK]
1108 + progress.rawData().non_pawn_ptype_attacked_pair_eval[
WHITE];
1115 piece_fork_turn += KnightFork::evalWithUpdate<P>(new_state, last_move, knight_fork_squares, knight_drop);
1124 debug_info.
value = value();
1125 debug_info.
progress = progress16().value();
1131 int black_attack_effect, black_attack_piece, black_defense_effect, black_defense_piece,
1132 white_attack_effect, white_attack_piece, white_defense_effect, white_defense_piece;
1134 black_king_vertical, white_king_vertical;
1135 King25EffectBoth::countEffectAndPiecesBoth<BLACK>(state, effect25[
WHITE],
1136 effect25_supported[
WHITE],
1137 black_attack_effect, black_attack_piece,
1138 white_defense_effect, white_defense_piece,
1139 black_attack_supported_piece,
1141 white_king_vertical);
1142 King25EffectBoth::countEffectAndPiecesBoth<WHITE>(state, effect25[
BLACK],
1143 effect25_supported[
BLACK],
1144 white_attack_effect, white_attack_piece,
1145 black_defense_effect, black_defense_piece,
1146 white_attack_supported_piece,
1148 black_king_vertical);
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);
1170 king25_effect_each[
BLACK] + king25_effect_each[
WHITE];
1205 black_attack_supported_piece,
1206 white_attack_supported_piece) +
1209 black_attack_supported_piece,
1210 white_attack_supported_piece,
1214 king_rook_bishop[
BLACK] - king_rook_bishop[
WHITE];
1227 white_defense_effect, white_defense_piece) +
1229 black_defense_effect,
1230 black_defense_piece,
1231 white_defense_effect, white_defense_piece);
1244 gs_near_king_count);
1248 king25_both_side[
BLACK] - king25_both_side[
WHITE];
1251 black_king_vertical,
1252 white_king_vertical);
1277#define DEBUGPRINT(x) std::cerr << " " << #x << " " << x << "\n"
1302 DEBUGPRINT(non_pawn_attacked_ptype[turn][0]);
1319 initialized_flag = Random;
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>();
void fill(const T_simple &value=T_simple())
Ptype capturePtype() const
const Square from() const
const BoardMask changedEffects(Player pl) const
bool longEffectChanged() const
const PieceMask effectedMask(Player pl) const
pl からの利きが(1つ以上)ある駒一覧
const PieceMask promotedPieces() const
bool anyEffectChanged() const
const mask_t getMask(int num) const
static const CArray< Ptype, 7 > order
持駒の表示で良く使われる順番.
bool isPromoted() const
promoteした駒かどうかをチェックする
const Square square() const
const Piece pieceOf(int num) const
Square kingSquare() const
int countPiecesOnStand(Player pl, Ptype ptype) const
持駒の枚数を数える
int y() const
将棋としてのY座標を返す.
int x() const
将棋としてのX座標を返す.
const BoardMask & mask(Square p) const
p中心の5x5 の範囲のbitを立てたもの, centeringなし
bool anyInRange(const BoardMask &mask) const
void reset(const CArray< int, PTYPE_SIZE > &values)
static MultiInt eval(int black_major_count)
static MultiInt eval(int black_major_count)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static int eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiIntPair eval(const NumEffectState &state, CArray< std::pair< Square, int >, 2 > &bishop_drop, CArray< std::pair< Square, int >, 2 > &rook_drop)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static int eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state, const CArray2d< int, 2, 3 > &gs_count)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state, const CArray< PieceMask, 2 > &king25_mask)
static int eval(const NumEffectState &, int black_effect, int black_piece, int white_effect, int white_piece)
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, const CArray< PieceMask, 2 > &king25)
static MultiInt eval(const NumEffectState &, int black_effect, int black_piece, int white_effect, int white_piece)
static void evalWithUpdate(const NumEffectState &state, Move last_move, MultiIntPair &values)
static void eval(const NumEffectState &state, MultiIntPair &out)
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_attack_piece, int white_attack_piece, int black_attack_supported_piece, int white_attack_supported_piece)
static int eval(const NumEffectState &state, int black_effect, int black_piece, int white_effect, int white_piece)
static MultiInt eval(const NumEffectState &state, int black_effect, int black_piece, int white_effect, int white_piece)
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)
static MultiInt eval(const NumEffectState &state, const CArray< int, 5 > &black, const CArray< int, 5 > &white)
static MultiInt evalWithUpdate(const NumEffectState &state, Move last_move, MultiInt &last_value)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt evalWithUpdate(const NumEffectState &state, Move moved, const CArray< PieceMask, 2 > &effected_mask, const MultiInt &last_values)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static void evalWithUpdateBang(const NumEffectState &new_state, Move last_move, MultiIntPair &last_values_and_out)
static const MultiIntPair eval(const NumEffectState &state)
static MultiIntPair eval(const NumEffectState &state)
static MultiIntPair eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
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)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state, int black_pawn_count)
static MultiInt eval(const NumEffectState &state)
static void eval(const NumEffectState &state, CArray< PieceMask, 40 > &attacked_mask, MultiIntPair &out)
static void eval(const NumEffectState &state, MultiIntPair &out)
static MultiInt eval(const NumEffectState &state, const CArray< bool, 2 > &can_check)
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 eval(const NumEffectState &state, MultiIntPair &out)
static MultiInt eval(int black_count, int white_count)
static MultiInt eval(const NumEffectState &state)
MultiInt ptype_count_value
int expect(const NumEffectState &state, Move move) const
CArray< std::pair< Square, int >, 2 > bishop_drop
int white_attack_supported_piece
CArray< int, 5 > black_king_vertical
CArray< bool, 2 > can_check
int black_attack_supported_piece
MultiInt promoted_minor_piece
MultiInt king_table_value
void updateSub(const NumEffectState &new_state, Move last_move)
MultiIntPair king25_effect_each
static void doResetWeights(Reader &reader)
CArray2d< int, 2, PTYPE_SIZE > ptype_board_count
CArray< int, 2 > non_pawn_stand_count
CArray< PieceMask, 2 > effect25
int progress_independent_value
CArray< int, 5 > white_king_vertical
void update(const NumEffectState &new_state, Move last_move)
MultiIntPair king25_both_side
MultiInt rook_promote_defense
MultiInt rook_silver_knight
MultiIntPair non_pawn_attacked
MultiInt piece_stand_value
CArray2d< int, 2, PTYPE_SIZE > ptype_count
CArray< int, 2 > piece_pair_king_value
MultiIntPair piece_stand_turn
OpenMidEndingEval(const NumEffectState &state=NumEffectState(), bool limit_progress_independent_value=! OslConfig::hasByoyomi())
MultiIntPair non_pawn_attacked_ptype
void updateGoldSilverNearKing(const NumEffectState &state)
CArray< std::pair< Square, int >, 2 > knight_drop
CArray2d< int, 2, 9 > pawns
static std::string defaultFilename()
static void resetWeights(const int *w, size_t length)
static volatile LoadStatus initialized_flag
CArray< PieceMask, 2 > effected_mask
MultiIntPair kingx_blocked
static Weights piece_pair_weights
CArray2d< int, 2, 3 > gs_near_king_count
MultiIntPair piece_fork_turn
CArray< PieceMask, 2 > effected_mask_for_attacked
CArray< PieceMask, 40 > attacked_mask
MultiIntPair king_rook_bishop
OpenMidEndingEvalDebugInfo debugInfo(const NumEffectState &state)
MultiInt recalculated_stage_value
CArray< std::pair< Square, int >, 2 > silver_drop
MultiInt piece_stand_combination
CArray< std::pair< Square, int >, 2 > rook_drop
MultiInt bishop_silver_knight
CArray< int, 5 > black_vertical
CArray< PieceMask, 2 > effect25_supported
CArray< BoardMask, 2 > knight_fork_squares
MultiInt lance_effect_piece
CArray< int, 5 > white_vertical
OpenMidEndingPtypeTable()
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static void setUp(const Weights &weights)
static int eval(const NumEffectState &state)
static CArray< int, 2 > eval(const NumEffectState &)
static int evalWithUpdateCompiled(const NumEffectState &state, Move moved, int last_value)
static void compile(const Weights &values)
values を展開してクラス全体で使う
static void sanitize(Weights &values)
static int eval(const NumEffectState &, const Weights &)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(unsigned int ptypeo_mask)
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)
static MultiInt eval(const NumEffectState &state, const CArray2d< int, 2, 9 > &pawns)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static void eval(const NumEffectState &, MultiInt &out)
static MultiInt eval(const NumEffectState &state, const CArray2d< int, 2, 9 > &pawns)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiInt eval(const NumEffectState &state)
static MultiIntPair eval(const NumEffectState &state, CArray< std::pair< Square, int >, 2 > &silver_drop)
const BoardMaskTable5x5 Board_Mask_Table5x5
int max(Player p, int v1, int v2)
GeneralMask< mask_int_t > mask_t
bool isMajorBasic(Ptype ptype)
Ptype unpromote(Ptype ptype)
ptypeがpromote後の型の時に,promote前の型を返す. promoteしていない型の時はそのまま返す
bool isMajorNonPieceOK(Ptype ptype)
constexpr Player alt(Player player)
PtypeO captured(PtypeO ptypeO)
unpromoteすると共に,ownerを反転する.
static std::mutex initialize_mutex
IntArrayReader(const int *a, size_t l)
static const std::string & home(const std::string &initialize_if_first_invocation="")
compile時に指定されたディレクトリを返す.
static void eval(const NumEffectState &, MultiInt &out)
static MultiInt eval(const NumEffectState &state)
static void eval(const NumEffectState &, MultiInt &out)
CArray< int, PROGRESS_INDEPENDENT_FEATURE_LIMIT > progress_independent_values
CArray< MultiInt, STAGE_FEATURE_LIMIT > stage_values
ProgressIndependentFeature
@ BISHOP_EXCHANGE_SILVER_KING
@ NON_PAWN_ATTACKED_PTYPE_PAIR
@ NON_PAWN_ATTACKED_PTYPE
@ KING_PIECE_RELATIVE_NOSUPPORT
@ GOLD_AND_SILVER_NEAR_KING
@ PIECE_STAND_COMBINATION
@ KING25_EFFECT_SUPPORTED
@ KING25_EFFECT_COUNT_COMBINATION
@ MAJOR_CHECK_WITH_CAPTURE
static const char * name(ProgressIndependentFeature)
static MultiInt eval(const NumEffectState &state)
static MultiInt evalWithUpdate(const NumEffectState &state, Move moved, const MultiInt &last_values)
void setValue(size_t index, int value)