Skip to content

Commit

Permalink
ExpAI recruiting: make high_level_fraction parameter configurable
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
mattsc committed Oct 8, 2019
1 parent b8d1ef9 commit 6dc199d
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 2 deletions.
1 change: 1 addition & 0 deletions data/ai/lua/ca_recruit_rushers.lua
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion data/ai/lua/generic_recruit_engine.lua
Expand Up @@ -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" }}
Expand Down
1 change: 1 addition & 0 deletions data/ai/micro_ais/cas/ca_recruit_rushers.lua
Expand Up @@ -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()
Expand Down
2 changes: 1 addition & 1 deletion data/ai/micro_ais/mai-defs/recruiting.lua
Expand Up @@ -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 }
Expand Down
72 changes: 72 additions & 0 deletions data/core/macros/ai.cfg
Expand Up @@ -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

0 comments on commit 6dc199d

Please sign in to comment.