00001
00002
00003 #include "osl/game_playing/mtdfPlayer.h"
00004 #include "osl/game_playing/searchPlayer.tcc"
00005 #include "osl/search/mtdf.h"
00006 #include "osl/search/simpleHashTable.h"
00007 #include "osl/eval/progressEval.h"
00008 #include "osl/eval/pieceEval.h"
00009 #include "osl/category/standardMoveGenerator.h"
00010
00011
00012
00013 osl::game_playing::
00014 PlainMtdfPlayer::PlainMtdfPlayer()
00015 {
00016 }
00017
00018 osl::game_playing::
00019 PlainMtdfPlayer::~PlainMtdfPlayer()
00020 {
00021 }
00022
00023 osl::game_playing::ComputerPlayer* osl::game_playing::
00024 PlainMtdfPlayer::clone() const
00025 {
00026 return cloneIt(*this);
00027 }
00028
00029 const osl::game_playing::MoveWithComment osl::game_playing::
00030 PlainMtdfPlayer::searchWithSecondsForThisMove(const GameState& gs, int seconds)
00031 {
00032 typedef MTDF<PieceEval,StandardMoveGenerator,
00033 SimpleHashTable,CountRecorder,RealizationProbability> mtdf_t;
00034
00035 const int consumed = setUpTable(gs, pawnValueOfTurn<mtdf_t>(gs.state().getTurn()));
00036 if (seconds > 0)
00037 seconds = std::max(1, seconds-consumed);
00038 searcher.reset();
00039 searcher.reset
00040 (new mtdf_t(gs.state(), *checkmate_ptr, *table_ptr, *recorder_ptr));
00041 return SearchPlayer::search<mtdf_t>(gs, seconds);
00042 }
00043
00044 bool osl::game_playing::
00045 PlainMtdfPlayer::isReasonableMove(const GameState& gs,
00046 Move move, int pawn_sacrifice)
00047 {
00048 typedef MTDF<PieceEval,StandardMoveGenerator,
00049 SimpleHashTable,CountRecorder,RealizationProbability> mtdf_t;
00050 setUpTable(gs, pawnValueOfTurn<mtdf_t>(gs.state().getTurn()));
00051 mtdf_t searcher(gs.state(), *checkmate_ptr, *table_ptr, *recorder_ptr);
00052 return isReasonableMoveBySearch(searcher, move, pawn_sacrifice);
00053 }
00054
00055
00056
00057 osl::game_playing::
00058 ProgressMtdfPlayer::ProgressMtdfPlayer()
00059 {
00060 }
00061
00062 osl::game_playing::
00063 ProgressMtdfPlayer::~ProgressMtdfPlayer()
00064 {
00065 }
00066
00067 osl::game_playing::ComputerPlayer* osl::game_playing::
00068 ProgressMtdfPlayer::clone() const
00069 {
00070 return cloneIt(*this);
00071 }
00072
00073 const osl::game_playing::MoveWithComment osl::game_playing::
00074 ProgressMtdfPlayer::searchWithSecondsForThisMove(const GameState& gs, int seconds)
00075 {
00076 typedef MTDF<eval::ProgressEval,StandardMoveGenerator,
00077 SimpleHashTable,CountRecorder,RealizationProbability> mtdf_t;
00078
00079 const int consumed = setUpTable(gs, pawnValueOfTurn<mtdf_t>(gs.state().getTurn()));
00080 if (seconds > 0)
00081 seconds = std::max(1, seconds-consumed);
00082 searcher.reset();
00083 searcher.reset
00084 (new mtdf_t(gs.state(), *checkmate_ptr, *table_ptr, *recorder_ptr));
00085 return SearchPlayer::search<mtdf_t>(gs, seconds);
00086 }
00087
00088 bool osl::game_playing::
00089 ProgressMtdfPlayer::isReasonableMove(const GameState& gs,
00090 Move move, int pawn_sacrifice)
00091 {
00092 typedef MTDF<PieceEval,StandardMoveGenerator,
00093 SimpleHashTable,CountRecorder,RealizationProbability> mtdf_t;
00094 setUpTable(gs, pawnValueOfTurn<mtdf_t>(gs.state().getTurn()));
00095 mtdf_t searcher(gs.state(), *checkmate_ptr, *table_ptr, *recorder_ptr);
00096 return isReasonableMoveBySearch(searcher, move, pawn_sacrifice);
00097 }
00098
00099
00100
00101
00102
00103
00104