Public Types | Public Member Functions

claw::ai::game::select_random_action< Method > Class Template Reference

Select a random action among the best ones. More...

#include <game_ai.hpp>

List of all members.

Public Types

typedef Method::state state
typedef Method::action action
typedef Method::score score

Public Member Functions

void operator() (int depth, const state &current_state, action &new_action, bool computer_turn) const
 Select a random action among the best ones.

Detailed Description

template<typename Method>
class claw::ai::game::select_random_action< Method >

Select a random action among the best ones.

Template parameters:

Author:
Julien Jorge, Sébastien Angibaud

Definition at line 211 of file game_ai.hpp.


Member Typedef Documentation

template<typename Method >
typedef Method::action claw::ai::game::select_random_action< Method >::action

Definition at line 215 of file game_ai.hpp.

template<typename Method >
typedef Method::score claw::ai::game::select_random_action< Method >::score

Definition at line 216 of file game_ai.hpp.

template<typename Method >
typedef Method::state claw::ai::game::select_random_action< Method >::state

Definition at line 214 of file game_ai.hpp.


Member Function Documentation

template<typename Method >
void claw::ai::game::select_random_action< Method >::operator() ( int  depth,
const state current_state,
action new_action,
bool  computer_turn 
) const

Select a random action among the best ones.

Parameters:
depthMaximum depth of the search tree.
current_stateThe state of the game.
new_action(in/out) Best known action.
computer_turnTell if the action is done by the computer.

Definition at line 372 of file game_ai.tpp.

References claw::max_vector< E, Comp, Container >::add(), and claw::max_vector< E, Comp, Container >::get_v().

{
  std::list<action> l;
  typename std::list<action>::iterator it;
  action_eval<action, score> eval( new_action, current_state.min_score() );
  Method method;
  max_vector< action_eval<action, score> > events( eval );

  // get all reachable states
  current_state.next_actions( l );

  for (it=l.begin(); it!=l.end(); ++it)
    {
      state* new_state;
                        
      // try and evaluate each action
      new_state = static_cast<state*>(current_state.do_action(*it));

      eval.action = *it;
      eval.eval = method(depth-1, *new_state, !computer_turn);

      delete new_state;

      // keep the best actions.
      events.add( eval );
    }

  std::size_t i = (double)rand()/(RAND_MAX + 1) * events.get_v().size();
  new_action = events.get_v()[i].action;
} // select_random_action::operator()

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