All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ntesukiSearcher.cc
Go to the documentation of this file.
2 #include <climits>
3 
5 delay_non_pass = false;
6 
8 ptt_invalid_defense = false;
9 
11 delay_interpose = false;
12 
14 delay_nopromote = false;
15 
17 delay_non_attack = false;
18 
20 read_attack_only = false;
21 
23 ptt_non_attack = false;
24 
26 ptt_siblings_fail = false;
27 
29 ptt_siblings_success = false;
30 
32 ptt_uncle = false;
33 
35 ptt_aunt = false;
36 
39 
40 /* ===================
41  * Constructor / Destructor
42  */
46  unsigned int table_limit,
47  volatile int *stop_flag,
48  bool verbose,
49  int max_pass,
50  NtesukiRecord::IWScheme iwscheme,
51  NtesukiRecord::PSScheme psscheme,
52  NtesukiRecord::ISScheme isscheme,
53  int tsumero_cost,
54  int tsumero_estimate,
55  double gc_ratio)
56  : state(state),
57  mg(mg),
58  table(table_limit,
59  static_cast<unsigned int>(table_limit * gc_ratio),
60  verbose),
61  simulator(state, mg, path, table, isscheme, verbose),
62  node_count(0),
63  verbose(verbose),
64  stop_flag(stop_flag),
65  path(state.turn()),
66  /* control on search */
67  max_pass(max_pass),
68  iwscheme(iwscheme),
69  psscheme(psscheme),
70  isscheme(isscheme),
71  tsumero_cost(tsumero_cost),
72  tsumero_estimate(tsumero_estimate),
73  gc_ratio(gc_ratio),
74  /* statistical information */
75  blockByAttackBack(0), blockByPass(0),
76  attack_node_count(0),
77  attack_node_under_attack_count(0),
78  attack_node_moves_count(0),
79  defense_node_count(0),
80  defense_node_under_attack_count(0),
81  defense_node_moves_count(0),
82  pass_count(0), pass_success_count(0),
83  pass_attack_count(0), pass_attack_success_count(0),
84  sibling_defense_count(0), sibling_defense_success_count(0),
85  sibling_attack_count(0), sibling_attack_success_count(0),
86  isshogi_defense_count(0), isshogi_defense_success_count(0),
87  isshogi_attack_count(0), isshogi_attack_success_count(0),
88  immediate_win(0), immediate_lose(0),
89  attack_back_count(0),
90  proof_without_inversion_count(0), proof_AND_count(0), disproof_by_inversion_count(0)
91 {
97 
98  if (this->max_pass > (int)NtesukiRecord::SIZE)
99  this->max_pass = NtesukiRecord::SIZE;
100 
101  if (verbose)
102  {
103  std::cerr << "NtesukiSearcher \n"
104  << "IWScheme:\t" << iwscheme << "\n"
105  << "PSScheme:\t" << psscheme << "\n"
106  << "ISScheme:\t" << isscheme << "\n"
107  << "Fixed:\t" << NtesukiRecord::fixed_search_depth<< "\n"
108  << "Tsumero cost:\t" << tsumero_cost << "\n"
109  << "Tsumero estimate:\t" << tsumero_estimate << "\n"
110  << "Inversion cost:\t" << NtesukiRecord::inversion_cost << "\n"
111  ;
112  std::cerr << "enhancements: ";
114  std::cerr << " PTT_UNCLE";
116  std::cerr << " PTT_SIBLINGS_FAIL";
118  std::cerr << " PTT_SIBLINGS_SUCCESS";
120  std::cerr << " DELAY_NON_PASS";
122  std::cerr << " PASS_SIMULATION";
124  std::cerr << " DELAY_INTERPOSE";
126  std::cerr << " DELAY_NOPROMOTE";
128  std::cerr << " DELAY_NON_ATTACK";
130  std::cerr << " READ_ATTACK_ONLY";
132  std::cerr << " PTT_NON_ATTACK";
134  std::cerr << " USE_DOMINANCE";
135  std::cerr << "\n";
136  }
137 }
138 
141 {
142  if (verbose)
143  {
144  std::cerr << "~NtesukiSearcher "
145  << table.size()
146  << "/" << node_count
147  << "/" << read_node_limit << "\t"
148  << "pass(" << pass_success_count << "/" << pass_count << ")\n"
149 
150  << "attack_node\t"
151  << attack_node_under_attack_count << "/"
152  << attack_node_count << "\t"
153  << attack_node_moves_count << "moves\n"
154 
155  << "defense_node\t"
156  << defense_node_under_attack_count << "/"
157  << defense_node_count << "\t"
158  << defense_node_moves_count << "moves\n"
159 
160  << "immidate(" << immediate_win << ", "
161  << immediate_lose << ")\n"
162 
163  << "attack_back(" << attack_back_count << ")\n"
164 
165  << "sibling_success(" << sibling_defense_success_count
166  << "/" << sibling_defense_count << ")\n"
167  << "sibling_fail(" << sibling_attack_success_count
168  << "/" << sibling_attack_count << ")\n"
169 
170  << "is_att(" << isshogi_attack_success_count
171  << "/" << isshogi_attack_count << ")\t"
172  << "is_def(" << isshogi_defense_success_count
173  << "/" << isshogi_defense_count << ")\n"
174 
175  << "inversion_win(" << disproof_by_inversion_count
176  << "/" << proof_AND_count
177  << "/" << proof_without_inversion_count << ")\n"
178 
179  << "DAG\t"
182  ;
183  }
184 }
185 
186 NtesukiTable&
189 {
190  return table;
191 }
192 
193 /* explicit instantiation
194  */
195 namespace osl
196 {
197  namespace ntesuki
198  {
199  template int NtesukiSearcher::search<BLACK>();
200  template int NtesukiSearcher::search<WHITE>();
201  }
202 }
203 
204