50struct ArtificialGameState
57struct ArtificialGameMove
63class ArtificialGameDomain
66 using State = ArtificialGameState;
67 using Move = ArtificialGameMove;
72 return state.depth == 2;
75 static Score
evaluate(
const State &state)
80 static void apply(State &state,
const Move &move)
82 state.code = move.next_code;
83 state.player = -state.player;
87 static void undo(State &state,
const Move&)
90 state.player = -state.player;
94 template <
typename Visitor>
95 static bool for_each_successor(
const State &state,
Visitor visit)
105 return visit(Move{3,
'B'});
110 return visit(Move{5,
'b'});
115 return visit(Move{7,
'b'});
141 for (
const auto &move : path)
146template <
typename Result>
147void print_summary(
const char *title,
const Result &result)
149 std::cout << title <<
'\n';
150 std::cout <<
" value: " << result.value <<
'\n';
151 std::cout <<
" pv: " <<
signature(result.principal_variation) <<
'\n';
152 std::cout <<
" visited: " << result.stats.visited_states <<
'\n';
153 std::cout <<
" cutoffs: " << result.stats.alpha_beta_cutoffs <<
'\n';
160 const ArtificialGameState
root;
165 print_summary(
"Negamax",
negamax);
Umbrella header for the implicit state-space search framework.
__gmp_expr< T, __gmp_binary_expr< __gmp_expr< T, U >, unsigned long int, __gmp_root_function > > root(const __gmp_expr< T, U > &expr, unsigned long int l)
Main namespace for Aleph-w library functions.
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
std::string code(Node *root)
Compute a string with the Lukasiewicz`s word of a tree.
auto alpha_beta_search(Domain domain, typename Domain::State initial_state, ExplorationPolicy policy=Alpha_Beta< Domain >::default_policy(), SearchLimits limits={})
Convenience wrapper for one-shot Alpha-Beta search.
auto negamax_search(Domain domain, typename Domain::State initial_state, ExplorationPolicy policy=Negamax< Domain >::default_policy(), SearchLimits limits={})
Convenience wrapper for one-shot Negamax search.