ExpAI recruiting: make high_level_fraction parameter configurable

This also sets its default value to zero, in order to have consistent default behavior with versions from before this parameter was introduced.

It also provides a macro so that the ExpAI can be used with custom parameters in a scenario config, and adds high_level_fraction as an optional parameter to the Recruit Rushers Micro AI.
This commit is contained in:
mattsc 2019-10-08 12:45:59 -07:00
parent b8d1ef94f0
commit 6dc199d4f8
5 changed files with 76 additions and 2 deletions

View file

@ -35,6 +35,7 @@ wesnoth.require("ai/lua/generic_recruit_engine.lua").init(dummy_engine, params)
local ca_recruit_rushers = {}
function ca_recruit_rushers:evaluation(cfg, data)
params.high_level_fraction = cfg.high_level_fraction
return dummy_engine:recruit_rushers_eval()
end

View file

@ -785,7 +785,7 @@ return {
local randomness = params.randomness or 0.1
-- Bonus for higher-level units, as unit cost is penalized otherwise
local high_level_fraction = 0.33
local high_level_fraction = params.high_level_fraction or 0
local all_units = AH.get_live_units {
side = wesnoth.current.side,
{ "not", { canrecruit = "yes" }}

View file

@ -9,6 +9,7 @@ wesnoth.require("ai/lua/generic_recruit_engine.lua").init(internal_recruit_cas,
local ca_recruit_rushers = {}
function ca_recruit_rushers:evaluation(cfg)
internal_params.high_level_fraction = cfg.high_level_fraction
internal_params.randomness = cfg.randomness
internal_params.score_function = function() return cfg.ca_score end
return internal_recruit_cas:recruit_rushers_eval()

View file

@ -18,7 +18,7 @@ local function handle_default_recruitment(cfg)
end
function wesnoth.micro_ais.recruit_rushers(cfg)
local optional_keys = { "randomness" }
local optional_keys = { "high_level_fraction", "randomness" }
local CA_parms = {
ai_id = 'mai_rusher_recruit',
{ ca_id = "move", location = 'ca_recruit_rushers.lua', score = cfg.ca_score or 180000 }

View file

@ -590,3 +590,75 @@
[/candidate_action]
[/stage]
#enddef
#define CUSTOMIZABLE_EXPERIMENTAL_AI ARGS
# Use the Experimental AI with custom parameter setting
# Put this into the [side][ai] tag.
# Does not work in [modify_side][ai] or [modify_ai] at the moment.
[stage]
id=main_loop
name=ai_default_rca::candidate_action_evaluation_loop
{AI_CA_GOTO}
#{AI_CA_RECRUITMENT}
{AI_CA_MOVE_LEADER_TO_GOALS}
{AI_CA_MOVE_LEADER_TO_KEEP}
{AI_CA_HIGH_XP_ATTACK}
{AI_CA_COMBAT}
{AI_CA_HEALING}
{AI_CA_VILLAGES}
{AI_CA_RETREAT}
{AI_CA_MOVE_TO_TARGETS}
{AI_CA_LEADER_SHARES_KEEP}
[candidate_action]
engine=lua
name=recruit_rushers
max_score=300000
location="ai/lua/ca_recruit_rushers.lua"
[args]
{ARGS}
[/args]
[/candidate_action]
[candidate_action]
engine=lua
name=switch_castle
max_score=290000
location="ai/lua/ca_castle_switch.lua"
[/candidate_action]
[candidate_action]
engine=lua
name=retreat_injured
max_score=205000
location="ai/lua/ca_retreat_injured.lua"
[/candidate_action]
[candidate_action]
engine=lua
name=grab_villages
max_score=200000
location="ai/lua/ca_grab_villages.lua"
[/candidate_action]
[candidate_action]
engine=lua
name=spread_poison
max_score=190000
location="ai/lua/ca_spread_poison.lua"
[/candidate_action]
[candidate_action]
engine=lua
name=place_healers
max_score=95000
location="ai/lua/ca_place_healers.lua"
[/candidate_action]
[candidate_action]
engine=lua
name=village_hunt
max_score=30000
location="ai/lua/ca_village_hunt.lua"
[/candidate_action]
[candidate_action]
engine=lua
name=move_to_any_enemy
max_score=1
location="ai/lua/ca_move_to_any_enemy.lua"
[/candidate_action]
[/stage]
#enddef