-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathResolving.cpp
More file actions
116 lines (94 loc) · 2.66 KB
/
Copy pathResolving.cpp
File metadata and controls
116 lines (94 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "Resolving.h"
Resolving::Resolving()
{
}
Resolving::~Resolving()
{
if (_lookahead_tree != nullptr)
{
delete(_lookahead_tree);
_lookahead_tree = nullptr;
}
if (_lookahead != nullptr)
{
delete(_lookahead);
_lookahead = nullptr;
}
}
void Resolving::_create_lookahead_tree(Node & node)
{
TreeBuilderParams build_tree_params;
build_tree_params.root_node = &node;
build_tree_params.limit_to_street = true;
_lookahead_tree = builder.build_tree(build_tree_params);
}
LookaheadResult Resolving::resolve_first_node(Node& node, const Range& player_range, const ArrayX& opponent_range)
{
_create_lookahead_tree(node);
_lookahead = new TreeLookahed(*_lookahead_tree);
_lookahead->resolve_first_node(player_range, opponent_range);
_resolve_results = _lookahead->get_results();
return _resolve_results;
}
//LookaheadResult Resolving::resolve(Node& node, ArrayX& player_range, ArrayX& opponent_cfvs)
//{
// assert(_cardTools.is_valid_range(ToAmxx(player_range), node.board));
// _create_lookahead_tree(node);
//
// _lookBuilder->build_from_tree(_lookahead_tree);
// _lookahead->resolve(player_range, opponent_cfvs);
// _resolve_results = _lookahead->get_results();
// return _resolve_results;
//}
LookaheadResult Resolving::resolve(Node& node, ArrayX& player_range, ArrayX& opponent_cfvs, long long cfr_skip_iters, long long iters)
{
assert(_cardTools.is_valid_range(ToAmx(player_range), node.board));
_create_lookahead_tree(node);
_lookahead = new TreeLookahed(*_lookahead_tree);
_lookahead->_cfr_skip_iters = cfr_skip_iters;
_lookahead->_cfr_iters = iters;
_lookahead->resolve(player_range, opponent_cfvs);
_resolve_results = _lookahead->get_results();
return _resolve_results;
}
ArrayX Resolving::get_possible_actions()
{
return _lookahead_tree->actions;
}
ArrayX Resolving::get_root_cfv()
{
return _resolve_results.root_cfvs;
}
ArrayXX Resolving::get_root_cfv_both_players()
{
return _resolve_results.root_cfvs_both_players;
}
ArrayX Resolving::get_action_cfv(int action)
{
int action_id = _action_to_action_id(action);
return _resolve_results.children_cfvs.row(action_id);
}
ArrayX Resolving::get_chance_action_cfv(int action, ArrayX board)
{
int action_id = _action_to_action_id(action);
return _lookahead->get_chance_action_cfv(action_id, board);
}
ArrayX Resolving::get_action_strategy(int action)
{
int action_id = _action_to_action_id(action);
return _resolve_results.strategy.row(action_id);
}
int Resolving::_action_to_action_id(int action)
{
ArrayX actions = get_possible_actions();
int action_id = -1;
for (int i = 0; i < actions.size(); i++)
{
if(action == actions(i))
{
action_id = i;
}
}
assert(action_id != -1);
return action_id;
}