evaluation: Evaluate as draw when not known win if may fly (Disabled)

See: http://www.66z66.com/news/?53990.html

If enable it, win rate is 24% : 44% : 32% in developer mode.
This commit is contained in:
Calcitem 2021-05-03 18:41:46 +08:00
parent 6b4a5435a1
commit 02c98bc459
2 changed files with 25 additions and 6 deletions

View File

@ -48,7 +48,8 @@ Value Evaluation::value()
int pieceInHandDiffCount; int pieceInHandDiffCount;
int pieceOnBoardDiffCount; int pieceOnBoardDiffCount;
int pieceToRemoveCount; int pieceToRemoveCount = (pos.side_to_move() == BLACK) ?
pos.piece_to_remove_count() : -pos.piece_to_remove_count();;
switch (pos.get_phase()) { switch (pos.get_phase()) {
case Phase::ready: case Phase::ready:
@ -67,8 +68,6 @@ Value Evaluation::value()
break; break;
case Action::remove: case Action::remove:
pieceToRemoveCount = (pos.side_to_move() == BLACK) ?
pos.piece_to_remove_count() : -pos.piece_to_remove_count();
value += VALUE_EACH_PIECE_PLACING_NEEDREMOVE * pieceToRemoveCount; value += VALUE_EACH_PIECE_PLACING_NEEDREMOVE * pieceToRemoveCount;
break; break;
default: default:
@ -90,8 +89,6 @@ Value Evaluation::value()
break; break;
case Action::remove: case Action::remove:
pieceToRemoveCount = (pos.side_to_move() == BLACK) ?
pos.piece_to_remove_count() : -(pos.piece_to_remove_count());
value += VALUE_EACH_PIECE_MOVING_NEEDREMOVE * pieceToRemoveCount; value += VALUE_EACH_PIECE_MOVING_NEEDREMOVE * pieceToRemoveCount;
break; break;
default: default:
@ -129,6 +126,28 @@ Value Evaluation::value()
value = -value; value = -value;
} }
#if EVAL_DRAW_WHEN_NOT_KNOWN_WIN_IF_MAY_FLY
if (pos.get_phase() == Phase::moving && rule.mayFly && !rule.hasDiagonalLines) {
int piece_on_board_count_future_black = pos.piece_on_board_count(BLACK);
int piece_on_board_count_future_white = pos.piece_on_board_count(WHITE);
if (pos.side_to_move() == BLACK) {
piece_on_board_count_future_white -= pos.piece_to_remove_count();
}
if (pos.side_to_move() == WHITE) {
piece_on_board_count_future_black -= pos.piece_to_remove_count();
}
if (piece_on_board_count_future_white == 3 || piece_on_board_count_future_black == 3) {
if (abs(value) < VALUE_KNOWN_WIN) {
value = VALUE_DRAW;
}
}
}
#endif
return value; return value;
} }

View File

@ -196,7 +196,7 @@ enum Value : int8_t
{ {
VALUE_ZERO = 0, VALUE_ZERO = 0,
VALUE_DRAW = 0, VALUE_DRAW = 0,
VALUE_KNOWN_WIN = 20, VALUE_KNOWN_WIN = 25,
VALUE_UNIQUE = 60, VALUE_UNIQUE = 60,
VALUE_MATE = 80, VALUE_MATE = 80,
VALUE_INFINITE = 125, VALUE_INFINITE = 125,