コード例 #1
0
ファイル: evaluate.cpp プロジェクト: woodyring/nozomi
Value
evaluate(const Position &pos, SearchStack *ss)
{
  Value score;

  Move last_move = (ss - 1)->current_move;
  if ((ss - 1)->evaluated && !(move_piece_type(last_move) == kKing && move_is_capture(last_move)) && is_ok(last_move))
  {
    calc_difference(pos, last_move, ss);
    score = ss->black_kpp + ss->white_kpp + ss->kkp + ss->material;

    assert(calc_full(pos, ss) == score);
    ss->evaluated = true;
    score = pos.side_to_move() == kWhite ? -score : score;
    score /= kFvScale;

    assert(score > -kValueInfinite && score < kValueInfinite);
  }
  else
  {
    score = calc_full(pos, ss);
    ss->evaluated = true;

    score = pos.side_to_move() == kWhite ? -score : score;

    score /= kFvScale;

    assert(score > -kValueInfinite && score < kValueInfinite);
  }

  return score + kTempo;
}
コード例 #2
0
ファイル: evaluate.cpp プロジェクト: Jangja/saya_chan
Value Position::evaluate(const Color us, SearchStack* ss)
{
	int score = 0;

#if defined(EVAL_DIFF)
    // null move
    if (ss->staticEvalRaw != INT_MAX) {
        score = int(ss->staticEvalRaw);
    }
    else

	if (calc_difference(ss)) {
        score = int(ss->staticEvalRaw);
        //ehash_store(st->key, HAND_B, score);
    } else
#endif

    {
        // 普通に評価値を計算
        score = evaluate_raw_body();
#if defined(EVAL_DIFF)
        ss->staticEvalRaw = Value(score);
#endif
    }

#if defined(_DEBUG)
    if (score != evaluate_raw_correct()) {
        std::cout << "Evaluate Value Error !!!" << std::endl;
        std::cout << to_fen() << std::endl;
        exit(-1);
    }
#endif

    score /= FV_SCALE;
    score += MATERIAL;
    score = (us == BLACK) ? score : -score;
    return Value(score);
}