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:
parent
6b4a5435a1
commit
02c98bc459
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue