All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
osl::checkmate::Dfpn Class Reference

詰探索 More...

#include <dfpn.h>

Inheritance diagram for osl::checkmate::Dfpn:
Inheritance graph
[legend]
Collaboration diagram for osl::checkmate::Dfpn:
Collaboration graph
[legend]

Classes

struct  CallAttack
 
struct  CallDefense
 
struct  CallProofOracleAttack
 
struct  CallProofOracleDefense
 
struct  DepthLimitReached
 
struct  Node
 
struct  NodeBase
 
struct  ProofOracle
 
struct  Tree
 

Public Types

enum  { DfpnMaxUniqMoves = CheckOrEscapeMaxUniqMoves }
 
typedef CheckMoveVector DfpnMoveVector
 
typedef DfpnTable table_t
 

Public Member Functions

 Dfpn ()
 
 ~Dfpn ()
 
void setTable (DfpnTable *new_table)
 
void setIllegal (const HashKey &key, PieceStand white)
 
void setBlockingVerify (bool enable=true)
 
void setParallel (int id, DfpnShared *s)
 
const ProofDisproof hasCheckmateMove (const NumEffectState &state, const HashKey &key, const PathEncoding &path, size_t limit, Move &best_move, Move last_move=Move::INVALID(), vector< Move > *pv=0)
 
const ProofDisproof hasCheckmateMove (const NumEffectState &state, const HashKey &key, const PathEncoding &path, size_t limit, Move &best_move, PieceStand &proof, Move last_move=Move::INVALID(), vector< Move > *pv=0)
 
const ProofDisproof hasEscapeMove (const NumEffectState &state, const HashKey &key, const PathEncoding &path, size_t limit, Move last_move)
 
size_t nodeCount () const
 
const DfpnTablecurrentTable () const
 
void analyze (const PathEncoding &path, const NumEffectState &state, const vector< Move > &moves) const
 
void clear ()
 
template<Player P>
void attack ()
 
template<Player P>
void defense ()
 
template<Player P, bool UseTable>
void proofOracleAttack (const ProofOracle &oracle, int proof_limit)
 
template<Player P, bool UseTable>
void proofOracleDefense (const ProofOracle &oracle, int proof_limit)
 
template<Player P>
void blockingSimulation (int seed, const ProofOracle &)
 合駒が詰と判った直後に、同じような合駒を詰める More...
 
template<Player P>
void grandParentSimulation (int cur_move, const Node &gparent, int gp_move)
 
const ProofDisproof tryProof (const NumEffectState &state, const HashKey &key, const PathEncoding &path, const ProofOracle &, size_t oracle_id, Move &best_move, Move last_move=Move::INVALID())
 
const ProofDisproof tryProofLight (const NumEffectState &state, const HashKey &key, const PathEncoding &path, const ProofOracle &, size_t oracle_id, Move &best_move, Move last_move=Move::INVALID())
 
int distance (const HashKey &) const
 
bool grandParentSimulationSuitable () const
 test suitability of simulation of grand-parent relation More...
 
template<bool UseTable>
const osl::checkmate::ProofDisproof tryProofMain (const NumEffectState &state, const HashKey &key, const PathEncoding &path, const ProofOracle &oracle, size_t oracle_id, Move &best_move, Move last_move)
 
template<osl::Player Turn>
void sort (const NumEffectState &state, DfpnMoveVector &moves)
 
template<osl::Player P>
void generateCheck (const NumEffectState &state, DfpnMoveVector &moves, bool &has_pawn_checkmate)
 
template<osl::Player P>
void generateEscape (const NumEffectState &state, bool need_full_width, Square last_to, DfpnMoveVector &moves)
 

Static Public Member Functions

template<Player P>
static void generateCheck (const NumEffectState &, DfpnMoveVector &, bool &)
 Pは攻撃側 More...
 
template<Player P>
static void generateEscape (const NumEffectState &, bool need_full_width, Square grand_parent_delay_last_to, DfpnMoveVector &)
 Pは攻撃側 More...
 
template<Player Turn>
static void sort (const NumEffectState &, DfpnMoveVector &)
 

Private Member Functions

template<bool UseTable>
const ProofDisproof tryProofMain (const NumEffectState &state, const HashKey &key, const PathEncoding &path, const ProofOracle &, size_t oracle_id, Move &best_move, Move last_move)
 
void findDagSource ()
 
void findDagSource (const HashKey &terminal_key, DfpnRecord &terminal_record, PieceStand terminal_stand, int offset=0)
 

Private Attributes

DfpnTabletable
 
boost::scoped_ptr< Treetree
 
boost::scoped_ptr< DfpnPathTablepath_table
 
size_t node_count
 
size_t node_count_limit
 
DfpnSharedparallel_shared
 
int thread_id
 
bool blocking_verify
 

Detailed Description

詰探索

Definition at line 111 of file dfpn.h.

Member Typedef Documentation

Definition at line 115 of file dfpn.h.

Definition at line 116 of file dfpn.h.

Member Enumeration Documentation

anonymous enum
Enumerator
DfpnMaxUniqMoves 

Definition at line 114 of file dfpn.h.

Constructor & Destructor Documentation

osl::checkmate::Dfpn::Dfpn ( )

Definition at line 1326 of file dfpn.cc.

osl::checkmate::Dfpn::~Dfpn ( )

Definition at line 1331 of file dfpn.cc.

Member Function Documentation

void osl::checkmate::Dfpn::analyze ( const PathEncoding path,
const NumEffectState &  state,
const vector< Move > &  moves 
) const
template<osl::Player P>
void osl::checkmate::Dfpn::attack ( )

Definition at line 1696 of file dfpn.cc.

References osl::stat::Ratio::add(), osl::PieceStand::add(), AdHocSumScale, osl::alt(), osl::checkmate::LibertyEstimator::attackH(), osl::checkmate::attackProofCost(), osl::checkmate::BadAttackLoop, osl::checkmate::DfpnRecordBase::best_move, osl::BISHOP, osl::BLACK, osl::checkmate::ProofDisproof::Checkmate(), CHECKMATE_A3_GOLD, osl::misc::BitOp::countBit(), osl::checkmate::DfpnRecordBase::dag_moves, DagFindThreshold, DagFindThreshold2, debug_time_start, osl::checkmate::DfpnRecord::disproof(), osl::checkmate::ProofDisproof::disproof(), osl::checkmate::Edge_Table, EnableGCDepth, osl::find(), osl::PtypeTable::getEffect(), osl::GOLD, osl::checkmate::FixedDepthSearcher::hasCheckmateMove(), osl::EffectContent::hasUnblockableEffect(), IgnoreUpwardDisproofThreshold, osl::checkmate::ProofDisproof::isCheckmateFail(), osl::checkmate::ProofDisproof::isCheckmateSuccess(), osl::Move::isDrop(), osl::checkmate::ProofDisproof::isFinal(), osl::checkmate::ProofDisproof::isLoopDetection(), osl::isMajor(), osl::Move::isNormal(), osl::isPromoted(), osl::checkmate::DfpnRecordBase::last_move, osl::checkmate::DisproofPieces::leaf(), LongDropCount, osl::checkmate::ProofDisproof::LOOP_DETECTION_PROOF, osl::checkmate::ProofDisproof::LoopDetection(), osl::eval::max(), osl::eval::min(), osl::checkmate::DfpnRecordBase::min_pdp, osl::checkmate::Dfpn::NodeBase::moved, osl::checkmate::King8Info::moves(), osl::checkmate::ProofDisproof::NoCheckmate(), osl::checkmate::DfpnRecordBase::node_count, osl::checkmate::ProofDisproof::NoEscape(), NoPromoeIgnoreDisproofThreshold, NoPromoeIgnoreProofThreshold, osl::checkmate::Dfpn::NodeBase::path, osl::checkmate::Dfpn::NodeBase::path_record, osl::PAWN, osl::checkmate::ProofDisproof::PAWN_CHECK_MATE_PROOF, osl::checkmate::ProofDisproof::PawnCheckmate(), osl::checkmate::DfpnRecord::proof(), osl::checkmate::DfpnRecordBase::proof_disproof, osl::checkmate::ProofDisproof::PROOF_LIMIT, osl::Move::ptype(), osl::Ptype_Table, osl::PathEncoding::pushMove(), osl::checkmate::Dfpn::NodeBase::record, osl::checkmate::EdgeTable::resetEdgeFromLiberty(), osl::ROOK, osl::checkmate::DfpnRecord::setDisproofPieces(), osl::checkmate::DfpnRecord::setProofPieces(), osl::record::csa::show(), osl::checkmate::slow_increase(), osl::checkmate::DfpnRecordBase::solved, osl::checkmate::DfpnRecord::stands, target, osl::checkmate::Dfpn::NodeBase::threshold, timer, osl::unpromote(), UpwardWeight, osl::checkmate::Dfpn::Node::visit_time, osl::WHITE, and osl::checkmate::DfpnRecordBase::working_threads.

Referenced by osl::checkmate::Dfpn::Node::setCheckmateAttack().

template<osl::Player P>
void osl::checkmate::Dfpn::blockingSimulation ( int  seed,
const ProofOracle oracle 
)
void osl::checkmate::Dfpn::clear ( )

Definition at line 1344 of file dfpn.cc.

const DfpnTable& osl::checkmate::Dfpn::currentTable ( ) const
inline

Definition at line 156 of file dfpn.h.

References table.

template<osl::Player P>
void osl::checkmate::Dfpn::defense ( )

Definition at line 2223 of file dfpn.cc.

References AdHocSumScale, osl::checkmate::Dfpn::Node::allocate(), osl::alt(), osl::checkmate::BadAttackLoop, osl::checkmate::DfpnRecordBase::best_move, osl::BLACK, blocking_verify, osl::checkmate::Dfpn::Node::children, osl::checkmate::Dfpn::Node::children_path, osl::misc::BitOp::countBit(), osl::checkmate::DfpnRecordBase::dag_moves, DagFindThreshold, DagFindThreshold2, debug_time_start, osl::checkmate::DfpnRecord::disproof(), osl::checkmate::ProofDisproof::disproof(), osl::checkmate::ProofDisproof::DISPROOF_LIMIT, osl::checkmate::ProofDisproof::DISPROOF_MAX, osl::checkmate::DfpnPathRecord::distance, osl::checkmate::DfpnRecordBase::false_branch, osl::find(), osl::PathEncoding::getDepth(), osl::checkmate::FixedDepthSearcher::hasEscapeByMove(), osl::checkmate::Dfpn::NodeBase::hash_key, osl::checkmate::Dfpn::Node::hashes, IgnoreUpwardProofThreshold, osl::checkmate::ProofDisproof::isCheckmateFail(), osl::checkmate::ProofDisproof::isCheckmateSuccess(), osl::Move::isDrop(), osl::checkmate::ProofDisproof::isFinal(), osl::checkmate::Dfpn::Node::isLoop(), osl::checkmate::ProofDisproof::isLoopDetection(), osl::Move::isNormal(), osl::KING, osl::checkmate::DfpnRecordBase::last_move, osl::checkmate::DfpnRecordBase::last_to, osl::checkmate::ProofPieces::leaf(), osl::eval::max(), MEMORIZE_SOLVED_IN_BITSET, osl::eval::min(), osl::checkmate::DfpnRecordBase::min_pdp, osl::checkmate::Dfpn::NodeBase::moved, osl::checkmate::Dfpn::Node::moves, osl::checkmate::DfpnRecordBase::need_full_width, osl::checkmate::Dfpn::Node::nextWhiteStand(), osl::checkmate::DfpnRecordBase::node_count, osl::checkmate::DfpnPathRecord::node_count, osl::checkmate::ProofDisproof::NoEscape(), osl::checkmate::Dfpn::NodeBase::path, osl::checkmate::Dfpn::NodeBase::path_record, osl::checkmate::DfpnRecord::proof(), osl::checkmate::ProofDisproof::proof(), osl::checkmate::DfpnRecordBase::proof_disproof, osl::PathEncoding::pushMove(), osl::checkmate::Dfpn::NodeBase::record, SacrificeBlockCount, osl::checkmate::Dfpn::Node::setCheckmateChildInDefense(), osl::checkmate::Dfpn::Node::setCheckmateDefense(), osl::checkmate::Dfpn::Node::setLoopDetection(), osl::checkmate::DfpnRecord::setProofPieces(), osl::checkmate::slow_increase(), osl::checkmate::DfpnRecordBase::solved, osl::Square::square, osl::checkmate::DfpnRecord::stands, target, osl::checkmate::Dfpn::NodeBase::threshold, timer, osl::Move::to(), UpwardWeight, osl::checkmate::Dfpn::Node::visit_time, osl::WHITE, osl::checkmate::Dfpn::NodeBase::white_stand, and osl::checkmate::DfpnRecordBase::working_threads.

int osl::checkmate::Dfpn::distance ( const HashKey &  key) const

Definition at line 3171 of file dfpn.cc.

References osl::checkmate::DfpnPathRecord::distance.

void osl::checkmate::Dfpn::findDagSource ( )
private

Definition at line 1687 of file dfpn.cc.

void osl::checkmate::Dfpn::findDagSource ( const HashKey &  terminal_key,
DfpnRecord terminal_record,
PieceStand  terminal_stand,
int  offset = 0 
)
private
template<Player P>
static void osl::checkmate::Dfpn::generateCheck ( const NumEffectState &  ,
DfpnMoveVector ,
bool &   
)
static

Pは攻撃側

template<osl::Player P>
void osl::checkmate::Dfpn::generateCheck ( const NumEffectState &  state,
DfpnMoveVector moves,
bool &  has_pawn_checkmate 
)
template<Player P>
static void osl::checkmate::Dfpn::generateEscape ( const NumEffectState &  ,
bool  need_full_width,
Square  grand_parent_delay_last_to,
DfpnMoveVector  
)
static

Pは攻撃側

template<osl::Player P>
void osl::checkmate::Dfpn::generateEscape ( const NumEffectState &  state,
bool  need_full_width,
Square  last_to,
DfpnMoveVector moves 
)
template<osl::Player P>
void osl::checkmate::Dfpn::grandParentSimulation ( int  cur_move,
const Node gparent,
int  gp_move 
)
bool osl::checkmate::Dfpn::grandParentSimulationSuitable ( ) const

test suitability of simulation of grand-parent relation

Definition at line 2202 of file dfpn.cc.

References osl::Move::from(), osl::Move::isCapture(), osl::Move::isNormal(), osl::checkmate::Dfpn::NodeBase::moved, and osl::Move::to().

const osl::checkmate::ProofDisproof osl::checkmate::Dfpn::hasCheckmateMove ( const NumEffectState &  state,
const HashKey &  key,
const PathEncoding path,
size_t  limit,
Move best_move,
Move  last_move = Move::INVALID(),
vector< Move > *  pv = 0 
)
const osl::checkmate::ProofDisproof osl::checkmate::Dfpn::hasCheckmateMove ( const NumEffectState &  state,
const HashKey &  key,
const PathEncoding path,
size_t  limit,
Move best_move,
PieceStand proof,
Move  last_move = Move::INVALID(),
vector< Move > *  pv = 0 
)
const osl::checkmate::ProofDisproof osl::checkmate::Dfpn::hasEscapeMove ( const NumEffectState &  state,
const HashKey &  key,
const PathEncoding path,
size_t  limit,
Move  last_move 
)
size_t osl::checkmate::Dfpn::nodeCount ( ) const
inline

Definition at line 155 of file dfpn.h.

References node_count.

Referenced by osl::checkmate::DualDfpn::findProof(), and osl::annotate::Analyzer::isCheckmate().

template<osl::Player P, bool UseTable>
void osl::checkmate::Dfpn::proofOracleAttack ( const ProofOracle oracle,
int  proof_limit 
)

Definition at line 2786 of file dfpn.cc.

References osl::stat::Ratio::add(), osl::PieceStand::add(), osl::checkmate::Dfpn::Node::allocate(), osl::alt(), osl::checkmate::OracleAdjust::attack(), osl::checkmate::BadAttackLoop, osl::checkmate::DfpnRecordBase::best_move, osl::checkmate::ProofDisproof::Checkmate(), osl::checkmate::Dfpn::Node::children, osl::checkmate::Dfpn::Node::children_path, osl::checkmate::DfpnRecord::disproof(), osl::checkmate::FixedDepthSearcher::hasCheckmateMove(), osl::checkmate::Dfpn::NodeBase::hash_key, osl::checkmate::ProofDisproof::isCheckmateSuccess(), osl::Move::isDrop(), osl::checkmate::ProofDisproof::isFinal(), osl::checkmate::Dfpn::Node::isLoop(), osl::Move::isNormal(), osl::checkmate::Dfpn::ProofOracle::key, osl::checkmate::DfpnRecordBase::last_move, osl::eval::max(), osl::checkmate::Dfpn::NodeBase::moved, osl::checkmate::Dfpn::Node::moves, osl::checkmate::Dfpn::ProofOracle::newOracle(), osl::checkmate::Dfpn::Node::nextWhiteStand(), osl::checkmate::DfpnRecordBase::node_count, osl::checkmate::ProofDisproof::NoEscape(), osl::checkmate::Dfpn::NodeBase::path, osl::checkmate::Dfpn::NodeBase::path_record, osl::PAWN, osl::checkmate::ProofDisproof::PawnCheckmate(), osl::checkmate::DfpnRecord::proof(), osl::checkmate::DfpnRecordBase::proof_disproof, osl::Move::ptype(), osl::PathEncoding::pushMove(), osl::checkmate::Dfpn::NodeBase::record, osl::checkmate::Dfpn::Node::setCheckmateAttack(), osl::checkmate::Dfpn::Node::setLoopDetection(), osl::checkmate::DfpnRecord::setProofPieces(), osl::checkmate::Dfpn::ProofOracle::traceable(), osl::WHITE, osl::checkmate::Dfpn::ProofOracle::white_stand, and osl::checkmate::Dfpn::NodeBase::white_stand.

template<osl::Player P, bool UseTable>
void osl::checkmate::Dfpn::proofOracleDefense ( const ProofOracle oracle,
int  proof_limit 
)

Definition at line 2912 of file dfpn.cc.

References osl::checkmate::Dfpn::Node::allocate(), osl::alt(), osl::checkmate::BadAttackLoop, osl::checkmate::Dfpn::Node::children, osl::checkmate::Dfpn::Node::children_path, osl::checkmate::DfpnRecord::disproof(), osl::checkmate::FixedDepthSearcher::hasEscapeByMove(), osl::checkmate::Dfpn::NodeBase::hash_key, osl::checkmate::Dfpn::Node::hashes, osl::checkmate::ProofDisproof::isFinal(), osl::checkmate::Dfpn::Node::isLoop(), osl::checkmate::ProofDisproof::isLoopDetection(), osl::Move::isNormal(), osl::checkmate::DfpnRecordBase::last_move, osl::checkmate::DfpnRecordBase::last_to, osl::checkmate::ProofPieces::leaf(), osl::eval::max(), osl::eval::min(), osl::checkmate::DfpnRecordBase::min_pdp, osl::checkmate::Dfpn::NodeBase::moved, osl::checkmate::Dfpn::Node::moves, osl::checkmate::Dfpn::ProofOracle::newOracle(), osl::checkmate::Dfpn::Node::nextWhiteStand(), osl::checkmate::ProofDisproof::NoCheckmate(), osl::checkmate::DfpnRecordBase::node_count, osl::checkmate::ProofDisproof::NoEscape(), osl::checkmate::Dfpn::NodeBase::path_record, osl::checkmate::DfpnRecord::proof(), osl::checkmate::DfpnRecordBase::proof_disproof, ProofSimulationTolerance, osl::checkmate::Dfpn::NodeBase::record, osl::checkmate::Dfpn::Node::setCheckmateChildInDefense(), osl::checkmate::Dfpn::Node::setCheckmateDefense(), osl::checkmate::Dfpn::Node::setLoopDetection(), osl::checkmate::DfpnRecord::setProofPieces(), osl::checkmate::DfpnRecordBase::solved, osl::Square::square, osl::checkmate::DfpnRecord::stands, osl::Move::to(), osl::checkmate::Dfpn::ProofOracle::traceable(), osl::WHITE, and osl::checkmate::Dfpn::NodeBase::white_stand.

void osl::checkmate::Dfpn::setBlockingVerify ( bool  enable = true)
inline

Definition at line 134 of file dfpn.h.

References blocking_verify.

void osl::checkmate::Dfpn::setIllegal ( const HashKey &  key,
PieceStand  white 
)
void osl::checkmate::Dfpn::setParallel ( int  id,
DfpnShared s 
)
inline

Definition at line 135 of file dfpn.h.

References parallel_shared, and thread_id.

void osl::checkmate::Dfpn::setTable ( DfpnTable new_table)
template<Player Turn>
static void osl::checkmate::Dfpn::sort ( const NumEffectState &  ,
DfpnMoveVector  
)
static
template<osl::Player Turn>
void osl::checkmate::Dfpn::sort ( const NumEffectState &  state,
DfpnMoveVector moves 
)

Definition at line 1594 of file dfpn.cc.

References osl::PTYPE_EMPTY.

const osl::checkmate::ProofDisproof osl::checkmate::Dfpn::tryProof ( const NumEffectState &  state,
const HashKey &  key,
const PathEncoding path,
const ProofOracle oracle,
size_t  oracle_id,
Move best_move,
Move  last_move = Move::INVALID() 
)

Definition at line 1432 of file dfpn.cc.

const osl::checkmate::ProofDisproof osl::checkmate::Dfpn::tryProofLight ( const NumEffectState &  state,
const HashKey &  key,
const PathEncoding path,
const ProofOracle oracle,
size_t  oracle_id,
Move best_move,
Move  last_move = Move::INVALID() 
)

Definition at line 1440 of file dfpn.cc.

template<bool UseTable>
const ProofDisproof osl::checkmate::Dfpn::tryProofMain ( const NumEffectState &  state,
const HashKey &  key,
const PathEncoding path,
const ProofOracle ,
size_t  oracle_id,
Move best_move,
Move  last_move 
)
private
template<bool UseTable>
const osl::checkmate::ProofDisproof osl::checkmate::Dfpn::tryProofMain ( const NumEffectState &  state,
const HashKey &  key,
const PathEncoding path,
const ProofOracle oracle,
size_t  oracle_id,
Move best_move,
Move  last_move 
)

Member Data Documentation

bool osl::checkmate::Dfpn::blocking_verify
private

Definition at line 128 of file dfpn.h.

Referenced by setBlockingVerify().

size_t osl::checkmate::Dfpn::node_count
private

Definition at line 124 of file dfpn.h.

Referenced by nodeCount().

size_t osl::checkmate::Dfpn::node_count_limit
private

Definition at line 125 of file dfpn.h.

DfpnShared* osl::checkmate::Dfpn::parallel_shared
private

Definition at line 126 of file dfpn.h.

Referenced by setParallel().

boost::scoped_ptr<DfpnPathTable> osl::checkmate::Dfpn::path_table
private

Definition at line 123 of file dfpn.h.

DfpnTable* osl::checkmate::Dfpn::table
private

Definition at line 118 of file dfpn.h.

Referenced by currentTable().

int osl::checkmate::Dfpn::thread_id
private

Definition at line 127 of file dfpn.h.

Referenced by setParallel().

boost::scoped_ptr<Tree> osl::checkmate::Dfpn::tree
private

Definition at line 121 of file dfpn.h.


The documentation for this class was generated from the following files: