std::auto_ptr<Geometry> difference( const Geometry& ga, const Geometry& gb ) { GeometrySet<2> gsa( ga ), gsb( gb ), output; algorithm::difference( gsa, gsb, output ); return output.recompose(); }
std::auto_ptr<Geometry> intersection( const Geometry& ga, const Geometry& gb ) { GeometrySet<2> gsa( ga ), gsb( gb ), output; algorithm::intersection( gsa, gsb, output ); GeometrySet<2> filtered; output.filterCovered( filtered ); return filtered.recompose(); }
// genmove GTPResponse genmove(int stone_colour, bool verbose = false) { if (stone_colour == s.getNextToPlay()) { time_t start = time(NULL); GoMove move = GoMove::none(); std::string ai_type = args.get("ai", ""); int time_left = (stone_colour == BLACK) ? black_time_left : white_time_left; if (ai_type == "simulate") { RNG rng; PatternMatcher p; GoStateAnalyser gsa(s, rng, p); move = gsa.selectMoveForSimulation_Mogo<true>(); } else { move = ai_interface.selectMove(time_left, verbose); std::cerr << "Performing update (tree cull after move play)\n"; ai_interface.notifyPlayHasBeenMade(move); } if (!move.isResign()) { s.makeMove(move); } time_t end = time(NULL); time_left -= (end - start); // estimate time used in case we don't have time_left if (time_left < 0) { time_left = 0; } std::cerr << "Spent approx " << (end - start) << " secs thinking\n"; (stone_colour == BLACK ? black_time_left : white_time_left) = time_left; std::cerr << boardToString(s) << "\n"; return GTPResponse(GTP_SUCCESS, moveToString(move)); } else { return GTPResponse(GTP_FAILURE, "Consecutive moves of the same color are not supported."); } }
GoMove selectMove(GoState &s, RNG &rng) { GoStateAnalyser gsa(s, rng, pattern_matcher); GoMove move = gsa.selectMoveForSimulation(); return move; }