introduce function to select which states to save to map
This commit is contained in:
parent
f0a496a8f0
commit
27922de8e8
2 changed files with 18 additions and 1 deletions
|
@ -226,6 +226,12 @@ namespace Hanabi
|
||||||
|
|
||||||
probability_t check_play_or_discard(hand_index_t index, bool play);
|
probability_t check_play_or_discard(hand_index_t index, bool play);
|
||||||
|
|
||||||
|
// For the current state, returns whether we will save it in the lookup table.
|
||||||
|
// By default, this is just constant true, but we might want to trade memory for speed, i.e.
|
||||||
|
// store less states, which will reduce memory consumption at the cost of re-computing some of the values
|
||||||
|
// when re-visiting the states.
|
||||||
|
bool save_state_to_map();
|
||||||
|
|
||||||
static constexpr uint8_t no_endgame = std::numeric_limits<uint8_t>::max();
|
static constexpr uint8_t no_endgame = std::numeric_limits<uint8_t>::max();
|
||||||
|
|
||||||
// Usual game state
|
// Usual game state
|
||||||
|
@ -260,6 +266,7 @@ namespace Hanabi
|
||||||
map_type<unsigned long, probability_t> _position_tablebase;
|
map_type<unsigned long, probability_t> _position_tablebase;
|
||||||
|
|
||||||
std::uint64_t _enumerated_states{};
|
std::uint64_t _enumerated_states{};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template<std::size_t num_suits, player_t num_players, std::size_t hand_size>
|
template<std::size_t num_suits, player_t num_players, std::size_t hand_size>
|
||||||
|
|
|
@ -982,6 +982,13 @@ namespace Hanabi
|
||||||
return _actions_log.top().action_type;
|
return _actions_log.top().action_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<suit_t num_suits, player_t num_players, hand_index_t hand_size>
|
||||||
|
bool HanabiState<num_suits, num_players, hand_size>::save_state_to_map()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
return _draw_pile.size() != 2;
|
||||||
|
}
|
||||||
|
|
||||||
template<suit_t num_suits, player_t num_players, hand_index_t hand_size>
|
template<suit_t num_suits, player_t num_players, hand_index_t hand_size>
|
||||||
probability_t HanabiState<num_suits, num_players, hand_size>::evaluate_state()
|
probability_t HanabiState<num_suits, num_players, hand_size>::evaluate_state()
|
||||||
{
|
{
|
||||||
|
@ -1381,7 +1388,10 @@ namespace Hanabi
|
||||||
{
|
{
|
||||||
ASSERT(_position_tablebase[id] == probability);
|
ASSERT(_position_tablebase[id] == probability);
|
||||||
}
|
}
|
||||||
_position_tablebase[id] = probability;
|
if (save_state_to_map())
|
||||||
|
{
|
||||||
|
_position_tablebase[id] = probability;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Hanabi
|
} // namespace Hanabi
|
Loading…
Reference in a new issue