AI Testing. Adds a command line parameter --ai_config<number>=value...
...(patch #1164 by karlm). This patch allow to specify the exact path to ai configuration for each of the sides from the command line, which is very important for batch-testing of various AIs.
This commit is contained in:
parent
82d3045861
commit
374c1f8d83
5 changed files with 23 additions and 3 deletions
|
@ -6,6 +6,7 @@ Version 1.7.0-svn:
|
||||||
number generator with.
|
number generator with.
|
||||||
* new logdomain : uploader to see stat-upload related actions
|
* new logdomain : uploader to see stat-upload related actions
|
||||||
* AI:
|
* AI:
|
||||||
|
* Added command-line option ai_config<number>=<value>
|
||||||
* Fixed incorrect handling of poisoning attacks when suggesting best attack
|
* Fixed incorrect handling of poisoning attacks when suggesting best attack
|
||||||
in user interface
|
in user interface
|
||||||
* Added basic history and hot-redeployment capabilities to in-game console.
|
* Added basic history and hot-redeployment capabilities to in-game console.
|
||||||
|
|
|
@ -852,6 +852,10 @@
|
||||||
[entry]
|
[entry]
|
||||||
name = "Joshua Hudson"
|
name = "Joshua Hudson"
|
||||||
[/entry]
|
[/entry]
|
||||||
|
[entry]
|
||||||
|
name = "Karl Miller (karlm)"
|
||||||
|
email = "karl dot miller dot km at gmail dot com"
|
||||||
|
[/entry]
|
||||||
[entry]
|
[entry]
|
||||||
name = "Laurent Birtz"
|
name = "Laurent Birtz"
|
||||||
[/entry]
|
[/entry]
|
||||||
|
|
|
@ -181,6 +181,9 @@ The side-specific multiplayer options are marked with
|
||||||
has to be replaced by a side number. It usually is 1 or 2 but depends on
|
has to be replaced by a side number. It usually is 1 or 2 but depends on
|
||||||
the number of players possible in the chosen scenario.
|
the number of players possible in the chosen scenario.
|
||||||
.TP
|
.TP
|
||||||
|
.BI --ai_config number = value
|
||||||
|
selects a configuration file to load for the AI controller for this side.
|
||||||
|
.TP
|
||||||
.BI --algorithm number = value
|
.BI --algorithm number = value
|
||||||
selects a non-standard algorithm to be used by the AI controller for
|
selects a non-standard algorithm to be used by the AI controller for
|
||||||
this side. Available values:
|
this side. Available values:
|
||||||
|
|
12
src/game.cpp
12
src/game.cpp
|
@ -682,7 +682,7 @@ bool game_controller::play_multiplayer_mode()
|
||||||
|
|
||||||
std::string era = "era_default";
|
std::string era = "era_default";
|
||||||
std::string scenario = "multiplayer_The_Freelands";
|
std::string scenario = "multiplayer_The_Freelands";
|
||||||
std::map<int,std::string> side_types, side_controllers, side_algorithms;
|
std::map<int,std::string> side_types, side_controllers, side_algorithms, side_ai_configs;
|
||||||
std::map<int,string_map> side_parameters;
|
std::map<int,string_map> side_parameters;
|
||||||
std::string turns = "50";
|
std::string turns = "50";
|
||||||
|
|
||||||
|
@ -720,6 +720,8 @@ bool game_controller::play_multiplayer_mode()
|
||||||
era = value;
|
era = value;
|
||||||
} else if(last_digit && name_head == "--controller") {
|
} else if(last_digit && name_head == "--controller") {
|
||||||
side_controllers[side] = value;
|
side_controllers[side] = value;
|
||||||
|
} else if(last_digit && name_head == "--ai_config") {
|
||||||
|
side_ai_configs[side] = value;
|
||||||
} else if(last_digit && name_head == "--algorithm") {
|
} else if(last_digit && name_head == "--algorithm") {
|
||||||
side_algorithms[side] = value;
|
side_algorithms[side] = value;
|
||||||
} else if(last_digit && name_head == "--side") {
|
} else if(last_digit && name_head == "--side") {
|
||||||
|
@ -780,7 +782,8 @@ bool game_controller::play_multiplayer_mode()
|
||||||
{
|
{
|
||||||
std::map<int,std::string>::const_iterator type = side_types.find(side_num),
|
std::map<int,std::string>::const_iterator type = side_types.find(side_num),
|
||||||
controller = side_controllers.find(side_num),
|
controller = side_controllers.find(side_num),
|
||||||
algorithm = side_algorithms.find(side_num);
|
algorithm = side_algorithms.find(side_num),
|
||||||
|
ai_config = side_ai_configs.find(side_num);
|
||||||
|
|
||||||
const config* side = type == side_types.end() ?
|
const config* side = type == side_types.end() ?
|
||||||
&era_cfg.find_child("multiplayer_side", "random_faction", "yes") :
|
&era_cfg.find_child("multiplayer_side", "random_faction", "yes") :
|
||||||
|
@ -841,6 +844,10 @@ bool game_controller::play_multiplayer_mode()
|
||||||
s["ai_algorithm"] = algorithm->second;
|
s["ai_algorithm"] = algorithm->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(ai_config != side_ai_configs.end()) {
|
||||||
|
s["ai_config"] = ai_config->second;
|
||||||
|
}
|
||||||
|
|
||||||
config& ai_params = s.add_child("ai");
|
config& ai_params = s.add_child("ai");
|
||||||
|
|
||||||
//now add in any arbitrary parameters given to the side
|
//now add in any arbitrary parameters given to the side
|
||||||
|
@ -1757,6 +1764,7 @@ static int process_command_args(int argc, char** argv) {
|
||||||
<< " should be between 1 and 1000, the default is 50.\n"
|
<< " should be between 1 and 1000, the default is 50.\n"
|
||||||
<< " -m, --multiplayer starts a multiplayer game. There are additional\n"
|
<< " -m, --multiplayer starts a multiplayer game. There are additional\n"
|
||||||
<< " options that can be used as explained below:\n"
|
<< " options that can be used as explained below:\n"
|
||||||
|
<< " --ai_config<number>=value selects a configuration file to load for this side.\n"
|
||||||
<< " --algorithm<number>=value selects a non-standard algorithm to be used by\n"
|
<< " --algorithm<number>=value selects a non-standard algorithm to be used by\n"
|
||||||
<< " the AI controller for this side.\n"
|
<< " the AI controller for this side.\n"
|
||||||
<< " --controller<number>=value selects the controller for this side.\n"
|
<< " --controller<number>=value selects the controller for this side.\n"
|
||||||
|
|
|
@ -120,7 +120,11 @@ team::team_info::team_info(const config& cfg) :
|
||||||
if (!user_team_name.translatable())
|
if (!user_team_name.translatable())
|
||||||
user_team_name = user_team_name.from_serialized(user_team_name);
|
user_team_name = user_team_name.from_serialized(user_team_name);
|
||||||
|
|
||||||
ai_manager::add_ai_for_side_from_config(side,cfg,true);
|
if(cfg.has_attribute("ai_config")) {
|
||||||
|
ai_manager::add_ai_for_side_from_file(side, cfg["ai_config"], true);
|
||||||
|
} else {
|
||||||
|
ai_manager::add_ai_for_side_from_config(side, cfg, true);
|
||||||
|
}
|
||||||
|
|
||||||
//legacy parameters
|
//legacy parameters
|
||||||
const config& global_ai_parameters = ai_manager::get_active_ai_global_parameters_for_side(side);
|
const config& global_ai_parameters = ai_manager::get_active_ai_global_parameters_for_side(side);
|
||||||
|
|
Loading…
Add table
Reference in a new issue